Version 2.18.0-1.0.dev

Merge commit '08b776ac47d7dc14d2bd7414048904a47227dc7b' into 'dev'
diff --git a/pkg/front_end/lib/src/fasta/incremental_compiler.dart b/pkg/front_end/lib/src/fasta/incremental_compiler.dart
index 8375411..ccaf338 100644
--- a/pkg/front_end/lib/src/fasta/incremental_compiler.dart
+++ b/pkg/front_end/lib/src/fasta/incremental_compiler.dart
@@ -251,6 +251,8 @@
 
   IncrementalKernelTarget? get kernelTargetForTesting => _lastGoodKernelTarget;
 
+  bool get skipExperimentalInvalidationChecksForTesting => false;
+
   /// Returns the [Package] used for the package [packageName] in the most
   /// recent compilation.
   Package? getPackageForPackageName(String packageName) =>
@@ -1245,52 +1247,54 @@
     // procedures, if the changed file is used as a mixin anywhere else
     // we can't only recompile the changed file.
     // TODO(jensj): Check for mixins in a smarter and faster way.
-    for (LibraryBuilder builder in reusedResult.notReusedLibraries) {
-      if (missingSources!.contains(builder.fileUri)) {
-        continue;
-      }
-      Library lib = builder.library;
-      for (Class c in lib.classes) {
-        if (!c.isAnonymousMixin && !c.isEliminatedMixin) {
+    if (!skipExperimentalInvalidationChecksForTesting) {
+      for (LibraryBuilder builder in reusedResult.notReusedLibraries) {
+        if (missingSources!.contains(builder.fileUri)) {
           continue;
         }
-        for (Supertype supertype in c.implementedTypes) {
-          if (missingSources.contains(supertype.classNode.fileUri)) {
-            // This is probably a mixin from one of the libraries we want
-            // to rebuild only the body of.
-            // TODO(jensj): We can probably add this to the rebuildBodies
-            // list and just rebuild that library too.
-            // print("Usage of mixin in ${lib.importUri}");
-            return null;
+        Library lib = builder.library;
+        for (Class c in lib.classes) {
+          if (!c.isAnonymousMixin && !c.isEliminatedMixin) {
+            continue;
+          }
+          for (Supertype supertype in c.implementedTypes) {
+            if (missingSources.contains(supertype.classNode.fileUri)) {
+              // This is probably a mixin from one of the libraries we want
+              // to rebuild only the body of.
+              // TODO(jensj): We can probably add this to the rebuildBodies
+              // list and just rebuild that library too.
+              // print("Usage of mixin in ${lib.importUri}");
+              return null;
+            }
           }
         }
       }
-    }
 
-    // Special case FFI: Because the VM ffi transformation inlines
-    // size and position, if the changed file contains ffi structs
-    // we can't only recompile the changed file.
-    // TODO(jensj): Come up with something smarter for this. E.g. we might
-    // check if the FFI-classes are used in other libraries, or as actual nested
-    // structures in other FFI-classes etc.
-    // Alternatively (https://github.com/dart-lang/sdk/issues/45899) we might
-    // do something else entirely that doesn't require special handling.
-    if (_importsFfi()) {
-      for (LibraryBuilder builder in rebuildBodies!) {
-        Library lib = builder.library;
-        for (LibraryDependency dependency in lib.dependencies) {
-          Library importLibrary = dependency.targetLibrary;
-          if (importLibrary.importUri == dartFfiUri) {
-            // Explicitly imports dart:ffi.
-            return null;
-          }
-          for (Reference exportReference in importLibrary.additionalExports) {
-            NamedNode? export = exportReference.node;
-            if (export is Class) {
-              Class c = export;
-              if (c.enclosingLibrary.importUri == dartFfiUri) {
-                // Implicitly imports a dart:ffi class.
-                return null;
+      // Special case FFI: Because the VM ffi transformation inlines
+      // size and position, if the changed file contains ffi structs
+      // we can't only recompile the changed file.
+      // TODO(jensj): Come up with something smarter for this. E.g. we might
+      // check if the FFI-classes are used in other libraries, or as actual
+      // nested structures in other FFI-classes etc.
+      // Alternatively (https://github.com/dart-lang/sdk/issues/45899) we might
+      // do something else entirely that doesn't require special handling.
+      if (_importsFfi()) {
+        for (LibraryBuilder builder in rebuildBodies!) {
+          Library lib = builder.library;
+          for (LibraryDependency dependency in lib.dependencies) {
+            Library importLibrary = dependency.targetLibrary;
+            if (importLibrary.importUri == dartFfiUri) {
+              // Explicitly imports dart:ffi.
+              return null;
+            }
+            for (Reference exportReference in importLibrary.additionalExports) {
+              NamedNode? export = exportReference.node;
+              if (export is Class) {
+                Class c = export;
+                if (c.enclosingLibrary.importUri == dartFfiUri) {
+                  // Implicitly imports a dart:ffi class.
+                  return null;
+                }
               }
             }
           }
diff --git a/pkg/front_end/lib/src/fasta/kernel/macro/annotation_parser.dart b/pkg/front_end/lib/src/fasta/kernel/macro/annotation_parser.dart
index e177ba8..b18526f 100644
--- a/pkg/front_end/lib/src/fasta/kernel/macro/annotation_parser.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/macro/annotation_parser.dart
@@ -2,8 +2,10 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+import 'package:_fe_analyzer_shared/src/macros/executor.dart' as macro;
 import 'package:_fe_analyzer_shared/src/messages/codes.dart';
 import 'package:_fe_analyzer_shared/src/parser/parser.dart';
+import 'package:_fe_analyzer_shared/src/parser/quote.dart';
 import 'package:_fe_analyzer_shared/src/scanner/error_token.dart';
 import 'package:_fe_analyzer_shared/src/scanner/token.dart';
 
@@ -15,7 +17,6 @@
 import '../../scope.dart';
 import '../../source/diet_parser.dart';
 import '../../source/source_library_builder.dart';
-
 import 'macro.dart';
 
 List<MacroApplication>? prebuildAnnotations(
@@ -78,7 +79,35 @@
 }
 
 class _ArgumentsNode implements _Node {
-  _ArgumentsNode();
+  final List<Object?> positionalArguments;
+  final Map<String, Object?> namedArguments;
+
+  _ArgumentsNode(this.positionalArguments, this.namedArguments);
+}
+
+class _PrimitiveValueNode implements _Node {
+  final Object? value;
+
+  _PrimitiveValueNode(this.value);
+}
+
+class _TokenNode implements _Node {
+  final Token token;
+
+  _TokenNode(this.token);
+}
+
+class _NamedArgumentIdentifierNode implements _Node {
+  final String name;
+
+  _NamedArgumentIdentifierNode(this.name);
+}
+
+class _NamedArgumentNode implements _Node {
+  final String name;
+  final Object? value;
+
+  _NamedArgumentNode(this.name, this.value);
 }
 
 class _MacroListener implements Listener {
@@ -154,8 +183,11 @@
       if (macroClass != null &&
           constructorName != null &&
           argumentsNode is _ArgumentsNode) {
-        push(new _MacroApplicationNode(
-            new MacroApplication(macroClass, constructorName)));
+        push(new _MacroApplicationNode(new MacroApplication(
+            macroClass,
+            constructorName,
+            new macro.Arguments(argumentsNode.positionalArguments,
+                argumentsNode.namedArguments))));
         return;
       }
     }
@@ -211,6 +243,9 @@
           pushUnsupported();
         }
         break;
+      case IdentifierContext.namedArgumentReference:
+        push(new _NamedArgumentIdentifierNode(token.lexeme));
+        break;
       default:
         pushUnsupported();
         break;
@@ -224,11 +259,27 @@
 
   @override
   void endArguments(int count, Token beginToken, Token endToken) {
-    if (count == 0) {
-      push(new _ArgumentsNode());
-    } else {
-      // TODO(johnniwinther): Handle arguments.
+    if (unrecognized) {
       pushUnsupported();
+      return;
+    }
+    List<Object?> positionalArguments = [];
+    Map<String, Object?> namedArguments = {};
+    for (int i = 0; i < count; i++) {
+      _Node node = pop();
+      if (node is _PrimitiveValueNode) {
+        positionalArguments.add(node.value);
+      } else if (node is _NamedArgumentNode &&
+          !namedArguments.containsKey(node.name)) {
+        namedArguments[node.name] = node.value;
+      } else {
+        _unsupported();
+      }
+    }
+    if (unrecognized) {
+      pushUnsupported();
+    } else {
+      push(new _ArgumentsNode(positionalArguments, namedArguments));
     }
   }
 
@@ -248,6 +299,99 @@
     // context.
   }
 
+  @override
+  void handleNamedArgument(Token colon) {
+    if (unrecognized) {
+      pushUnsupported();
+    } else {
+      _Node value = pop();
+      _Node name = pop();
+      if (name is _NamedArgumentIdentifierNode &&
+          value is _PrimitiveValueNode) {
+        push(new _NamedArgumentNode(name.name, value.value));
+      } else {
+        pushUnsupported();
+      }
+    }
+  }
+
+  @override
+  void handleLiteralNull(Token token) {
+    push(new _PrimitiveValueNode(null));
+  }
+
+  @override
+  void handleLiteralBool(Token token) {
+    push(new _PrimitiveValueNode(token.lexeme == 'true'));
+  }
+
+  @override
+  void handleLiteralDouble(Token token) {
+    push(new _PrimitiveValueNode(double.parse(token.lexeme)));
+  }
+
+  @override
+  void handleLiteralInt(Token token) {
+    push(new _PrimitiveValueNode(int.parse(token.lexeme)));
+  }
+
+  @override
+  void beginLiteralString(Token token) {
+    push(new _TokenNode(token));
+  }
+
+  @override
+  void endLiteralString(int interpolationCount, Token endToken) {
+    if (unrecognized) {
+      pushUnsupported();
+      return;
+    }
+    if (interpolationCount == 0) {
+      _Node node = pop();
+      if (node is _TokenNode) {
+        String text = unescapeString(node.token.lexeme, node.token, this);
+        if (unrecognized) {
+          pushUnsupported();
+        } else {
+          push(new _PrimitiveValueNode(text));
+        }
+      } else {
+        pushUnsupported();
+      }
+    } else {
+      // TODO(johnniwinther): Should we support this?
+      pushUnsupported();
+    }
+  }
+
+  @override
+  void handleStringPart(Token token) {
+    // TODO(johnniwinther): Should we support this?
+    _unhandled();
+  }
+
+  @override
+  void handleStringJuxtaposition(Token startToken, int literalCount) {
+    if (unrecognized) {
+      pushUnsupported();
+    } else {
+      List<String> values = [];
+      for (int i = 0; i < literalCount; i++) {
+        _Node node = pop();
+        if (node is _PrimitiveValueNode && node.value is String) {
+          values.add(node.value as String);
+        } else {
+          _unsupported();
+        }
+      }
+      if (unrecognized) {
+        pushUnsupported();
+      } else {
+        push(new _PrimitiveValueNode(values.reversed.join()));
+      }
+    }
+  }
+
   //////////////////////////////////////////////////////////////////////////////
   // Stub implementation
   //////////////////////////////////////////////////////////////////////////////
@@ -553,11 +697,6 @@
   }
 
   @override
-  void beginLiteralString(Token token) {
-    _unhandled();
-  }
-
-  @override
   void beginLiteralSymbol(Token token) {
     _unhandled();
   }
@@ -1126,11 +1265,6 @@
   }
 
   @override
-  void endLiteralString(int interpolationCount, Token endToken) {
-    _unhandled();
-  }
-
-  @override
   void endLiteralSymbol(Token hashToken, int identifierCount) {
     _unhandled();
   }
@@ -1637,21 +1771,6 @@
   }
 
   @override
-  void handleLiteralBool(Token token) {
-    _unhandled();
-  }
-
-  @override
-  void handleLiteralDouble(Token token) {
-    _unhandled();
-  }
-
-  @override
-  void handleLiteralInt(Token token) {
-    _unhandled();
-  }
-
-  @override
   void handleLiteralList(
       int count, Token leftBracket, Token? constKeyword, Token rightBracket) {
     _unhandled();
@@ -1663,11 +1782,6 @@
   }
 
   @override
-  void handleLiteralNull(Token token) {
-    _unhandled();
-  }
-
-  @override
   void handleLiteralSetOrMap(int count, Token leftBrace, Token? constKeyword,
       Token rightBrace, bool hasSetEntry) {
     _unhandled();
@@ -1684,11 +1798,6 @@
   }
 
   @override
-  void handleNamedArgument(Token colon) {
-    _unhandled();
-  }
-
-  @override
   void handleNamedMixinApplicationWithClause(Token withKeyword) {
     _unexpected();
   }
@@ -1840,16 +1949,6 @@
   }
 
   @override
-  void handleStringJuxtaposition(Token startToken, int literalCount) {
-    _unhandled();
-  }
-
-  @override
-  void handleStringPart(Token token) {
-    _unhandled();
-  }
-
-  @override
   void handleSuperExpression(Token token, IdentifierContext context) {
     _unsupported();
   }
diff --git a/pkg/front_end/lib/src/fasta/kernel/macro/macro.dart b/pkg/front_end/lib/src/fasta/kernel/macro/macro.dart
index 9d67f00..18a3e34 100644
--- a/pkg/front_end/lib/src/fasta/kernel/macro/macro.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/macro/macro.dart
@@ -65,10 +65,11 @@
 class MacroApplication {
   final ClassBuilder classBuilder;
   final String constructorName;
+  final macro.Arguments arguments;
 
   // TODO(johnniwinther): Add support for arguments.
 
-  MacroApplication(this.classBuilder, this.constructorName);
+  MacroApplication(this.classBuilder, this.constructorName, this.arguments);
 
   late macro.MacroInstanceIdentifier instanceIdentifier;
 
@@ -152,8 +153,7 @@
                       libraryUri,
                       macroClassName,
                       application.constructorName,
-                      // TODO(johnniwinther): Support macro arguments.
-                      new macro.Arguments([], {}));
+                      application.arguments);
               benchmarker?.endSubdivide();
             } catch (e) {
               throw "Error instantiating macro `${application}`: $e";
diff --git a/pkg/front_end/lib/src/fasta/util/textual_outline.dart b/pkg/front_end/lib/src/fasta/util/textual_outline.dart
index 8194d15..203dcd4 100644
--- a/pkg/front_end/lib/src/fasta/util/textual_outline.dart
+++ b/pkg/front_end/lib/src/fasta/util/textual_outline.dart
@@ -24,6 +24,8 @@
 
 import 'package:_fe_analyzer_shared/src/scanner/token.dart' show Token;
 
+import '../fasta_codes.dart' show codeNativeClauseShouldBeAnnotation;
+
 import '../messages.dart' show Message;
 
 abstract class _Chunk implements Comparable<_Chunk> {
@@ -884,6 +886,10 @@
   @override
   void handleRecoverableError(
       Message message, Token startToken, Token endToken) {
+    // We ignore this message, as done by stack_listener.dart.
+    if (message.code == codeNativeClauseShouldBeAnnotation) {
+      return;
+    }
     gotError = true;
   }
 }
diff --git a/pkg/front_end/test/fasta/testing/suite.dart b/pkg/front_end/test/fasta/testing/suite.dart
index c2ab5a9..498d457 100644
--- a/pkg/front_end/test/fasta/testing/suite.dart
+++ b/pkg/front_end/test/fasta/testing/suite.dart
@@ -117,6 +117,8 @@
         StdioProcess;
 import 'package:vm/target/vm.dart' show VmTarget;
 
+import '../../incremental_suite.dart' show TestRecorderForTesting;
+
 import '../../testing_utils.dart' show checkEnvironment;
 import '../../utils/kernel_chain.dart'
     show
@@ -176,6 +178,10 @@
     "group": "Fail"
   },
   {
+    "name": "semiFuzzFailureOnForceRebuildBodies",
+    "group": "Fail"
+  },
+  {
     "name": "SemiFuzzCrash",
     "group": "Fail"
   }
@@ -221,6 +227,8 @@
 final ExpectationSet staticExpectationSet =
     new ExpectationSet.fromJsonList(jsonDecode(EXPECTATIONS));
 final Expectation semiFuzzFailure = staticExpectationSet["SemiFuzzFailure"];
+final Expectation semiFuzzFailureOnForceRebuildBodies =
+    staticExpectationSet["semiFuzzFailureOnForceRebuildBodies"];
 final Expectation semiFuzzCrash = staticExpectationSet["SemiFuzzCrash"];
 
 /// Options used for all tests within a given folder.
@@ -701,9 +709,11 @@
     // If not semi-fuzzing we can't get semi-fuzz errors.
     if (!semiFuzz &&
         (outcomes.contains(semiFuzzFailure) ||
+            outcomes.contains(semiFuzzFailureOnForceRebuildBodies) ||
             outcomes.contains(semiFuzzCrash))) {
       result ??= new Set.from(outcomes);
       result.remove(semiFuzzFailure);
+      result.remove(semiFuzzFailureOnForceRebuildBodies);
       result.remove(semiFuzzCrash);
     }
 
@@ -1157,20 +1167,71 @@
 
     Component platform =
         context.loadPlatform(backendTarget, compilationSetup.options.nnbdMode);
-    Result<ComponentResult>? passResult = await performFileInvalidation(
+
+    final bool hasErrors;
+    {
+      bool foundErrors = false;
+      if ((result.component.problemsAsJson?.length ?? 0) > 0) {
+        foundErrors = true;
+      } else {
+        for (Library library in result.component.libraries) {
+          if ((library.problemsAsJson?.length ?? 0) > 0) {
+            foundErrors = true;
+            break;
+          }
+        }
+      }
+      hasErrors = foundErrors;
+    }
+
+    try {
+      Result<ComponentResult>? passResult = await performFileInvalidation(
+        compilationSetup,
+        platform,
+        uriTranslator,
+        context,
+        originalCompilationResult: result,
+        forceAndCheckRebuildBodiesOnly: false,
+      );
+      if (passResult != null) return passResult;
+
+      passResult = await performChunkReordering(
         compilationSetup,
         platform,
         uriTranslator,
         result,
         context,
-        originalFlag);
-    if (passResult != null) return passResult;
+      );
+      if (passResult != null) return passResult;
 
-    passResult = await performChunkReordering(compilationSetup, platform,
-        uriTranslator, result, context, originalFlag);
-    if (passResult != null) return passResult;
+      if (!hasErrors) {
+        // To get proper splitting (between dill and not dill builders) we need
+        // experimental invalidation - it doesn't work when there's errors
+        // though, so skip those up front.
+        // Note also that because of splitting and privacy this might fail with
+        // an error --- so it should probably be the last one. At some point we
+        // might swallow that so we can continue, but for now it will be good
+        // to know when it's not run because of that.
+        passResult = await performFileSplitting(
+          compilationSetup,
+          platform,
+          uriTranslator,
+          result,
+          context,
+        );
+        if (passResult != null) return passResult;
+      }
 
-    return pass(result);
+      return pass(result);
+    } finally {
+      if (originalFlag != null) {
+        context.explicitExperimentalFlags[
+            ExperimentalFlag.alternativeInvalidationStrategy] = originalFlag;
+      } else {
+        context.explicitExperimentalFlags
+            .remove(ExperimentalFlag.alternativeInvalidationStrategy);
+      }
+    }
   }
 
   /// Perform a number of compilations where each user-file is invalidated
@@ -1181,51 +1242,87 @@
       CompilationSetup compilationSetup,
       Component platform,
       UriTranslator uriTranslator,
-      ComponentResult result,
       FastaContext context,
-      bool? originalFlag) async {
+      {ComponentResult? originalCompilationResult,
+      required bool forceAndCheckRebuildBodiesOnly}) async {
     compilationSetup.errors.clear();
-    IncrementalCompiler incrementalCompiler =
-        new IncrementalCompiler.fromComponent(
+    SemiForceExperimentalInvalidationIncrementalCompiler incrementalCompiler =
+        new SemiForceExperimentalInvalidationIncrementalCompiler.fromComponent(
             new CompilerContext(compilationSetup.options), platform);
+    incrementalCompiler.skipExperimentalInvalidationChecksForTesting =
+        forceAndCheckRebuildBodiesOnly;
     IncrementalCompilerResult incrementalCompilerResult =
         await incrementalCompiler.computeDelta();
     final Component component = incrementalCompilerResult.component;
+    print("Compiled and got ${component.libraries.length} libs");
     if (!canSerialize(component)) {
-      return new Result<ComponentResult>(result, semiFuzzFailure,
-          "Couldn't serialize initial component for fuzzing");
+      return new Result<ComponentResult>(originalCompilationResult,
+          semiFuzzFailure, "Couldn't serialize initial component for fuzzing");
     }
 
     final Set<Uri> userLibraries =
         createUserLibrariesImportUriSet(component, uriTranslator);
     final bool expectErrors = compilationSetup.errors.isNotEmpty;
+
+    if (expectErrors && forceAndCheckRebuildBodiesOnly) {
+      return new Result<ComponentResult>(
+          originalCompilationResult,
+          semiFuzzFailureOnForceRebuildBodies,
+          "Errors upon compilation not compatible "
+          "with forcing rebuild bodies. Got ${compilationSetup.errors}");
+    }
+
     List<Iterable<String>> originalErrors =
         new List<Iterable<String>>.from(compilationSetup.errors);
 
-    Set<Uri> intersectionUserLibraries =
-        result.userLibraries.intersection(userLibraries);
-    if (intersectionUserLibraries.length != userLibraries.length ||
-        userLibraries.length != result.userLibraries.length) {
-      return new Result<ComponentResult>(
-          result,
-          semiFuzzFailure,
-          "Got a different amount of user libraries on first compile "
-          "compared to 'original' compilation:\n\n"
-          "This compile:\n"
-          "${userLibraries.map((e) => e.toString()).join("\n")}\n\n"
-          "Original compile:\n"
-          "${result.userLibraries.map((e) => e.toString()).join("\n")}");
+    if (originalCompilationResult != null) {
+      Set<Uri> intersectionUserLibraries =
+          originalCompilationResult.userLibraries.intersection(userLibraries);
+      if (intersectionUserLibraries.length != userLibraries.length ||
+          userLibraries.length !=
+              originalCompilationResult.userLibraries.length) {
+        String originalCompileString = originalCompilationResult.userLibraries
+            .map((e) => e.toString())
+            .join("\n");
+        return new Result<ComponentResult>(
+            originalCompilationResult,
+            semiFuzzFailure,
+            "Got a different amount of user libraries on first compile "
+            "compared to 'original' compilation:\n\n"
+            "This compile:\n"
+            "${userLibraries.map((e) => e.toString()).join("\n")}\n\n"
+            "Original compile:\n"
+            "$originalCompileString");
+      }
     }
 
     compilationSetup.errors.clear();
     for (Uri importUri in userLibraries) {
+      print(" -> invalidating $importUri");
       incrementalCompiler.invalidate(importUri);
-      final IncrementalCompilerResult newResult =
-          await incrementalCompiler.computeDelta(fullComponent: true);
-      final Component newComponent = newResult.component;
-      if (!canSerialize(newComponent)) {
+      final IncrementalCompilerResult newResult;
+      try {
+        newResult = await incrementalCompiler.computeDelta(fullComponent: true);
+      } catch (e, st) {
         return new Result<ComponentResult>(
-            result, semiFuzzFailure, "Couldn't serialize fuzzed component");
+            originalCompilationResult,
+            semiFuzzCrash,
+            "Crashed with '$e' on recompilation after invalidating "
+            "'$importUri'.\n\n$st");
+      }
+      if (forceAndCheckRebuildBodiesOnly) {
+        bool didRebuildBodiesOnly =
+            incrementalCompiler.recorderForTesting.rebuildBodiesCount! > 0;
+        if (!didRebuildBodiesOnly) {
+          return new Result<ComponentResult>(originalCompilationResult,
+              semiFuzzFailure, "Didn't rebuild bodies only!");
+        }
+      }
+      final Component newComponent = newResult.component;
+      print(" -> and got ${newComponent.libraries.length} libs");
+      if (!canSerialize(newComponent)) {
+        return new Result<ComponentResult>(originalCompilationResult,
+            semiFuzzFailure, "Couldn't serialize fuzzed component");
       }
 
       final Set<Uri> newUserLibraries =
@@ -1237,7 +1334,7 @@
           String errorsString =
               originalErrors.map((error) => error.join('\n')).join('\n\n');
           return new Result<ComponentResult>(
-              result,
+              originalCompilationResult,
               semiFuzzFailure,
               "Expected these errors:\n${errorsString}\n\n"
               "but didn't get any after invalidating $importUri");
@@ -1246,7 +1343,7 @@
               .map((error) => error.join('\n'))
               .join('\n\n');
           return new Result<ComponentResult>(
-              result,
+              originalCompilationResult,
               semiFuzzFailure,
               "Unexpected errors:\n${errorsString}\n\n"
               "after invalidating $importUri");
@@ -1257,27 +1354,25 @@
           userLibraries.intersection(newUserLibraries);
       if (intersectionUserLibraries.length != newUserLibraries.length ||
           newUserLibraries.length != userLibraries.length) {
+        String originalCompileString = "";
+        if (originalCompilationResult != null) {
+          originalCompileString = "Original compile:\n" +
+              originalCompilationResult.userLibraries
+                  .map((e) => e.toString())
+                  .join("\n");
+        }
         return new Result<ComponentResult>(
-            result,
+            originalCompilationResult,
             semiFuzzFailure,
             "Got a different amount of user libraries on recompile "
             "compared to 'original' compilation after having invalidated "
             "$importUri.\n\n"
             "This compile:\n"
             "${newUserLibraries.map((e) => e.toString()).join("\n")}\n\n"
-            "Original compile:\n"
-            "${result.userLibraries.map((e) => e.toString()).join("\n")}");
+            "${originalCompileString}");
       }
     }
 
-    if (originalFlag != null) {
-      context.explicitExperimentalFlags[
-          ExperimentalFlag.alternativeInvalidationStrategy] = originalFlag;
-    } else {
-      context.explicitExperimentalFlags
-          .remove(ExperimentalFlag.alternativeInvalidationStrategy);
-    }
-
     return null;
   }
 
@@ -1302,8 +1397,7 @@
       Component platform,
       UriTranslator uriTranslator,
       ComponentResult result,
-      FastaContext context,
-      bool? originalFlag) async {
+      FastaContext context) async {
     compilationSetup.errors.clear();
 
     FileSystem orgFileSystem = compilationSetup.options.fileSystem;
@@ -1430,14 +1524,152 @@
     compilationSetup.compilerOptions.fileSystem = orgFileSystem;
     return null;
   }
+
+  /// Splits all files into "sub files" that all import and export each other
+  /// so everything should still work (except for privacy).
+  /// Then invalidate one file at a time with forced experimental invalidation.
+  ///
+  /// Prerequisite: No errors should be present, as that doesn't work with
+  /// experimental invalidation.
+  Future<Result<ComponentResult>?> performFileSplitting(
+      CompilationSetup compilationSetup,
+      Component platform,
+      UriTranslator uriTranslator,
+      ComponentResult result,
+      FastaContext context) async {
+    FileSystem orgFileSystem = compilationSetup.options.fileSystem;
+    compilationSetup.options.clearFileSystemCache();
+    _FakeFileSystem fs = new _FakeFileSystem(orgFileSystem);
+    compilationSetup.compilerOptions.fileSystem = fs;
+    IncrementalCompiler incrementalCompiler =
+        new IncrementalCompiler.fromComponent(
+            new CompilerContext(compilationSetup.options), platform);
+    IncrementalCompilerResult initialResult =
+        await incrementalCompiler.computeDelta();
+    Component initialComponent = initialResult.component;
+    if (!canSerialize(initialComponent)) {
+      return new Result<ComponentResult>(result, semiFuzzFailure,
+          "Couldn't serialize initial component for fuzzing");
+    }
+
+    // Create lookup-table from file uri to whatever.
+    Map<Uri, LibraryBuilder> builders = {};
+    for (LibraryBuilder builder
+        in incrementalCompiler.kernelTargetForTesting!.loader.libraryBuilders) {
+      if (builder.importUri.isScheme("dart") && !builder.isSynthetic) continue;
+      if (builder.importUri.isScheme("package") &&
+          !builder.fileUri.toString().contains("/pkg/front_end/testcases/")) {
+        // A package uri where the file uri is *not* inside out testcases.
+        // This for instance ignores "package:expect/expect.dart" etc.
+        continue;
+      }
+      builders[builder.fileUri] = builder;
+      for (LibraryPart part in builder.library.parts) {
+        Uri thisPartUri = builder.importUri.resolve(part.partUri);
+        if (thisPartUri.isScheme("package")) {
+          thisPartUri = incrementalCompiler
+              .kernelTargetForTesting!.uriTranslator
+              .translate(thisPartUri)!;
+        }
+        builders[thisPartUri] = builder;
+      }
+    }
+
+    List<Uri> originalUris = List<Uri>.of(fs.data.keys);
+    for (Uri uri in originalUris) {
+      print("Work on $uri");
+      LibraryBuilder? builder = builders[uri];
+      if (builder == null) {
+        print("Skipping $uri -- couldn't find builder for it.");
+        continue;
+      }
+      Uint8List orgData = fs.data[uri] as Uint8List;
+      FuzzAstVisitorSorter fuzzAstVisitorSorter;
+      try {
+        fuzzAstVisitorSorter =
+            new FuzzAstVisitorSorter(orgData, builder.isNonNullableByDefault);
+      } on FormatException catch (e, st) {
+        // UTF-16-LE formatted test crashes `utf8.decode(bytes)` --- catch that
+        return new Result<ComponentResult>(
+            result,
+            semiFuzzCrash,
+            "$e\n\n"
+            "$st");
+      }
+
+      // Put each chunk into its own file.
+      StringBuffer headerSb = new StringBuffer();
+      List<FuzzAstVisitorSorterChunk> nonHeaderChunks = [];
+
+      for (FuzzAstVisitorSorterChunk chunk in fuzzAstVisitorSorter.chunks) {
+        if (chunk.originalType == FuzzOriginalType.Import ||
+            chunk.originalType == FuzzOriginalType.Export ||
+            chunk.originalType == FuzzOriginalType.LibraryName ||
+            chunk.originalType == FuzzOriginalType.Part ||
+            chunk.originalType == FuzzOriginalType.PartOf ||
+            chunk.originalType == FuzzOriginalType.LanguageVersion) {
+          headerSb.writeln(chunk.getSource());
+        } else {
+          nonHeaderChunks.add(chunk);
+        }
+      }
+
+      Uri getUriForChunk(int chunkNum) {
+        return uri.resolve(uri.pathSegments.last + ".split.$chunkNum.dart");
+      }
+
+      int totalSubFiles = nonHeaderChunks.length;
+      int currentSubFile = 0;
+      for (FuzzAstVisitorSorterChunk chunk in nonHeaderChunks) {
+        // We need to have special handling for dart versions, imports,
+        // exports, etc.
+        StringBuffer sb = new StringBuffer();
+        sb.writeln(headerSb.toString());
+        for (int i = 0; i < totalSubFiles; i++) {
+          if (i == currentSubFile) continue;
+          sb.writeln("import '${getUriForChunk(i)}';");
+          sb.writeln("export '${getUriForChunk(i)}';");
+        }
+        sb.writeln(chunk.getSource());
+        fs.data[getUriForChunk(currentSubFile)] =
+            utf8.encode(sb.toString()) as Uint8List;
+        currentSubFile++;
+      }
+
+      // Rewrite main file.
+      StringBuffer sb = new StringBuffer();
+      sb.writeln(headerSb.toString());
+      for (int i = 0; i < totalSubFiles; i++) {
+        sb.writeln("import '${getUriForChunk(i)}';");
+        sb.writeln("export '${getUriForChunk(i)}';");
+      }
+      fs.data[uri] = utf8.encode(sb.toString()) as Uint8List;
+    }
+
+    Result<ComponentResult>? passResult = await performFileInvalidation(
+      compilationSetup,
+      platform,
+      uriTranslator,
+      context,
+      originalCompilationResult: null,
+      forceAndCheckRebuildBodiesOnly: true,
+    );
+    if (passResult != null) return passResult;
+
+    compilationSetup.options.clearFileSystemCache();
+    compilationSetup.compilerOptions.fileSystem = orgFileSystem;
+    return null;
+  }
 }
 
 class FuzzAstVisitorSorterChunk {
+  final FuzzOriginalType originalType;
   final String data;
   final String? metadataAndComments;
   final int layer;
 
-  FuzzAstVisitorSorterChunk(this.data, this.metadataAndComments, this.layer);
+  FuzzAstVisitorSorterChunk(
+      this.originalType, this.data, this.metadataAndComments, this.layer);
 
   @override
   String toString() {
@@ -1454,6 +1686,23 @@
 
 enum FuzzSorterState { nonSortable, importExportSortable, sortableRest }
 
+enum FuzzOriginalType {
+  Import,
+  Export,
+  LanguageVersion,
+  AdditionalMetadata,
+  Class,
+  Mixin,
+  Enum,
+  Extension,
+  LibraryName,
+  Part,
+  PartOf,
+  TopLevelFields,
+  TopLevelMethod,
+  TypeDef,
+}
+
 class FuzzAstVisitorSorter extends ParserAstVisitor {
   final Uint8List bytes;
   final String asString;
@@ -1471,6 +1720,7 @@
           metadataStart!.charOffset, metadataEndInclusive!.charEnd);
       layer++;
       chunks.add(new FuzzAstVisitorSorterChunk(
+        FuzzOriginalType.AdditionalMetadata,
         "",
         metadata,
         layer,
@@ -1519,6 +1769,7 @@
     if (hasLanguageVersion) {
       layer++;
       chunks.add(new FuzzAstVisitorSorterChunk(
+        FuzzOriginalType.LanguageVersion,
         asString.substring(
             fromToken.precedingComments!.charOffset, comment.charEnd),
         null,
@@ -1528,8 +1779,8 @@
     }
   }
 
-  void handleData(
-      FuzzSorterState thisState, Token startInclusive, Token endInclusive) {
+  void handleData(FuzzOriginalType originalType, FuzzSorterState thisState,
+      Token startInclusive, Token endInclusive) {
     // Non-sortable things always gets a new layer.
     if (state != thisState || thisState == FuzzSorterState.nonSortable) {
       state = thisState;
@@ -1560,6 +1811,7 @@
           metadataStart!.charOffset, metadataEndInclusive!.charEnd);
     }
     chunks.add(new FuzzAstVisitorSorterChunk(
+      originalType,
       asString.substring(startInclusive.charOffset, endInclusive.charEnd),
       metadata,
       layer,
@@ -1570,39 +1822,43 @@
 
   @override
   void visitExport(ExportEnd node, Token startInclusive, Token endInclusive) {
-    handleData(
-        FuzzSorterState.importExportSortable, startInclusive, endInclusive);
+    handleData(FuzzOriginalType.Export, FuzzSorterState.importExportSortable,
+        startInclusive, endInclusive);
   }
 
   @override
   void visitImport(ImportEnd node, Token startInclusive, Token? endInclusive) {
-    handleData(
-        FuzzSorterState.importExportSortable, startInclusive, endInclusive!);
+    handleData(FuzzOriginalType.Import, FuzzSorterState.importExportSortable,
+        startInclusive, endInclusive!);
   }
 
   @override
   void visitClass(
       ClassDeclarationEnd node, Token startInclusive, Token endInclusive) {
     // TODO(jensj): Possibly sort stuff inside of this too.
-    handleData(FuzzSorterState.sortableRest, startInclusive, endInclusive);
+    handleData(FuzzOriginalType.Class, FuzzSorterState.sortableRest,
+        startInclusive, endInclusive);
   }
 
   @override
   void visitEnum(EnumEnd node, Token startInclusive, Token endInclusive) {
-    handleData(FuzzSorterState.sortableRest, startInclusive, endInclusive);
+    handleData(FuzzOriginalType.Enum, FuzzSorterState.sortableRest,
+        startInclusive, endInclusive);
   }
 
   @override
   void visitExtension(
       ExtensionDeclarationEnd node, Token startInclusive, Token endInclusive) {
     // TODO(jensj): Possibly sort stuff inside of this too.
-    handleData(FuzzSorterState.sortableRest, startInclusive, endInclusive);
+    handleData(FuzzOriginalType.Extension, FuzzSorterState.sortableRest,
+        startInclusive, endInclusive);
   }
 
   @override
   void visitLibraryName(
       LibraryNameEnd node, Token startInclusive, Token endInclusive) {
-    handleData(FuzzSorterState.nonSortable, startInclusive, endInclusive);
+    handleData(FuzzOriginalType.LibraryName, FuzzSorterState.nonSortable,
+        startInclusive, endInclusive);
   }
 
   @override
@@ -1620,44 +1876,65 @@
   void visitMixin(
       MixinDeclarationEnd node, Token startInclusive, Token endInclusive) {
     // TODO(jensj): Possibly sort stuff inside of this too.
-    handleData(FuzzSorterState.sortableRest, startInclusive, endInclusive);
+    handleData(FuzzOriginalType.Mixin, FuzzSorterState.sortableRest,
+        startInclusive, endInclusive);
   }
 
   @override
   void visitNamedMixin(
       NamedMixinApplicationEnd node, Token startInclusive, Token endInclusive) {
     // TODO(jensj): Possibly sort stuff inside of this too.
-    handleData(FuzzSorterState.sortableRest, startInclusive, endInclusive);
+    handleData(FuzzOriginalType.Mixin, FuzzSorterState.sortableRest,
+        startInclusive, endInclusive);
   }
 
   @override
   void visitPart(PartEnd node, Token startInclusive, Token endInclusive) {
-    handleData(FuzzSorterState.nonSortable, startInclusive, endInclusive);
+    handleData(FuzzOriginalType.Part, FuzzSorterState.nonSortable,
+        startInclusive, endInclusive);
   }
 
   @override
   void visitPartOf(PartOfEnd node, Token startInclusive, Token endInclusive) {
-    handleData(FuzzSorterState.nonSortable, startInclusive, endInclusive);
+    handleData(FuzzOriginalType.PartOf, FuzzSorterState.nonSortable,
+        startInclusive, endInclusive);
   }
 
   @override
   void visitTopLevelFields(
       TopLevelFieldsEnd node, Token startInclusive, Token endInclusive) {
-    handleData(FuzzSorterState.sortableRest, startInclusive, endInclusive);
+    handleData(FuzzOriginalType.TopLevelFields, FuzzSorterState.sortableRest,
+        startInclusive, endInclusive);
   }
 
   @override
   void visitTopLevelMethod(
       TopLevelMethodEnd node, Token startInclusive, Token endInclusive) {
-    handleData(FuzzSorterState.sortableRest, startInclusive, endInclusive);
+    handleData(FuzzOriginalType.TopLevelMethod, FuzzSorterState.sortableRest,
+        startInclusive, endInclusive);
   }
 
   @override
   void visitTypedef(TypedefEnd node, Token startInclusive, Token endInclusive) {
-    handleData(FuzzSorterState.sortableRest, startInclusive, endInclusive);
+    handleData(FuzzOriginalType.TypeDef, FuzzSorterState.sortableRest,
+        startInclusive, endInclusive);
   }
 }
 
+class SemiForceExperimentalInvalidationIncrementalCompiler
+    extends IncrementalCompiler {
+  @override
+  final TestRecorderForTesting recorderForTesting =
+      new TestRecorderForTesting();
+
+  @override
+  bool skipExperimentalInvalidationChecksForTesting = true;
+
+  SemiForceExperimentalInvalidationIncrementalCompiler.fromComponent(
+      CompilerContext context, Component? componentToInitializeFrom)
+      : super.fromComponent(context, componentToInitializeFrom);
+}
+
 class _FakeFileSystem extends FileSystem {
   bool redirectAndRecord = true;
   final Map<Uri, Uint8List?> data = {};
diff --git a/pkg/front_end/test/macros/declaration/data/pkgs/macro/lib/macro.dart b/pkg/front_end/test/macros/declaration/data/pkgs/macro/lib/macro.dart
index c7fc7d5..99bcb57 100644
--- a/pkg/front_end/test/macros/declaration/data/pkgs/macro/lib/macro.dart
+++ b/pkg/front_end/test/macros/declaration/data/pkgs/macro/lib/macro.dart
@@ -25,3 +25,10 @@
 class NonMacro {
   const NonMacro();
 }
+
+macro class Macro4 implements Macro {
+  final field;
+  final named;
+
+  const Macro4(this.field, {this.named});
+}
\ No newline at end of file
diff --git a/pkg/front_end/test/macros/declaration/data/tests/all_precompiled.dart b/pkg/front_end/test/macros/declaration/data/tests/all_precompiled.dart
index 2da2a58..6e2aea0 100644
--- a/pkg/front_end/test/macros/declaration/data/tests/all_precompiled.dart
+++ b/pkg/front_end/test/macros/declaration/data/tests/all_precompiled.dart
@@ -10,6 +10,6 @@
 
 import 'package:precompiled_macro/precompiled_macro.dart';
 
-/*member: main:appliedMacros=[PrecompiledMacro.new]*/
+/*member: main:appliedMacros=[PrecompiledMacro.new()]*/
 @PrecompiledMacro()
 void main() {}
diff --git a/pkg/front_end/test/macros/declaration/data/tests/applications.dart b/pkg/front_end/test/macros/declaration/data/tests/applications.dart
index 1f03c5a..228b1f1 100644
--- a/pkg/front_end/test/macros/declaration/data/tests/applications.dart
+++ b/pkg/front_end/test/macros/declaration/data/tests/applications.dart
@@ -21,7 +21,7 @@
   package:macro/macro.dart/Macro3/named()],
  macrosAreApplied,
  macrosAreAvailable,
- neededPrecompilations=[package:macro/macro.dart=Macro1(named/new)|Macro2(named/new)|Macro3(named/new)]
+ neededPrecompilations=[package:macro/macro.dart=Macro1(named/new)|Macro2(named/new)|Macro3(named/new)|Macro4(new)]
 */
 
 import 'package:macro/macro.dart';
@@ -29,10 +29,10 @@
 
 /*class: Class:
  appliedMacros=[
-  Macro1.new,
-  Macro2.named,
-  Macro2.new,
-  Macro3.named],
+  Macro1.new(),
+  Macro2.named(),
+  Macro2.new(),
+  Macro3.named()],
  macrosAreApplied
 */
 @Macro2.named()
@@ -41,31 +41,31 @@
 @Macro1()
 class Class {
   /*member: Class.:appliedMacros=[
-    Macro1.named,
-    Macro1.new,
-    Macro2.named,
-    Macro3.new]*/
+    Macro1.named(),
+    Macro1.new(),
+    Macro2.named(),
+    Macro3.new()]*/
   @Macro1.named()
   @prefix.Macro1()
   @prefix.Macro2.named()
   @Macro3()
   Class();
 
-  /*member: Class.method:appliedMacros=[Macro3.named]*/
+  /*member: Class.method:appliedMacros=[Macro3.named()]*/
   @Macro3.named()
   void method() {}
 
-  /*member: Class.field:appliedMacros=[Macro3.new]*/
+  /*member: Class.field:appliedMacros=[Macro3.new()]*/
   @prefix.Macro3()
   var field;
 }
 
-/*member: method:appliedMacros=[Macro2.named]*/
+/*member: method:appliedMacros=[Macro2.named()]*/
 @Macro2.named()
 void method() {}
 
 @Macro3()
-/*member: field:appliedMacros=[Macro3.new]*/
+/*member: field:appliedMacros=[Macro3.new()]*/
 var field;
 
 main() {}
diff --git a/pkg/front_end/test/macros/declaration/data/tests/declare_vs_apply/apply_lib.dart b/pkg/front_end/test/macros/declaration/data/tests/declare_vs_apply/apply_lib.dart
index fc6ae56..1ae6cfa 100644
--- a/pkg/front_end/test/macros/declaration/data/tests/declare_vs_apply/apply_lib.dart
+++ b/pkg/front_end/test/macros/declaration/data/tests/declare_vs_apply/apply_lib.dart
@@ -11,7 +11,7 @@
 import 'apply_lib_dep.dart';
 
 /*class: Class:
- appliedMacros=[Macro1.new],
+ appliedMacros=[Macro1.new()],
  macrosAreApplied
 */
 @Macro1()
diff --git a/pkg/front_end/test/macros/declaration/data/tests/import_macro_package.dart b/pkg/front_end/test/macros/declaration/data/tests/import_macro_package.dart
index 64d7efc..daf3f12 100644
--- a/pkg/front_end/test/macros/declaration/data/tests/import_macro_package.dart
+++ b/pkg/front_end/test/macros/declaration/data/tests/import_macro_package.dart
@@ -7,7 +7,7 @@
   package:_fe_analyzer_shared/src/macros/api.dart|package:macro/macro.dart,
   main.dart],
  macrosAreAvailable,
- neededPrecompilations=[package:macro/macro.dart=Macro1(named/new)|Macro2(named/new)|Macro3(named/new)]
+ neededPrecompilations=[package:macro/macro.dart=Macro1(named/new)|Macro2(named/new)|Macro3(named/new)|Macro4(new)]
 */
 
 // ignore: unused_import
diff --git a/pkg/front_end/test/macros/declaration/data/tests/macro_arguments.dart b/pkg/front_end/test/macros/declaration/data/tests/macro_arguments.dart
new file mode 100644
index 0000000..3f14d68
--- /dev/null
+++ b/pkg/front_end/test/macros/declaration/data/tests/macro_arguments.dart
@@ -0,0 +1,79 @@
+// Copyright (c) 2022, 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.
+
+/*library: 
+ compilationSequence=[
+  package:_fe_analyzer_shared/src/macros/api.dart|package:macro/macro.dart,
+  main.dart],
+ macroInstanceIds=[
+  package:macro/macro.dart/Macro4/(3.14),
+  package:macro/macro.dart/Macro4/(3.14,named:1.41),
+  package:macro/macro.dart/Macro4/(42),
+  package:macro/macro.dart/Macro4/(87,named:42),
+  package:macro/macro.dart/Macro4/(bar,named:baz),
+  package:macro/macro.dart/Macro4/(false),
+  package:macro/macro.dart/Macro4/(false,named:true),
+  package:macro/macro.dart/Macro4/(foo),
+  package:macro/macro.dart/Macro4/(foobar),
+  package:macro/macro.dart/Macro4/(foobar,named:boz_qux),
+  package:macro/macro.dart/Macro4/(null),
+  package:macro/macro.dart/Macro4/(null,named:null),
+  package:macro/macro.dart/Macro4/(qux,named:boz),
+  package:macro/macro.dart/Macro4/(true)],
+ macrosAreApplied,
+ macrosAreAvailable,
+ neededPrecompilations=[package:macro/macro.dart=Macro1(named/new)|Macro2(named/new)|Macro3(named/new)|Macro4(new)]
+*/
+
+import 'package:macro/macro.dart';
+
+/*member: function1:appliedMacros=[
+  Macro4.new(null),
+  Macro4.new(null,named:null)]*/
+@Macro4(null)
+@Macro4(null, named: null)
+function1() {}
+
+/*member: function2:appliedMacros=[
+  Macro4.new(42),
+  Macro4.new(87,named:42)]*/
+@Macro4(42)
+@Macro4(87, named: 42)
+function2() {}
+
+/*member: function3:appliedMacros=[
+  Macro4.new(false,named:true),
+  Macro4.new(true)]*/
+@Macro4(true)
+@Macro4(false, named: true)
+function3() {}
+
+/*member: function4:appliedMacros=[Macro4.new(false)]*/
+@Macro4(false)
+function4() {}
+
+/*member: function5:appliedMacros=[
+  Macro4.new(bar,named:baz),
+  Macro4.new(foo),
+  Macro4.new(qux,named:boz)]*/
+@Macro4("foo")
+@Macro4("bar", named: "baz")
+@Macro4(named: "boz", "qux")
+function5() {}
+
+/*member: function6:appliedMacros=[
+  Macro4.new(3.14),
+  Macro4.new(3.14,named:1.41)]*/
+@Macro4(3.14)
+@Macro4(3.14, named: 1.41)
+function6() {}
+
+/*member: function7:appliedMacros=[
+  Macro4.new(foobar),
+  Macro4.new(foobar,named:boz_qux)]*/
+@Macro4("foo" "bar")
+@Macro4("foo" "bar", named: "boz" "_" "qux")
+function7() {}
+
+main() {}
diff --git a/pkg/front_end/test/macros/declaration/data/tests/multiple_macros/macro_lib2b.dart b/pkg/front_end/test/macros/declaration/data/tests/multiple_macros/macro_lib2b.dart
index 3aa757c..e220fb9d 100644
--- a/pkg/front_end/test/macros/declaration/data/tests/multiple_macros/macro_lib2b.dart
+++ b/pkg/front_end/test/macros/declaration/data/tests/multiple_macros/macro_lib2b.dart
@@ -12,7 +12,7 @@
 import 'macro_lib2a.dart';
 
 /*class: Macro2b:
- appliedMacros=[Macro2a.new],
+ appliedMacros=[Macro2a.new()],
  macrosAreApplied
 */
 @Macro2a()
diff --git a/pkg/front_end/test/macros/declaration/data/tests/multiple_macros/main.dart b/pkg/front_end/test/macros/declaration/data/tests/multiple_macros/main.dart
index 1e9ac81..73727a0 100644
--- a/pkg/front_end/test/macros/declaration/data/tests/multiple_macros/main.dart
+++ b/pkg/front_end/test/macros/declaration/data/tests/multiple_macros/main.dart
@@ -22,9 +22,9 @@
 import 'macro_lib2b.dart';
 
 /*member: main:appliedMacros=[
-  Macro1.new,
-  Macro2a.new,
-  Macro2b.new]*/
+  Macro1.new(),
+  Macro2a.new(),
+  Macro2b.new()]*/
 @Macro1()
 @Macro2a()
 @Macro2b()
diff --git a/pkg/front_end/test/macros/declaration/data/tests/precompiled.dart b/pkg/front_end/test/macros/declaration/data/tests/precompiled.dart
index 1311d4c..075dd0a 100644
--- a/pkg/front_end/test/macros/declaration/data/tests/precompiled.dart
+++ b/pkg/front_end/test/macros/declaration/data/tests/precompiled.dart
@@ -11,15 +11,15 @@
   package:precompiled_macro/precompiled_macro.dart/PrecompiledMacro/()],
  macrosAreApplied,
  macrosAreAvailable,
- neededPrecompilations=[package:macro/macro.dart=Macro1(named/new)|Macro2(named/new)|Macro3(named/new)]
+ neededPrecompilations=[package:macro/macro.dart=Macro1(named/new)|Macro2(named/new)|Macro3(named/new)|Macro4(new)]
 */
 
 import 'package:precompiled_macro/precompiled_macro.dart';
 import 'package:macro/macro.dart';
 
 /*member: main:appliedMacros=[
-  Macro1.new,
-  PrecompiledMacro.new]*/
+  Macro1.new(),
+  PrecompiledMacro.new()]*/
 @PrecompiledMacro()
 @Macro1()
 void main() {}
diff --git a/pkg/front_end/test/macros/declaration/data/tests/use_macro_package.dart b/pkg/front_end/test/macros/declaration/data/tests/use_macro_package.dart
index 1db43d7..608039c 100644
--- a/pkg/front_end/test/macros/declaration/data/tests/use_macro_package.dart
+++ b/pkg/front_end/test/macros/declaration/data/tests/use_macro_package.dart
@@ -16,29 +16,29 @@
   package:macro/macro.dart/Macro3/()],
  macrosAreApplied,
  macrosAreAvailable,
- neededPrecompilations=[package:macro/macro.dart=Macro1(named/new)|Macro2(named/new)|Macro3(named/new)]
+ neededPrecompilations=[package:macro/macro.dart=Macro1(named/new)|Macro2(named/new)|Macro3(named/new)|Macro4(new)]
 */
 library use_macro_package;
 
 import 'package:macro/macro.dart';
 
-/*member: main:appliedMacros=[Macro1.new]*/
+/*member: main:appliedMacros=[Macro1.new()]*/
 @Macro1()
 void main() {}
 
 /*class: Class1:
- appliedMacros=[Macro2.new],
+ appliedMacros=[Macro2.new()],
  macrosAreApplied
 */
 @Macro2()
 class Class1 {
-  /*member: Class1.:appliedMacros=[Macro3.new]*/
+  /*member: Class1.:appliedMacros=[Macro3.new()]*/
   @Macro3()
   Class1();
 
   /*member: Class1.method:appliedMacros=[
-    Macro1.new,
-    Macro2.new]*/
+    Macro1.new(),
+    Macro2.new()]*/
   @Macro1()
   @Macro2()
   void method() {}
@@ -49,7 +49,7 @@
 
 /*class: Class3:macrosAreApplied*/
 class Class3 {
-  /*member: Class3.field:appliedMacros=[Macro3.new]*/
+  /*member: Class3.field:appliedMacros=[Macro3.new()]*/
   @Macro3()
   var field;
 }
@@ -59,7 +59,7 @@
   var field;
 }
 
-/*member: field:appliedMacros=[Macro1.new]*/
+/*member: field:appliedMacros=[Macro1.new()]*/
 @Macro1()
 var field;
 
diff --git a/pkg/front_end/test/macros/declaration/data/tests/use_macro_source/main.dart b/pkg/front_end/test/macros/declaration/data/tests/use_macro_source/main.dart
index fb50380..819b982 100644
--- a/pkg/front_end/test/macros/declaration/data/tests/use_macro_source/main.dart
+++ b/pkg/front_end/test/macros/declaration/data/tests/use_macro_source/main.dart
@@ -19,19 +19,19 @@
 
 import 'macro_lib.dart';
 
-/*member: main:appliedMacros=[Macro1.new]*/
+/*member: main:appliedMacros=[Macro1.new()]*/
 @Macro1()
 void main() {}
 
 /*class: Class1:
- appliedMacros=[Macro2.new],
+ appliedMacros=[Macro2.new()],
  macrosAreApplied
 */
 @Macro2()
 class Class1 {
   /*member: Class1.method:appliedMacros=[
-    Macro1.new,
-    Macro2.new]*/
+    Macro1.new(),
+    Macro2.new()]*/
   @Macro1()
   @Macro2()
   void method() {}
@@ -42,7 +42,7 @@
 
 /*class: Class3:macrosAreApplied*/
 class Class3 {
-  /*member: Class3.field:appliedMacros=[Macro1.new]*/
+  /*member: Class3.field:appliedMacros=[Macro1.new()]*/
   @Macro1()
   var field;
 }
diff --git a/pkg/front_end/test/macros/declaration/macro_declaration_test.dart b/pkg/front_end/test/macros/declaration/macro_declaration_test.dart
index 746e1a6..de7512f 100644
--- a/pkg/front_end/test/macros/declaration/macro_declaration_test.dart
+++ b/pkg/front_end/test/macros/declaration/macro_declaration_test.dart
@@ -198,11 +198,12 @@
       Features features, List<MacroApplication>? macroApplications) {
     if (macroApplications != null) {
       for (MacroApplication application in macroApplications) {
-        String className = application.classBuilder.name;
-        String constructorName =
-            constructorNameToString(application.constructorName);
-        features.addElement(
-            Tags.appliedMacros, '${className}.${constructorName}');
+        StringBuffer sb = new StringBuffer();
+        sb.write(application.classBuilder.name);
+        sb.write('.');
+        sb.write(constructorNameToString(application.constructorName));
+        sb.write(application.arguments.toText());
+        features.addElement(Tags.appliedMacros, sb.toString());
       }
     }
   }
@@ -347,7 +348,8 @@
   _MacroInstanceIdentifier(
       this.library, this.name, this.constructor, this.arguments);
 
-  String toText() => '${importUriToString(library)}/${name}/${constructor}()';
+  String toText() => '${importUriToString(library)}/${name}/'
+      '${constructor}${arguments.toText()}';
 
   @override
   void serialize(Serializer serializer) => throw UnimplementedError();
@@ -374,3 +376,25 @@
     throw UnimplementedError();
   }
 }
+
+extension on Arguments {
+  String toText() {
+    StringBuffer sb = new StringBuffer();
+    sb.write('(');
+    String comma = '';
+    for (Object? positional in positional) {
+      sb.write(comma);
+      sb.write(positional);
+      comma = ',';
+    }
+    for (MapEntry<String, Object?> named in named.entries) {
+      sb.write(comma);
+      sb.write(named.key);
+      sb.write(':');
+      sb.write(named.value);
+      comma = ',';
+    }
+    sb.write(')');
+    return sb.toString();
+  }
+}
diff --git a/pkg/front_end/test/spell_checking_list_tests.txt b/pkg/front_end/test/spell_checking_list_tests.txt
index 5f1144f..38d1b02 100644
--- a/pkg/front_end/test/spell_checking_list_tests.txt
+++ b/pkg/front_end/test/spell_checking_list_tests.txt
@@ -490,6 +490,7 @@
 pp
 preliminary
 prematurely
+prerequisite
 press
 pretends
 printouts
@@ -514,6 +515,7 @@
 quux
 quuz
 reality
+recompilation
 recompiles
 redir
 redirections
@@ -620,6 +622,7 @@
 supermixin
 supplement
 suspension
+swallow
 t\b\f\u
 t\u
 ta
diff --git a/pkg/front_end/testcases/extensions/ambiguous.dart b/pkg/front_end/testcases/extensions/ambiguous.dart
index 58c25ea..df66ba8 100644
--- a/pkg/front_end/testcases/extensions/ambiguous.dart
+++ b/pkg/front_end/testcases/extensions/ambiguous.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 extension A on C {
   void method() {}
   int get getter => 42;
diff --git a/pkg/front_end/testcases/extensions/ambiguous.dart.textual_outline.expect b/pkg/front_end/testcases/extensions/ambiguous.dart.textual_outline.expect
index 64d21ffcd..cdead34 100644
--- a/pkg/front_end/testcases/extensions/ambiguous.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/extensions/ambiguous.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 extension A on C {
   void method() {}
   int get getter => 42;
diff --git a/pkg/front_end/testcases/extensions/ambiguous.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/extensions/ambiguous.dart.textual_outline_modelled.expect
index 56bcb51..181cba7e 100644
--- a/pkg/front_end/testcases/extensions/ambiguous.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/extensions/ambiguous.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class C {}
 
 errors(C c) {}
diff --git a/pkg/front_end/testcases/extensions/ambiguous.dart.weak.expect b/pkg/front_end/testcases/extensions/ambiguous.dart.weak.expect
index 1dca435..3e35b2e 100644
--- a/pkg/front_end/testcases/extensions/ambiguous.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/ambiguous.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -150,21 +150,11 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension A on self::C* {
+extension A on self::C {
   method method = self::A|method;
   tearoff method = self::A|get#method;
   get getter = self::A|get#getter;
@@ -174,7 +164,7 @@
   operator [] = self::A|[];
   set setter = self::A|set#setter;
 }
-extension B on self::C* {
+extension B on self::C {
   method method = self::B|method;
   tearoff method = self::B|get#method;
   get getter = self::B|get#getter;
@@ -184,33 +174,33 @@
   set setter = self::B|set#setter;
   set property = self::B|set#property;
 }
-static method A|method(lowered final self::C* #this) → void {}
-static method A|get#method(lowered 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(lowered 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(lowered final self::C* #this, core::int* value) → void {}
-static method A|get#property(lowered 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|+(lowered 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-(lowered final self::C* #this) → core::int*
+static method A|unary-(lowered final self::C #this) → core::int
   return 0;
-static method A|[](lowered 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(lowered final self::C* #this) → void {}
-static method B|get#method(lowered 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(lowered 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(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*
+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-(lowered final self::C* #this) → core::int*
+static method B|unary-(lowered final self::C #this) → core::int
   return 0;
-static method B|[]=(lowered final self::C* #this, core::int* i, core::int* j) → void {}
-static method errors(self::C* c) → dynamic {
+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'.
 Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
diff --git a/pkg/front_end/testcases/extensions/ambiguous.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/ambiguous.dart.weak.modular.expect
index 1dca435..3e35b2e 100644
--- a/pkg/front_end/testcases/extensions/ambiguous.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/extensions/ambiguous.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -150,21 +150,11 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension A on self::C* {
+extension A on self::C {
   method method = self::A|method;
   tearoff method = self::A|get#method;
   get getter = self::A|get#getter;
@@ -174,7 +164,7 @@
   operator [] = self::A|[];
   set setter = self::A|set#setter;
 }
-extension B on self::C* {
+extension B on self::C {
   method method = self::B|method;
   tearoff method = self::B|get#method;
   get getter = self::B|get#getter;
@@ -184,33 +174,33 @@
   set setter = self::B|set#setter;
   set property = self::B|set#property;
 }
-static method A|method(lowered final self::C* #this) → void {}
-static method A|get#method(lowered 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(lowered 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(lowered final self::C* #this, core::int* value) → void {}
-static method A|get#property(lowered 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|+(lowered 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-(lowered final self::C* #this) → core::int*
+static method A|unary-(lowered final self::C #this) → core::int
   return 0;
-static method A|[](lowered 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(lowered final self::C* #this) → void {}
-static method B|get#method(lowered 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(lowered 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(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*
+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-(lowered final self::C* #this) → core::int*
+static method B|unary-(lowered final self::C #this) → core::int
   return 0;
-static method B|[]=(lowered final self::C* #this, core::int* i, core::int* j) → void {}
-static method errors(self::C* c) → dynamic {
+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'.
 Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
diff --git a/pkg/front_end/testcases/extensions/ambiguous.dart.weak.outline.expect b/pkg/front_end/testcases/extensions/ambiguous.dart.weak.outline.expect
index 8ac03b2..a4095ab 100644
--- a/pkg/front_end/testcases/extensions/ambiguous.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extensions/ambiguous.dart.weak.outline.expect
@@ -1,22 +1,12 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension A on self::C* {
+extension A on self::C {
   method method = self::A|method;
   tearoff method = self::A|get#method;
   get getter = self::A|get#getter;
@@ -26,7 +16,7 @@
   operator [] = self::A|[];
   set setter = self::A|set#setter;
 }
-extension B on self::C* {
+extension B on self::C {
   method method = self::B|method;
   tearoff method = self::B|get#method;
   get getter = self::B|get#getter;
@@ -36,39 +26,39 @@
   set setter = self::B|set#setter;
   set property = self::B|set#property;
 }
-static method A|method(lowered 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
+static method A|get#method(lowered final self::C #this) → () → void
   return () → void => self::A|method(#this);
-static method A|get#getter(lowered final self::C* #this) → core::int*
+static method A|get#getter(lowered final self::C #this) → core::int
   ;
-static method A|set#setter(lowered 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(lowered final self::C* #this) → core::int*
+static method A|get#property(lowered final self::C #this) → core::int
   ;
-static method A|+(lowered 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-(lowered final self::C* #this) → core::int*
+static method A|unary-(lowered final self::C #this) → core::int
   ;
-static method A|[](lowered 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(lowered 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
+static method B|get#method(lowered final self::C #this) → () → void
   return () → void => self::B|method(#this);
-static method B|get#getter(lowered final self::C* #this) → core::int*
+static method B|get#getter(lowered final self::C #this) → core::int
   ;
-static method B|set#setter(lowered 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(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*
+static method B|+(lowered final self::C #this, core::int i) → core::int
   ;
-static method B|unary-(lowered final self::C* #this) → core::int*
+static method B|unary-(lowered final self::C #this) → core::int
   ;
-static method B|[]=(lowered 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
+static method errors(self::C c) → dynamic
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/extensions/ambiguous.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/ambiguous.dart.weak.transformed.expect
index 1dca435..3e35b2e 100644
--- a/pkg/front_end/testcases/extensions/ambiguous.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/ambiguous.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -150,21 +150,11 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension A on self::C* {
+extension A on self::C {
   method method = self::A|method;
   tearoff method = self::A|get#method;
   get getter = self::A|get#getter;
@@ -174,7 +164,7 @@
   operator [] = self::A|[];
   set setter = self::A|set#setter;
 }
-extension B on self::C* {
+extension B on self::C {
   method method = self::B|method;
   tearoff method = self::B|get#method;
   get getter = self::B|get#getter;
@@ -184,33 +174,33 @@
   set setter = self::B|set#setter;
   set property = self::B|set#property;
 }
-static method A|method(lowered final self::C* #this) → void {}
-static method A|get#method(lowered 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(lowered 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(lowered final self::C* #this, core::int* value) → void {}
-static method A|get#property(lowered 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|+(lowered 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-(lowered final self::C* #this) → core::int*
+static method A|unary-(lowered final self::C #this) → core::int
   return 0;
-static method A|[](lowered 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(lowered final self::C* #this) → void {}
-static method B|get#method(lowered 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(lowered 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(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*
+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-(lowered final self::C* #this) → core::int*
+static method B|unary-(lowered final self::C #this) → core::int
   return 0;
-static method B|[]=(lowered final self::C* #this, core::int* i, core::int* j) → void {}
-static method errors(self::C* c) → dynamic {
+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'.
 Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
diff --git a/pkg/front_end/testcases/extensions/annotations.dart b/pkg/front_end/testcases/extensions/annotations.dart
index 5144d09..0e0b623 100644
--- a/pkg/front_end/testcases/extensions/annotations.dart
+++ b/pkg/front_end/testcases/extensions/annotations.dart
@@ -2,8 +2,6 @@
 // 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.
 
-// @dart=2.9
-
 class Class {
   @pragma('dart2js:noInline')
   instanceMethod() {}
diff --git a/pkg/front_end/testcases/extensions/annotations.dart.textual_outline.expect b/pkg/front_end/testcases/extensions/annotations.dart.textual_outline.expect
index a48748b..29e0b7f 100644
--- a/pkg/front_end/testcases/extensions/annotations.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/extensions/annotations.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Class {
   @pragma('dart2js:noInline')
   instanceMethod() {}
diff --git a/pkg/front_end/testcases/extensions/annotations.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/extensions/annotations.dart.textual_outline_modelled.expect
index 3c38648..ad11530 100644
--- a/pkg/front_end/testcases/extensions/annotations.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/extensions/annotations.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Class {
   @pragma('dart2js:noInline')
   instanceMethod() {}
diff --git a/pkg/front_end/testcases/extensions/annotations.dart.weak.expect b/pkg/front_end/testcases/extensions/annotations.dart.weak.expect
index 61a26a4..665bd67 100644
--- a/pkg/front_end/testcases/extensions/annotations.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/annotations.dart.weak.expect
@@ -1,34 +1,24 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Class extends core::Object {
-  synthetic constructor •() → self::Class*
+  synthetic constructor •() → self::Class
     : super core::Object::•()
     ;
   @#C3
   method instanceMethod() → dynamic {}
   @#C3
   static method staticMethod() → dynamic {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension Extension on self::Class* {
+extension Extension on self::Class {
   method extensionInstanceMethod = self::Extension|extensionInstanceMethod;
   tearoff extensionInstanceMethod = self::Extension|get#extensionInstanceMethod;
   static method extensionStaticMethod = self::Extension|extensionStaticMethod;
 }
 @#C3
-static method Extension|extensionInstanceMethod(lowered final self::Class* #this) → dynamic {}
-static method Extension|get#extensionInstanceMethod(lowered 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.weak.modular.expect b/pkg/front_end/testcases/extensions/annotations.dart.weak.modular.expect
index 61a26a4..665bd67 100644
--- a/pkg/front_end/testcases/extensions/annotations.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/extensions/annotations.dart.weak.modular.expect
@@ -1,34 +1,24 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Class extends core::Object {
-  synthetic constructor •() → self::Class*
+  synthetic constructor •() → self::Class
     : super core::Object::•()
     ;
   @#C3
   method instanceMethod() → dynamic {}
   @#C3
   static method staticMethod() → dynamic {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension Extension on self::Class* {
+extension Extension on self::Class {
   method extensionInstanceMethod = self::Extension|extensionInstanceMethod;
   tearoff extensionInstanceMethod = self::Extension|get#extensionInstanceMethod;
   static method extensionStaticMethod = self::Extension|extensionStaticMethod;
 }
 @#C3
-static method Extension|extensionInstanceMethod(lowered final self::Class* #this) → dynamic {}
-static method Extension|get#extensionInstanceMethod(lowered 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.weak.outline.expect b/pkg/front_end/testcases/extensions/annotations.dart.weak.outline.expect
index 1ab642c..5f35a3a 100644
--- a/pkg/front_end/testcases/extensions/annotations.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extensions/annotations.dart.weak.outline.expect
@@ -1,9 +1,9 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Class extends core::Object {
-  synthetic constructor •() → self::Class*
+  synthetic constructor •() → self::Class
     ;
   @core::pragma::_("dart2js:noInline")
   method instanceMethod() → dynamic
@@ -11,26 +11,16 @@
   @core::pragma::_("dart2js:noInline")
   static method staticMethod() → dynamic
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension Extension on self::Class* {
+extension Extension on self::Class {
   method extensionInstanceMethod = self::Extension|extensionInstanceMethod;
   tearoff extensionInstanceMethod = self::Extension|get#extensionInstanceMethod;
   static method extensionStaticMethod = self::Extension|extensionStaticMethod;
 }
 @core::pragma::_("dart2js:noInline")
-static method Extension|extensionInstanceMethod(lowered 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
+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
@@ -43,9 +33,9 @@
 
 
 Extra constant evaluation status:
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///annotations.dart:8:4 -> InstanceConstant(const pragma{pragma.name: "dart2js:noInline", pragma.options: null})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///annotations.dart:11:4 -> InstanceConstant(const pragma{pragma.name: "dart2js:noInline", pragma.options: null})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///annotations.dart:16:4 -> InstanceConstant(const pragma{pragma.name: "dart2js:noInline", pragma.options: null})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///annotations.dart:19:4 -> InstanceConstant(const pragma{pragma.name: "dart2js:noInline", pragma.options: null})
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///annotations.dart:23:2 -> InstanceConstant(const pragma{pragma.name: "dart2js:noInline", pragma.options: null})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///annotations.dart:6:4 -> InstanceConstant(const pragma{pragma.name: "dart2js:noInline", pragma.options: null})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///annotations.dart:9:4 -> InstanceConstant(const pragma{pragma.name: "dart2js:noInline", pragma.options: null})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///annotations.dart:14:4 -> InstanceConstant(const pragma{pragma.name: "dart2js:noInline", pragma.options: null})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///annotations.dart:17:4 -> InstanceConstant(const pragma{pragma.name: "dart2js:noInline", pragma.options: null})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///annotations.dart:21:2 -> InstanceConstant(const pragma{pragma.name: "dart2js:noInline", pragma.options: null})
 Extra constant evaluation: evaluated: 8, effectively constant: 5
diff --git a/pkg/front_end/testcases/extensions/annotations.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/annotations.dart.weak.transformed.expect
index 61a26a4..665bd67 100644
--- a/pkg/front_end/testcases/extensions/annotations.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/annotations.dart.weak.transformed.expect
@@ -1,34 +1,24 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Class extends core::Object {
-  synthetic constructor •() → self::Class*
+  synthetic constructor •() → self::Class
     : super core::Object::•()
     ;
   @#C3
   method instanceMethod() → dynamic {}
   @#C3
   static method staticMethod() → dynamic {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension Extension on self::Class* {
+extension Extension on self::Class {
   method extensionInstanceMethod = self::Extension|extensionInstanceMethod;
   tearoff extensionInstanceMethod = self::Extension|get#extensionInstanceMethod;
   static method extensionStaticMethod = self::Extension|extensionStaticMethod;
 }
 @#C3
-static method Extension|extensionInstanceMethod(lowered final self::Class* #this) → dynamic {}
-static method Extension|get#extensionInstanceMethod(lowered 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 b/pkg/front_end/testcases/extensions/async_extensions.dart
index 5c884cb..a958690 100644
--- a/pkg/front_end/testcases/extensions/async_extensions.dart
+++ b/pkg/front_end/testcases/extensions/async_extensions.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 extension Extension on int {
   syncStarMethod() sync* {}
   asyncMethod() async {}
diff --git a/pkg/front_end/testcases/extensions/async_extensions.dart.textual_outline.expect b/pkg/front_end/testcases/extensions/async_extensions.dart.textual_outline.expect
index 34b69e8..101e634 100644
--- a/pkg/front_end/testcases/extensions/async_extensions.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/extensions/async_extensions.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 extension Extension on int {
   syncStarMethod() sync* {}
   asyncMethod() async {}
diff --git a/pkg/front_end/testcases/extensions/async_extensions.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/extensions/async_extensions.dart.textual_outline_modelled.expect
index a4561c1..52c36dd 100644
--- a/pkg/front_end/testcases/extensions/async_extensions.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/extensions/async_extensions.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 extension Extension on int {
   asyncMethod() async {}
   asyncStarMethod() async* {}
diff --git a/pkg/front_end/testcases/extensions/async_extensions.dart.weak.expect b/pkg/front_end/testcases/extensions/async_extensions.dart.weak.expect
index 1cd81f5..bf6bac9 100644
--- a/pkg/front_end/testcases/extensions/async_extensions.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/async_extensions.dart.weak.expect
@@ -1,8 +1,8 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-extension Extension on core::int* {
+extension Extension on core::int {
   method syncStarMethod = self::Extension|syncStarMethod;
   tearoff syncStarMethod = self::Extension|get#syncStarMethod;
   method asyncMethod = self::Extension|asyncMethod;
@@ -10,14 +10,14 @@
   method asyncStarMethod = self::Extension|asyncStarMethod;
   tearoff asyncStarMethod = self::Extension|get#asyncStarMethod;
 }
-static method Extension|syncStarMethod(lowered final core::int* #this) → dynamic sync* {}
-static method Extension|get#syncStarMethod(lowered 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(lowered final core::int* #this) → dynamic async /* futureValueType= dynamic */ {}
-static method Extension|get#asyncMethod(lowered final core::int* #this) → () →* dynamic
+static method Extension|asyncMethod(lowered final core::int #this) → dynamic async /* futureValueType= dynamic */ {}
+static method Extension|get#asyncMethod(lowered final core::int #this) → () → dynamic
   return () → dynamic => self::Extension|asyncMethod(#this);
-static method Extension|asyncStarMethod(lowered final core::int* #this) → dynamic async* {}
-static method Extension|get#asyncStarMethod(lowered 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.weak.modular.expect b/pkg/front_end/testcases/extensions/async_extensions.dart.weak.modular.expect
index 1cd81f5..bf6bac9 100644
--- a/pkg/front_end/testcases/extensions/async_extensions.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/extensions/async_extensions.dart.weak.modular.expect
@@ -1,8 +1,8 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-extension Extension on core::int* {
+extension Extension on core::int {
   method syncStarMethod = self::Extension|syncStarMethod;
   tearoff syncStarMethod = self::Extension|get#syncStarMethod;
   method asyncMethod = self::Extension|asyncMethod;
@@ -10,14 +10,14 @@
   method asyncStarMethod = self::Extension|asyncStarMethod;
   tearoff asyncStarMethod = self::Extension|get#asyncStarMethod;
 }
-static method Extension|syncStarMethod(lowered final core::int* #this) → dynamic sync* {}
-static method Extension|get#syncStarMethod(lowered 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(lowered final core::int* #this) → dynamic async /* futureValueType= dynamic */ {}
-static method Extension|get#asyncMethod(lowered final core::int* #this) → () →* dynamic
+static method Extension|asyncMethod(lowered final core::int #this) → dynamic async /* futureValueType= dynamic */ {}
+static method Extension|get#asyncMethod(lowered final core::int #this) → () → dynamic
   return () → dynamic => self::Extension|asyncMethod(#this);
-static method Extension|asyncStarMethod(lowered final core::int* #this) → dynamic async* {}
-static method Extension|get#asyncStarMethod(lowered 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.weak.outline.expect b/pkg/front_end/testcases/extensions/async_extensions.dart.weak.outline.expect
index cc28afd..5a806b1 100644
--- a/pkg/front_end/testcases/extensions/async_extensions.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extensions/async_extensions.dart.weak.outline.expect
@@ -1,8 +1,8 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-extension Extension on core::int* {
+extension Extension on core::int {
   method syncStarMethod = self::Extension|syncStarMethod;
   tearoff syncStarMethod = self::Extension|get#syncStarMethod;
   method asyncMethod = self::Extension|asyncMethod;
@@ -10,17 +10,17 @@
   method asyncStarMethod = self::Extension|asyncStarMethod;
   tearoff asyncStarMethod = self::Extension|get#asyncStarMethod;
 }
-static method Extension|syncStarMethod(lowered final core::int* #this) → dynamic sync* 
+static method Extension|syncStarMethod(lowered final core::int #this) → dynamic sync* 
   ;
-static method Extension|get#syncStarMethod(lowered 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(lowered final core::int* #this) → dynamic async 
+static method Extension|asyncMethod(lowered final core::int #this) → dynamic async 
   ;
-static method Extension|get#asyncMethod(lowered 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(lowered final core::int* #this) → dynamic async* 
+static method Extension|asyncStarMethod(lowered final core::int #this) → dynamic async* 
   ;
-static method Extension|get#asyncStarMethod(lowered 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.weak.transformed.expect b/pkg/front_end/testcases/extensions/async_extensions.dart.weak.transformed.expect
index c9d8f91..66e1488 100644
--- a/pkg/front_end/testcases/extensions/async_extensions.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/async_extensions.dart.weak.transformed.expect
@@ -1,9 +1,9 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
 
-extension Extension on core::int* {
+extension Extension on core::int {
   method syncStarMethod = self::Extension|syncStarMethod;
   tearoff syncStarMethod = self::Extension|get#syncStarMethod;
   method asyncMethod = self::Extension|asyncMethod;
@@ -11,11 +11,11 @@
   method asyncStarMethod = self::Extension|asyncStarMethod;
   tearoff asyncStarMethod = self::Extension|get#asyncStarMethod;
 }
-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;
+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;
-    function :sync_op(core::_SyncIterator<dynamic>* :iterator, dynamic :exception, dynamic :stack_trace) → core::bool* yielding {
+    function :sync_op(core::_SyncIterator<dynamic>? :iterator, dynamic :exception, dynamic :stack_trace) → core::bool* yielding {
       {}
       return false;
     }
@@ -23,15 +23,15 @@
   }
   return new core::_SyncIterable::•<dynamic>(:sync_op_gen);
 }
-static method Extension|get#syncStarMethod(lowered 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(lowered final core::int* #this) → dynamic /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
+static method Extension|asyncMethod(lowered final core::int #this) → dynamic /* futureValueType= dynamic */ /* originally async */ {
+  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
+  (dynamic) → dynamic :async_op_then;
+  (core::Object, core::StackTrace) → dynamic :async_op_error;
+  core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
   function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try {
@@ -40,23 +40,23 @@
       asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
-    on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
+    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
       asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() →* dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
-static method Extension|get#asyncMethod(lowered 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(lowered final core::int* #this) → dynamic /* originally async* */ {
-  asy::_AsyncStarStreamController<dynamic>* :controller;
+static method Extension|asyncStarMethod(lowered final core::int #this) → dynamic /* originally async* */ {
+  asy::_AsyncStarStreamController<dynamic>? :controller;
   dynamic :controller_stream;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
+  (dynamic) → dynamic :async_op_then;
+  (core::Object, core::StackTrace) → dynamic :async_op_error;
+  core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
   function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
     try
@@ -65,7 +65,7 @@
         {}
         return;
       }
-      on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
+      on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
         :controller.{asy::_AsyncStarStreamController::addError}(exception, stack_trace){(core::Object, core::StackTrace) → void};
       }
     finally {
@@ -77,7 +77,7 @@
   :controller_stream = :controller.{asy::_AsyncStarStreamController::stream}{asy::Stream<dynamic>};
   return :controller_stream;
 }
-static method Extension|get#asyncStarMethod(lowered 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 b/pkg/front_end/testcases/extensions/bounds.dart
index 104117b..ee4308a 100644
--- a/pkg/front_end/testcases/extensions/bounds.dart
+++ b/pkg/front_end/testcases/extensions/bounds.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 extension Extension1<T extends Object> on T {
   method1<S extends Object>() {}
   method2<S extends String>() {}
diff --git a/pkg/front_end/testcases/extensions/bounds.dart.textual_outline.expect b/pkg/front_end/testcases/extensions/bounds.dart.textual_outline.expect
index e32a7f7..fe4b2b0 100644
--- a/pkg/front_end/testcases/extensions/bounds.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/extensions/bounds.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 extension Extension1<T extends Object> on T {
   method1<S extends Object>() {}
   method2<S extends String>() {}
diff --git a/pkg/front_end/testcases/extensions/bounds.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/extensions/bounds.dart.textual_outline_modelled.expect
index e32a7f7..fe4b2b0 100644
--- a/pkg/front_end/testcases/extensions/bounds.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/extensions/bounds.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 extension Extension1<T extends Object> on T {
   method1<S extends Object>() {}
   method2<S extends String>() {}
diff --git a/pkg/front_end/testcases/extensions/bounds.dart.weak.expect b/pkg/front_end/testcases/extensions/bounds.dart.weak.expect
index 8c13b5c..bcf36b9 100644
--- a/pkg/front_end/testcases/extensions/bounds.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/bounds.dart.weak.expect
@@ -1,8 +1,8 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-extension Extension1<T extends core::Object*> on T* {
+extension Extension1<T extends core::Object> on T {
   method method1 = self::Extension1|method1;
   tearoff method1 = self::Extension1|get#method1;
   method method2 = self::Extension1|method2;
@@ -12,7 +12,7 @@
   method method4 = self::Extension1|method4;
   tearoff method4 = self::Extension1|get#method4;
 }
-extension Extension2<T extends core::String*> on T* {
+extension Extension2<T extends core::String> on T {
   method method1 = self::Extension2|method1;
   tearoff method1 = self::Extension2|get#method1;
   method method2 = self::Extension2|method2;
@@ -22,7 +22,7 @@
   method method4 = self::Extension2|method4;
   tearoff method4 = self::Extension2|get#method4;
 }
-extension Extension3<T extends dynamic> on T* {
+extension Extension3<T extends dynamic> on T% {
   method method1 = self::Extension3|method1;
   tearoff method1 = self::Extension3|get#method1;
   method method2 = self::Extension3|method2;
@@ -32,7 +32,7 @@
   method method4 = self::Extension3|method4;
   tearoff method4 = self::Extension3|get#method4;
 }
-extension Extension4<T extends core::Object* = dynamic> on T* {
+extension Extension4<T extends core::Object? = dynamic> on T% {
   method method1 = self::Extension4|method1;
   tearoff method1 = self::Extension4|get#method1;
   method method2 = self::Extension4|method2;
@@ -42,52 +42,52 @@
   method method4 = self::Extension4|method4;
   tearoff method4 = self::Extension4|get#method4;
 }
-static method Extension1|method1<T extends core::Object*, S extends core::Object*>(lowered final self::Extension1|method1::T* #this) → dynamic {}
-static method Extension1|get#method1<T extends core::Object*>(lowered final self::Extension1|get#method1::T* #this) → <S extends core::Object*>() →* dynamic
-  return <S extends core::Object*>() → dynamic => self::Extension1|method1<self::Extension1|get#method1::T*, S*>(#this);
-static method Extension1|method2<T extends core::Object*, S extends core::String*>(lowered final self::Extension1|method2::T* #this) → dynamic {}
-static method Extension1|get#method2<T extends core::Object*>(lowered final self::Extension1|get#method2::T* #this) → <S extends core::String*>() →* dynamic
-  return <S extends core::String*>() → dynamic => self::Extension1|method2<self::Extension1|get#method2::T*, S*>(#this);
-static method Extension1|method3<T extends core::Object*, S extends dynamic>(lowered final self::Extension1|method3::T* #this) → dynamic {}
-static method Extension1|get#method3<T extends core::Object*>(lowered final self::Extension1|get#method3::T* #this) → <S extends dynamic>() →* dynamic
-  return <S extends dynamic>() → dynamic => self::Extension1|method3<self::Extension1|get#method3::T*, S%>(#this);
-static method Extension1|method4<T extends core::Object*, S extends core::Object* = dynamic>(lowered final self::Extension1|method4::T* #this) → dynamic {}
-static method Extension1|get#method4<T extends 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*, S extends core::Object*>(lowered final self::Extension2|method1::T* #this) → dynamic {}
-static method Extension2|get#method1<T extends core::String*>(lowered final self::Extension2|get#method1::T* #this) → <S extends core::Object*>() →* dynamic
-  return <S extends core::Object*>() → dynamic => self::Extension2|method1<self::Extension2|get#method1::T*, S*>(#this);
-static method Extension2|method2<T extends core::String*, S extends core::String*>(lowered final self::Extension2|method2::T* #this) → dynamic {}
-static method Extension2|get#method2<T extends core::String*>(lowered final self::Extension2|get#method2::T* #this) → <S extends core::String*>() →* dynamic
-  return <S extends core::String*>() → dynamic => self::Extension2|method2<self::Extension2|get#method2::T*, S*>(#this);
-static method Extension2|method3<T extends core::String*, S extends dynamic>(lowered final self::Extension2|method3::T* #this) → dynamic {}
-static method Extension2|get#method3<T extends core::String*>(lowered final self::Extension2|get#method3::T* #this) → <S extends dynamic>() →* dynamic
-  return <S extends dynamic>() → dynamic => self::Extension2|method3<self::Extension2|get#method3::T*, S%>(#this);
-static method Extension2|method4<T extends core::String*, S extends core::Object* = dynamic>(lowered final self::Extension2|method4::T* #this) → dynamic {}
-static method Extension2|get#method4<T extends 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, S extends core::Object*>(lowered final self::Extension3|method1::T* #this) → dynamic {}
-static method Extension3|get#method1<T extends dynamic>(lowered final self::Extension3|get#method1::T* #this) → <S extends core::Object*>() →* dynamic
-  return <S extends core::Object*>() → dynamic => self::Extension3|method1<self::Extension3|get#method1::T%, S*>(#this);
-static method Extension3|method2<T extends dynamic, S extends core::String*>(lowered final self::Extension3|method2::T* #this) → dynamic {}
-static method Extension3|get#method2<T extends dynamic>(lowered final self::Extension3|get#method2::T* #this) → <S extends core::String*>() →* dynamic
-  return <S extends core::String*>() → dynamic => self::Extension3|method2<self::Extension3|get#method2::T%, S*>(#this);
-static method Extension3|method3<T extends dynamic, S extends dynamic>(lowered final self::Extension3|method3::T* #this) → dynamic {}
-static method Extension3|get#method3<T extends dynamic>(lowered final self::Extension3|get#method3::T* #this) → <S extends dynamic>() →* dynamic
+static method Extension1|method1<T extends core::Object, S extends core::Object>(lowered final self::Extension1|method1::T #this) → dynamic {}
+static method Extension1|get#method1<T extends core::Object>(lowered final self::Extension1|get#method1::T #this) → <S extends core::Object>() → dynamic
+  return <S extends core::Object>() → dynamic => self::Extension1|method1<self::Extension1|get#method1::T, S>(#this);
+static method Extension1|method2<T extends core::Object, S extends core::String>(lowered final self::Extension1|method2::T #this) → dynamic {}
+static method Extension1|get#method2<T extends core::Object>(lowered final self::Extension1|get#method2::T #this) → <S extends core::String>() → dynamic
+  return <S extends core::String>() → dynamic => self::Extension1|method2<self::Extension1|get#method2::T, S>(#this);
+static method Extension1|method3<T extends core::Object, S extends dynamic>(lowered final self::Extension1|method3::T #this) → dynamic {}
+static method Extension1|get#method3<T extends core::Object>(lowered final self::Extension1|get#method3::T #this) → <S extends dynamic>() → dynamic
+  return <S extends dynamic>() → dynamic => self::Extension1|method3<self::Extension1|get#method3::T, S%>(#this);
+static method Extension1|method4<T extends core::Object, S extends core::Object? = dynamic>(lowered final self::Extension1|method4::T #this) → dynamic {}
+static method Extension1|get#method4<T extends 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, S extends core::Object>(lowered final self::Extension2|method1::T #this) → dynamic {}
+static method Extension2|get#method1<T extends core::String>(lowered final self::Extension2|get#method1::T #this) → <S extends core::Object>() → dynamic
+  return <S extends core::Object>() → dynamic => self::Extension2|method1<self::Extension2|get#method1::T, S>(#this);
+static method Extension2|method2<T extends core::String, S extends core::String>(lowered final self::Extension2|method2::T #this) → dynamic {}
+static method Extension2|get#method2<T extends core::String>(lowered final self::Extension2|get#method2::T #this) → <S extends core::String>() → dynamic
+  return <S extends core::String>() → dynamic => self::Extension2|method2<self::Extension2|get#method2::T, S>(#this);
+static method Extension2|method3<T extends core::String, S extends dynamic>(lowered final self::Extension2|method3::T #this) → dynamic {}
+static method Extension2|get#method3<T extends core::String>(lowered final self::Extension2|get#method3::T #this) → <S extends dynamic>() → dynamic
+  return <S extends dynamic>() → dynamic => self::Extension2|method3<self::Extension2|get#method3::T, S%>(#this);
+static method Extension2|method4<T extends core::String, S extends core::Object? = dynamic>(lowered final self::Extension2|method4::T #this) → dynamic {}
+static method Extension2|get#method4<T extends 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, S extends core::Object>(lowered final self::Extension3|method1::T% #this) → dynamic {}
+static method Extension3|get#method1<T extends dynamic>(lowered final self::Extension3|get#method1::T% #this) → <S extends core::Object>() → dynamic
+  return <S extends core::Object>() → dynamic => self::Extension3|method1<self::Extension3|get#method1::T%, S>(#this);
+static method Extension3|method2<T extends dynamic, S extends core::String>(lowered final self::Extension3|method2::T% #this) → dynamic {}
+static method Extension3|get#method2<T extends dynamic>(lowered final self::Extension3|get#method2::T% #this) → <S extends core::String>() → dynamic
+  return <S extends core::String>() → dynamic => self::Extension3|method2<self::Extension3|get#method2::T%, S>(#this);
+static method Extension3|method3<T extends dynamic, S extends dynamic>(lowered final self::Extension3|method3::T% #this) → dynamic {}
+static method Extension3|get#method3<T extends dynamic>(lowered final self::Extension3|get#method3::T% #this) → <S extends dynamic>() → dynamic
   return <S extends dynamic>() → dynamic => self::Extension3|method3<self::Extension3|get#method3::T%, S%>(#this);
-static method Extension3|method4<T extends dynamic, S extends core::Object* = dynamic>(lowered final self::Extension3|method4::T* #this) → dynamic {}
-static method Extension3|get#method4<T extends 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*>(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*>() →* dynamic
-  return <S extends 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*>(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*>() →* dynamic
-  return <S extends 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>(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
-  return <S extends 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>(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 Extension3|method4<T extends dynamic, S extends core::Object? = dynamic>(lowered final self::Extension3|method4::T% #this) → dynamic {}
+static method Extension3|get#method4<T extends 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>(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>() → dynamic
+  return <S extends 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>(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>() → dynamic
+  return <S extends 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>(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
+  return <S extends 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>(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.weak.modular.expect b/pkg/front_end/testcases/extensions/bounds.dart.weak.modular.expect
index 8c13b5c..bcf36b9 100644
--- a/pkg/front_end/testcases/extensions/bounds.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/extensions/bounds.dart.weak.modular.expect
@@ -1,8 +1,8 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-extension Extension1<T extends core::Object*> on T* {
+extension Extension1<T extends core::Object> on T {
   method method1 = self::Extension1|method1;
   tearoff method1 = self::Extension1|get#method1;
   method method2 = self::Extension1|method2;
@@ -12,7 +12,7 @@
   method method4 = self::Extension1|method4;
   tearoff method4 = self::Extension1|get#method4;
 }
-extension Extension2<T extends core::String*> on T* {
+extension Extension2<T extends core::String> on T {
   method method1 = self::Extension2|method1;
   tearoff method1 = self::Extension2|get#method1;
   method method2 = self::Extension2|method2;
@@ -22,7 +22,7 @@
   method method4 = self::Extension2|method4;
   tearoff method4 = self::Extension2|get#method4;
 }
-extension Extension3<T extends dynamic> on T* {
+extension Extension3<T extends dynamic> on T% {
   method method1 = self::Extension3|method1;
   tearoff method1 = self::Extension3|get#method1;
   method method2 = self::Extension3|method2;
@@ -32,7 +32,7 @@
   method method4 = self::Extension3|method4;
   tearoff method4 = self::Extension3|get#method4;
 }
-extension Extension4<T extends core::Object* = dynamic> on T* {
+extension Extension4<T extends core::Object? = dynamic> on T% {
   method method1 = self::Extension4|method1;
   tearoff method1 = self::Extension4|get#method1;
   method method2 = self::Extension4|method2;
@@ -42,52 +42,52 @@
   method method4 = self::Extension4|method4;
   tearoff method4 = self::Extension4|get#method4;
 }
-static method Extension1|method1<T extends core::Object*, S extends core::Object*>(lowered final self::Extension1|method1::T* #this) → dynamic {}
-static method Extension1|get#method1<T extends core::Object*>(lowered final self::Extension1|get#method1::T* #this) → <S extends core::Object*>() →* dynamic
-  return <S extends core::Object*>() → dynamic => self::Extension1|method1<self::Extension1|get#method1::T*, S*>(#this);
-static method Extension1|method2<T extends core::Object*, S extends core::String*>(lowered final self::Extension1|method2::T* #this) → dynamic {}
-static method Extension1|get#method2<T extends core::Object*>(lowered final self::Extension1|get#method2::T* #this) → <S extends core::String*>() →* dynamic
-  return <S extends core::String*>() → dynamic => self::Extension1|method2<self::Extension1|get#method2::T*, S*>(#this);
-static method Extension1|method3<T extends core::Object*, S extends dynamic>(lowered final self::Extension1|method3::T* #this) → dynamic {}
-static method Extension1|get#method3<T extends core::Object*>(lowered final self::Extension1|get#method3::T* #this) → <S extends dynamic>() →* dynamic
-  return <S extends dynamic>() → dynamic => self::Extension1|method3<self::Extension1|get#method3::T*, S%>(#this);
-static method Extension1|method4<T extends core::Object*, S extends core::Object* = dynamic>(lowered final self::Extension1|method4::T* #this) → dynamic {}
-static method Extension1|get#method4<T extends 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*, S extends core::Object*>(lowered final self::Extension2|method1::T* #this) → dynamic {}
-static method Extension2|get#method1<T extends core::String*>(lowered final self::Extension2|get#method1::T* #this) → <S extends core::Object*>() →* dynamic
-  return <S extends core::Object*>() → dynamic => self::Extension2|method1<self::Extension2|get#method1::T*, S*>(#this);
-static method Extension2|method2<T extends core::String*, S extends core::String*>(lowered final self::Extension2|method2::T* #this) → dynamic {}
-static method Extension2|get#method2<T extends core::String*>(lowered final self::Extension2|get#method2::T* #this) → <S extends core::String*>() →* dynamic
-  return <S extends core::String*>() → dynamic => self::Extension2|method2<self::Extension2|get#method2::T*, S*>(#this);
-static method Extension2|method3<T extends core::String*, S extends dynamic>(lowered final self::Extension2|method3::T* #this) → dynamic {}
-static method Extension2|get#method3<T extends core::String*>(lowered final self::Extension2|get#method3::T* #this) → <S extends dynamic>() →* dynamic
-  return <S extends dynamic>() → dynamic => self::Extension2|method3<self::Extension2|get#method3::T*, S%>(#this);
-static method Extension2|method4<T extends core::String*, S extends core::Object* = dynamic>(lowered final self::Extension2|method4::T* #this) → dynamic {}
-static method Extension2|get#method4<T extends 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, S extends core::Object*>(lowered final self::Extension3|method1::T* #this) → dynamic {}
-static method Extension3|get#method1<T extends dynamic>(lowered final self::Extension3|get#method1::T* #this) → <S extends core::Object*>() →* dynamic
-  return <S extends core::Object*>() → dynamic => self::Extension3|method1<self::Extension3|get#method1::T%, S*>(#this);
-static method Extension3|method2<T extends dynamic, S extends core::String*>(lowered final self::Extension3|method2::T* #this) → dynamic {}
-static method Extension3|get#method2<T extends dynamic>(lowered final self::Extension3|get#method2::T* #this) → <S extends core::String*>() →* dynamic
-  return <S extends core::String*>() → dynamic => self::Extension3|method2<self::Extension3|get#method2::T%, S*>(#this);
-static method Extension3|method3<T extends dynamic, S extends dynamic>(lowered final self::Extension3|method3::T* #this) → dynamic {}
-static method Extension3|get#method3<T extends dynamic>(lowered final self::Extension3|get#method3::T* #this) → <S extends dynamic>() →* dynamic
+static method Extension1|method1<T extends core::Object, S extends core::Object>(lowered final self::Extension1|method1::T #this) → dynamic {}
+static method Extension1|get#method1<T extends core::Object>(lowered final self::Extension1|get#method1::T #this) → <S extends core::Object>() → dynamic
+  return <S extends core::Object>() → dynamic => self::Extension1|method1<self::Extension1|get#method1::T, S>(#this);
+static method Extension1|method2<T extends core::Object, S extends core::String>(lowered final self::Extension1|method2::T #this) → dynamic {}
+static method Extension1|get#method2<T extends core::Object>(lowered final self::Extension1|get#method2::T #this) → <S extends core::String>() → dynamic
+  return <S extends core::String>() → dynamic => self::Extension1|method2<self::Extension1|get#method2::T, S>(#this);
+static method Extension1|method3<T extends core::Object, S extends dynamic>(lowered final self::Extension1|method3::T #this) → dynamic {}
+static method Extension1|get#method3<T extends core::Object>(lowered final self::Extension1|get#method3::T #this) → <S extends dynamic>() → dynamic
+  return <S extends dynamic>() → dynamic => self::Extension1|method3<self::Extension1|get#method3::T, S%>(#this);
+static method Extension1|method4<T extends core::Object, S extends core::Object? = dynamic>(lowered final self::Extension1|method4::T #this) → dynamic {}
+static method Extension1|get#method4<T extends 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, S extends core::Object>(lowered final self::Extension2|method1::T #this) → dynamic {}
+static method Extension2|get#method1<T extends core::String>(lowered final self::Extension2|get#method1::T #this) → <S extends core::Object>() → dynamic
+  return <S extends core::Object>() → dynamic => self::Extension2|method1<self::Extension2|get#method1::T, S>(#this);
+static method Extension2|method2<T extends core::String, S extends core::String>(lowered final self::Extension2|method2::T #this) → dynamic {}
+static method Extension2|get#method2<T extends core::String>(lowered final self::Extension2|get#method2::T #this) → <S extends core::String>() → dynamic
+  return <S extends core::String>() → dynamic => self::Extension2|method2<self::Extension2|get#method2::T, S>(#this);
+static method Extension2|method3<T extends core::String, S extends dynamic>(lowered final self::Extension2|method3::T #this) → dynamic {}
+static method Extension2|get#method3<T extends core::String>(lowered final self::Extension2|get#method3::T #this) → <S extends dynamic>() → dynamic
+  return <S extends dynamic>() → dynamic => self::Extension2|method3<self::Extension2|get#method3::T, S%>(#this);
+static method Extension2|method4<T extends core::String, S extends core::Object? = dynamic>(lowered final self::Extension2|method4::T #this) → dynamic {}
+static method Extension2|get#method4<T extends 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, S extends core::Object>(lowered final self::Extension3|method1::T% #this) → dynamic {}
+static method Extension3|get#method1<T extends dynamic>(lowered final self::Extension3|get#method1::T% #this) → <S extends core::Object>() → dynamic
+  return <S extends core::Object>() → dynamic => self::Extension3|method1<self::Extension3|get#method1::T%, S>(#this);
+static method Extension3|method2<T extends dynamic, S extends core::String>(lowered final self::Extension3|method2::T% #this) → dynamic {}
+static method Extension3|get#method2<T extends dynamic>(lowered final self::Extension3|get#method2::T% #this) → <S extends core::String>() → dynamic
+  return <S extends core::String>() → dynamic => self::Extension3|method2<self::Extension3|get#method2::T%, S>(#this);
+static method Extension3|method3<T extends dynamic, S extends dynamic>(lowered final self::Extension3|method3::T% #this) → dynamic {}
+static method Extension3|get#method3<T extends dynamic>(lowered final self::Extension3|get#method3::T% #this) → <S extends dynamic>() → dynamic
   return <S extends dynamic>() → dynamic => self::Extension3|method3<self::Extension3|get#method3::T%, S%>(#this);
-static method Extension3|method4<T extends dynamic, S extends core::Object* = dynamic>(lowered final self::Extension3|method4::T* #this) → dynamic {}
-static method Extension3|get#method4<T extends 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*>(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*>() →* dynamic
-  return <S extends 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*>(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*>() →* dynamic
-  return <S extends 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>(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
-  return <S extends 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>(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 Extension3|method4<T extends dynamic, S extends core::Object? = dynamic>(lowered final self::Extension3|method4::T% #this) → dynamic {}
+static method Extension3|get#method4<T extends 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>(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>() → dynamic
+  return <S extends 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>(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>() → dynamic
+  return <S extends 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>(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
+  return <S extends 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>(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.weak.outline.expect b/pkg/front_end/testcases/extensions/bounds.dart.weak.outline.expect
index 923a293..f0bd53d 100644
--- a/pkg/front_end/testcases/extensions/bounds.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extensions/bounds.dart.weak.outline.expect
@@ -1,8 +1,8 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-extension Extension1<T extends core::Object*> on T* {
+extension Extension1<T extends core::Object> on T {
   method method1 = self::Extension1|method1;
   tearoff method1 = self::Extension1|get#method1;
   method method2 = self::Extension1|method2;
@@ -12,7 +12,7 @@
   method method4 = self::Extension1|method4;
   tearoff method4 = self::Extension1|get#method4;
 }
-extension Extension2<T extends core::String*> on T* {
+extension Extension2<T extends core::String> on T {
   method method1 = self::Extension2|method1;
   tearoff method1 = self::Extension2|get#method1;
   method method2 = self::Extension2|method2;
@@ -22,7 +22,7 @@
   method method4 = self::Extension2|method4;
   tearoff method4 = self::Extension2|get#method4;
 }
-extension Extension3<T extends dynamic> on T* {
+extension Extension3<T extends dynamic> on T% {
   method method1 = self::Extension3|method1;
   tearoff method1 = self::Extension3|get#method1;
   method method2 = self::Extension3|method2;
@@ -32,7 +32,7 @@
   method method4 = self::Extension3|method4;
   tearoff method4 = self::Extension3|get#method4;
 }
-extension Extension4<T extends core::Object* = dynamic> on T* {
+extension Extension4<T extends core::Object? = dynamic> on T% {
   method method1 = self::Extension4|method1;
   tearoff method1 = self::Extension4|get#method1;
   method method2 = self::Extension4|method2;
@@ -42,69 +42,69 @@
   method method4 = self::Extension4|method4;
   tearoff method4 = self::Extension4|get#method4;
 }
-static method Extension1|method1<T extends core::Object*, S extends core::Object*>(lowered final self::Extension1|method1::T* #this) → dynamic
+static method Extension1|method1<T extends core::Object, S extends core::Object>(lowered final self::Extension1|method1::T #this) → dynamic
   ;
-static method Extension1|get#method1<T extends core::Object*>(lowered final self::Extension1|get#method1::T* #this) → <S extends core::Object*>() →* dynamic
-  return <S extends core::Object*>() → dynamic => self::Extension1|method1<self::Extension1|get#method1::T*, S*>(#this);
-static method Extension1|method2<T extends core::Object*, S extends core::String*>(lowered final self::Extension1|method2::T* #this) → dynamic
+static method Extension1|get#method1<T extends core::Object>(lowered final self::Extension1|get#method1::T #this) → <S extends core::Object>() → dynamic
+  return <S extends core::Object>() → dynamic => self::Extension1|method1<self::Extension1|get#method1::T, S>(#this);
+static method Extension1|method2<T extends core::Object, S extends core::String>(lowered final self::Extension1|method2::T #this) → dynamic
   ;
-static method Extension1|get#method2<T extends core::Object*>(lowered final self::Extension1|get#method2::T* #this) → <S extends core::String*>() →* dynamic
-  return <S extends core::String*>() → dynamic => self::Extension1|method2<self::Extension1|get#method2::T*, S*>(#this);
-static method Extension1|method3<T extends core::Object*, S extends dynamic>(lowered final self::Extension1|method3::T* #this) → dynamic
+static method Extension1|get#method2<T extends core::Object>(lowered final self::Extension1|get#method2::T #this) → <S extends core::String>() → dynamic
+  return <S extends core::String>() → dynamic => self::Extension1|method2<self::Extension1|get#method2::T, S>(#this);
+static method Extension1|method3<T extends core::Object, S extends dynamic>(lowered final self::Extension1|method3::T #this) → dynamic
   ;
-static method Extension1|get#method3<T extends core::Object*>(lowered final self::Extension1|get#method3::T* #this) → <S extends dynamic>() →* dynamic
-  return <S extends dynamic>() → dynamic => self::Extension1|method3<self::Extension1|get#method3::T*, S%>(#this);
-static method Extension1|method4<T extends core::Object*, S extends core::Object* = dynamic>(lowered final self::Extension1|method4::T* #this) → dynamic
+static method Extension1|get#method3<T extends core::Object>(lowered final self::Extension1|get#method3::T #this) → <S extends dynamic>() → dynamic
+  return <S extends dynamic>() → dynamic => self::Extension1|method3<self::Extension1|get#method3::T, S%>(#this);
+static method Extension1|method4<T extends core::Object, S extends core::Object? = dynamic>(lowered final self::Extension1|method4::T #this) → dynamic
   ;
-static method Extension1|get#method4<T extends 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*, S extends core::Object*>(lowered final self::Extension2|method1::T* #this) → dynamic
+static method Extension1|get#method4<T extends 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, S extends core::Object>(lowered final self::Extension2|method1::T #this) → dynamic
   ;
-static method Extension2|get#method1<T extends core::String*>(lowered final self::Extension2|get#method1::T* #this) → <S extends core::Object*>() →* dynamic
-  return <S extends core::Object*>() → dynamic => self::Extension2|method1<self::Extension2|get#method1::T*, S*>(#this);
-static method Extension2|method2<T extends core::String*, S extends core::String*>(lowered final self::Extension2|method2::T* #this) → dynamic
+static method Extension2|get#method1<T extends core::String>(lowered final self::Extension2|get#method1::T #this) → <S extends core::Object>() → dynamic
+  return <S extends core::Object>() → dynamic => self::Extension2|method1<self::Extension2|get#method1::T, S>(#this);
+static method Extension2|method2<T extends core::String, S extends core::String>(lowered final self::Extension2|method2::T #this) → dynamic
   ;
-static method Extension2|get#method2<T extends core::String*>(lowered final self::Extension2|get#method2::T* #this) → <S extends core::String*>() →* dynamic
-  return <S extends core::String*>() → dynamic => self::Extension2|method2<self::Extension2|get#method2::T*, S*>(#this);
-static method Extension2|method3<T extends core::String*, S extends dynamic>(lowered final self::Extension2|method3::T* #this) → dynamic
+static method Extension2|get#method2<T extends core::String>(lowered final self::Extension2|get#method2::T #this) → <S extends core::String>() → dynamic
+  return <S extends core::String>() → dynamic => self::Extension2|method2<self::Extension2|get#method2::T, S>(#this);
+static method Extension2|method3<T extends core::String, S extends dynamic>(lowered final self::Extension2|method3::T #this) → dynamic
   ;
-static method Extension2|get#method3<T extends core::String*>(lowered final self::Extension2|get#method3::T* #this) → <S extends dynamic>() →* dynamic
-  return <S extends dynamic>() → dynamic => self::Extension2|method3<self::Extension2|get#method3::T*, S%>(#this);
-static method Extension2|method4<T extends core::String*, S extends core::Object* = dynamic>(lowered final self::Extension2|method4::T* #this) → dynamic
+static method Extension2|get#method3<T extends core::String>(lowered final self::Extension2|get#method3::T #this) → <S extends dynamic>() → dynamic
+  return <S extends dynamic>() → dynamic => self::Extension2|method3<self::Extension2|get#method3::T, S%>(#this);
+static method Extension2|method4<T extends core::String, S extends core::Object? = dynamic>(lowered final self::Extension2|method4::T #this) → dynamic
   ;
-static method Extension2|get#method4<T extends 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, S extends core::Object*>(lowered final self::Extension3|method1::T* #this) → dynamic
+static method Extension2|get#method4<T extends 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, S extends core::Object>(lowered final self::Extension3|method1::T% #this) → dynamic
   ;
-static method Extension3|get#method1<T extends dynamic>(lowered final self::Extension3|get#method1::T* #this) → <S extends core::Object*>() →* dynamic
-  return <S extends core::Object*>() → dynamic => self::Extension3|method1<self::Extension3|get#method1::T%, S*>(#this);
-static method Extension3|method2<T extends dynamic, S extends core::String*>(lowered final self::Extension3|method2::T* #this) → dynamic
+static method Extension3|get#method1<T extends dynamic>(lowered final self::Extension3|get#method1::T% #this) → <S extends core::Object>() → dynamic
+  return <S extends core::Object>() → dynamic => self::Extension3|method1<self::Extension3|get#method1::T%, S>(#this);
+static method Extension3|method2<T extends dynamic, S extends core::String>(lowered final self::Extension3|method2::T% #this) → dynamic
   ;
-static method Extension3|get#method2<T extends dynamic>(lowered final self::Extension3|get#method2::T* #this) → <S extends core::String*>() →* dynamic
-  return <S extends core::String*>() → dynamic => self::Extension3|method2<self::Extension3|get#method2::T%, S*>(#this);
-static method Extension3|method3<T extends dynamic, S extends dynamic>(lowered final self::Extension3|method3::T* #this) → dynamic
+static method Extension3|get#method2<T extends dynamic>(lowered final self::Extension3|get#method2::T% #this) → <S extends core::String>() → dynamic
+  return <S extends core::String>() → dynamic => self::Extension3|method2<self::Extension3|get#method2::T%, S>(#this);
+static method Extension3|method3<T extends dynamic, S extends dynamic>(lowered final self::Extension3|method3::T% #this) → dynamic
   ;
-static method Extension3|get#method3<T extends dynamic>(lowered final self::Extension3|get#method3::T* #this) → <S extends dynamic>() →* dynamic
+static method Extension3|get#method3<T extends dynamic>(lowered final self::Extension3|get#method3::T% #this) → <S extends dynamic>() → dynamic
   return <S extends dynamic>() → dynamic => self::Extension3|method3<self::Extension3|get#method3::T%, S%>(#this);
-static method Extension3|method4<T extends dynamic, S extends core::Object* = dynamic>(lowered final self::Extension3|method4::T* #this) → dynamic
+static method Extension3|method4<T extends dynamic, S extends core::Object? = dynamic>(lowered final self::Extension3|method4::T% #this) → dynamic
   ;
-static method Extension3|get#method4<T extends 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*>(lowered final self::Extension4|method1::T* #this) → dynamic
+static method Extension3|get#method4<T extends 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>(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*>() →* dynamic
-  return <S extends 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*>(lowered final self::Extension4|method2::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>() → dynamic
+  return <S extends 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>(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*>() →* dynamic
-  return <S extends 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>(lowered final self::Extension4|method3::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>() → dynamic
+  return <S extends 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>(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
-  return <S extends 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>(lowered final self::Extension4|method4::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
+  return <S extends 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>(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|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.weak.transformed.expect b/pkg/front_end/testcases/extensions/bounds.dart.weak.transformed.expect
index 8c13b5c..bcf36b9 100644
--- a/pkg/front_end/testcases/extensions/bounds.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/bounds.dart.weak.transformed.expect
@@ -1,8 +1,8 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-extension Extension1<T extends core::Object*> on T* {
+extension Extension1<T extends core::Object> on T {
   method method1 = self::Extension1|method1;
   tearoff method1 = self::Extension1|get#method1;
   method method2 = self::Extension1|method2;
@@ -12,7 +12,7 @@
   method method4 = self::Extension1|method4;
   tearoff method4 = self::Extension1|get#method4;
 }
-extension Extension2<T extends core::String*> on T* {
+extension Extension2<T extends core::String> on T {
   method method1 = self::Extension2|method1;
   tearoff method1 = self::Extension2|get#method1;
   method method2 = self::Extension2|method2;
@@ -22,7 +22,7 @@
   method method4 = self::Extension2|method4;
   tearoff method4 = self::Extension2|get#method4;
 }
-extension Extension3<T extends dynamic> on T* {
+extension Extension3<T extends dynamic> on T% {
   method method1 = self::Extension3|method1;
   tearoff method1 = self::Extension3|get#method1;
   method method2 = self::Extension3|method2;
@@ -32,7 +32,7 @@
   method method4 = self::Extension3|method4;
   tearoff method4 = self::Extension3|get#method4;
 }
-extension Extension4<T extends core::Object* = dynamic> on T* {
+extension Extension4<T extends core::Object? = dynamic> on T% {
   method method1 = self::Extension4|method1;
   tearoff method1 = self::Extension4|get#method1;
   method method2 = self::Extension4|method2;
@@ -42,52 +42,52 @@
   method method4 = self::Extension4|method4;
   tearoff method4 = self::Extension4|get#method4;
 }
-static method Extension1|method1<T extends core::Object*, S extends core::Object*>(lowered final self::Extension1|method1::T* #this) → dynamic {}
-static method Extension1|get#method1<T extends core::Object*>(lowered final self::Extension1|get#method1::T* #this) → <S extends core::Object*>() →* dynamic
-  return <S extends core::Object*>() → dynamic => self::Extension1|method1<self::Extension1|get#method1::T*, S*>(#this);
-static method Extension1|method2<T extends core::Object*, S extends core::String*>(lowered final self::Extension1|method2::T* #this) → dynamic {}
-static method Extension1|get#method2<T extends core::Object*>(lowered final self::Extension1|get#method2::T* #this) → <S extends core::String*>() →* dynamic
-  return <S extends core::String*>() → dynamic => self::Extension1|method2<self::Extension1|get#method2::T*, S*>(#this);
-static method Extension1|method3<T extends core::Object*, S extends dynamic>(lowered final self::Extension1|method3::T* #this) → dynamic {}
-static method Extension1|get#method3<T extends core::Object*>(lowered final self::Extension1|get#method3::T* #this) → <S extends dynamic>() →* dynamic
-  return <S extends dynamic>() → dynamic => self::Extension1|method3<self::Extension1|get#method3::T*, S%>(#this);
-static method Extension1|method4<T extends core::Object*, S extends core::Object* = dynamic>(lowered final self::Extension1|method4::T* #this) → dynamic {}
-static method Extension1|get#method4<T extends 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*, S extends core::Object*>(lowered final self::Extension2|method1::T* #this) → dynamic {}
-static method Extension2|get#method1<T extends core::String*>(lowered final self::Extension2|get#method1::T* #this) → <S extends core::Object*>() →* dynamic
-  return <S extends core::Object*>() → dynamic => self::Extension2|method1<self::Extension2|get#method1::T*, S*>(#this);
-static method Extension2|method2<T extends core::String*, S extends core::String*>(lowered final self::Extension2|method2::T* #this) → dynamic {}
-static method Extension2|get#method2<T extends core::String*>(lowered final self::Extension2|get#method2::T* #this) → <S extends core::String*>() →* dynamic
-  return <S extends core::String*>() → dynamic => self::Extension2|method2<self::Extension2|get#method2::T*, S*>(#this);
-static method Extension2|method3<T extends core::String*, S extends dynamic>(lowered final self::Extension2|method3::T* #this) → dynamic {}
-static method Extension2|get#method3<T extends core::String*>(lowered final self::Extension2|get#method3::T* #this) → <S extends dynamic>() →* dynamic
-  return <S extends dynamic>() → dynamic => self::Extension2|method3<self::Extension2|get#method3::T*, S%>(#this);
-static method Extension2|method4<T extends core::String*, S extends core::Object* = dynamic>(lowered final self::Extension2|method4::T* #this) → dynamic {}
-static method Extension2|get#method4<T extends 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, S extends core::Object*>(lowered final self::Extension3|method1::T* #this) → dynamic {}
-static method Extension3|get#method1<T extends dynamic>(lowered final self::Extension3|get#method1::T* #this) → <S extends core::Object*>() →* dynamic
-  return <S extends core::Object*>() → dynamic => self::Extension3|method1<self::Extension3|get#method1::T%, S*>(#this);
-static method Extension3|method2<T extends dynamic, S extends core::String*>(lowered final self::Extension3|method2::T* #this) → dynamic {}
-static method Extension3|get#method2<T extends dynamic>(lowered final self::Extension3|get#method2::T* #this) → <S extends core::String*>() →* dynamic
-  return <S extends core::String*>() → dynamic => self::Extension3|method2<self::Extension3|get#method2::T%, S*>(#this);
-static method Extension3|method3<T extends dynamic, S extends dynamic>(lowered final self::Extension3|method3::T* #this) → dynamic {}
-static method Extension3|get#method3<T extends dynamic>(lowered final self::Extension3|get#method3::T* #this) → <S extends dynamic>() →* dynamic
+static method Extension1|method1<T extends core::Object, S extends core::Object>(lowered final self::Extension1|method1::T #this) → dynamic {}
+static method Extension1|get#method1<T extends core::Object>(lowered final self::Extension1|get#method1::T #this) → <S extends core::Object>() → dynamic
+  return <S extends core::Object>() → dynamic => self::Extension1|method1<self::Extension1|get#method1::T, S>(#this);
+static method Extension1|method2<T extends core::Object, S extends core::String>(lowered final self::Extension1|method2::T #this) → dynamic {}
+static method Extension1|get#method2<T extends core::Object>(lowered final self::Extension1|get#method2::T #this) → <S extends core::String>() → dynamic
+  return <S extends core::String>() → dynamic => self::Extension1|method2<self::Extension1|get#method2::T, S>(#this);
+static method Extension1|method3<T extends core::Object, S extends dynamic>(lowered final self::Extension1|method3::T #this) → dynamic {}
+static method Extension1|get#method3<T extends core::Object>(lowered final self::Extension1|get#method3::T #this) → <S extends dynamic>() → dynamic
+  return <S extends dynamic>() → dynamic => self::Extension1|method3<self::Extension1|get#method3::T, S%>(#this);
+static method Extension1|method4<T extends core::Object, S extends core::Object? = dynamic>(lowered final self::Extension1|method4::T #this) → dynamic {}
+static method Extension1|get#method4<T extends 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, S extends core::Object>(lowered final self::Extension2|method1::T #this) → dynamic {}
+static method Extension2|get#method1<T extends core::String>(lowered final self::Extension2|get#method1::T #this) → <S extends core::Object>() → dynamic
+  return <S extends core::Object>() → dynamic => self::Extension2|method1<self::Extension2|get#method1::T, S>(#this);
+static method Extension2|method2<T extends core::String, S extends core::String>(lowered final self::Extension2|method2::T #this) → dynamic {}
+static method Extension2|get#method2<T extends core::String>(lowered final self::Extension2|get#method2::T #this) → <S extends core::String>() → dynamic
+  return <S extends core::String>() → dynamic => self::Extension2|method2<self::Extension2|get#method2::T, S>(#this);
+static method Extension2|method3<T extends core::String, S extends dynamic>(lowered final self::Extension2|method3::T #this) → dynamic {}
+static method Extension2|get#method3<T extends core::String>(lowered final self::Extension2|get#method3::T #this) → <S extends dynamic>() → dynamic
+  return <S extends dynamic>() → dynamic => self::Extension2|method3<self::Extension2|get#method3::T, S%>(#this);
+static method Extension2|method4<T extends core::String, S extends core::Object? = dynamic>(lowered final self::Extension2|method4::T #this) → dynamic {}
+static method Extension2|get#method4<T extends 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, S extends core::Object>(lowered final self::Extension3|method1::T% #this) → dynamic {}
+static method Extension3|get#method1<T extends dynamic>(lowered final self::Extension3|get#method1::T% #this) → <S extends core::Object>() → dynamic
+  return <S extends core::Object>() → dynamic => self::Extension3|method1<self::Extension3|get#method1::T%, S>(#this);
+static method Extension3|method2<T extends dynamic, S extends core::String>(lowered final self::Extension3|method2::T% #this) → dynamic {}
+static method Extension3|get#method2<T extends dynamic>(lowered final self::Extension3|get#method2::T% #this) → <S extends core::String>() → dynamic
+  return <S extends core::String>() → dynamic => self::Extension3|method2<self::Extension3|get#method2::T%, S>(#this);
+static method Extension3|method3<T extends dynamic, S extends dynamic>(lowered final self::Extension3|method3::T% #this) → dynamic {}
+static method Extension3|get#method3<T extends dynamic>(lowered final self::Extension3|get#method3::T% #this) → <S extends dynamic>() → dynamic
   return <S extends dynamic>() → dynamic => self::Extension3|method3<self::Extension3|get#method3::T%, S%>(#this);
-static method Extension3|method4<T extends dynamic, S extends core::Object* = dynamic>(lowered final self::Extension3|method4::T* #this) → dynamic {}
-static method Extension3|get#method4<T extends 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*>(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*>() →* dynamic
-  return <S extends 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*>(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*>() →* dynamic
-  return <S extends 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>(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
-  return <S extends 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>(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 Extension3|method4<T extends dynamic, S extends core::Object? = dynamic>(lowered final self::Extension3|method4::T% #this) → dynamic {}
+static method Extension3|get#method4<T extends 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>(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>() → dynamic
+  return <S extends 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>(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>() → dynamic
+  return <S extends 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>(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
+  return <S extends 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>(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/builtin_identifiers.dart b/pkg/front_end/testcases/extensions/builtin_identifiers.dart
index 452cea3..ada520d 100644
--- a/pkg/front_end/testcases/extensions/builtin_identifiers.dart
+++ b/pkg/front_end/testcases/extensions/builtin_identifiers.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2019, 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.
-// @dart=2.9
+
 extension mixin on int {}
 
 extension extension on int {}
diff --git a/pkg/front_end/testcases/extensions/builtin_identifiers.dart.textual_outline.expect b/pkg/front_end/testcases/extensions/builtin_identifiers.dart.textual_outline.expect
index 2e6f837..3fef925 100644
--- a/pkg/front_end/testcases/extensions/builtin_identifiers.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/extensions/builtin_identifiers.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 extension mixin on int {}
 
 extension extension on int {}
diff --git a/pkg/front_end/testcases/extensions/builtin_identifiers.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/extensions/builtin_identifiers.dart.textual_outline_modelled.expect
index b1fc88b..94a2d44 100644
--- a/pkg/front_end/testcases/extensions/builtin_identifiers.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/extensions/builtin_identifiers.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 extension as on int {}
 
 extension extension on int {}
diff --git a/pkg/front_end/testcases/extensions/builtin_identifiers.dart.weak.expect b/pkg/front_end/testcases/extensions/builtin_identifiers.dart.weak.expect
index dba880e..0b269da 100644
--- a/pkg/front_end/testcases/extensions/builtin_identifiers.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/builtin_identifiers.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -17,10 +17,10 @@
 import self as self;
 import "dart:core" as core;
 
-extension mixin on core::int* {
+extension mixin on core::int {
 }
-extension extension on core::int* {
+extension extension on core::int {
 }
-extension as on core::int* {
+extension as on core::int {
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/extensions/builtin_identifiers.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/builtin_identifiers.dart.weak.modular.expect
index dba880e..0b269da 100644
--- a/pkg/front_end/testcases/extensions/builtin_identifiers.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/extensions/builtin_identifiers.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -17,10 +17,10 @@
 import self as self;
 import "dart:core" as core;
 
-extension mixin on core::int* {
+extension mixin on core::int {
 }
-extension extension on core::int* {
+extension extension on core::int {
 }
-extension as on core::int* {
+extension as on core::int {
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/extensions/builtin_identifiers.dart.weak.outline.expect b/pkg/front_end/testcases/extensions/builtin_identifiers.dart.weak.outline.expect
index deff425..97d86db 100644
--- a/pkg/front_end/testcases/extensions/builtin_identifiers.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extensions/builtin_identifiers.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -17,11 +17,11 @@
 import self as self;
 import "dart:core" as core;
 
-extension mixin on core::int* {
+extension mixin on core::int {
 }
-extension extension on core::int* {
+extension extension on core::int {
 }
-extension as on core::int* {
+extension as on core::int {
 }
 static method main() → void
   ;
diff --git a/pkg/front_end/testcases/extensions/builtin_identifiers.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/builtin_identifiers.dart.weak.transformed.expect
index dba880e..0b269da 100644
--- a/pkg/front_end/testcases/extensions/builtin_identifiers.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/builtin_identifiers.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -17,10 +17,10 @@
 import self as self;
 import "dart:core" as core;
 
-extension mixin on core::int* {
+extension mixin on core::int {
 }
-extension extension on core::int* {
+extension extension on core::int {
 }
-extension as on core::int* {
+extension as on core::int {
 }
 static method main() → void {}
diff --git a/pkg/front_end/testcases/extensions/call_methods.dart b/pkg/front_end/testcases/extensions/call_methods.dart
index d3db2f7..3ae8fe3 100644
--- a/pkg/front_end/testcases/extensions/call_methods.dart
+++ b/pkg/front_end/testcases/extensions/call_methods.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2019, 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.
-// @dart=2.9
+
 class A {
   String get call => "My name is A";
 }
diff --git a/pkg/front_end/testcases/extensions/call_methods.dart.textual_outline.expect b/pkg/front_end/testcases/extensions/call_methods.dart.textual_outline.expect
index fd2596a..cb13225 100644
--- a/pkg/front_end/testcases/extensions/call_methods.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/extensions/call_methods.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {
   String get call => "My name is A";
 }
diff --git a/pkg/front_end/testcases/extensions/call_methods.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/extensions/call_methods.dart.textual_outline_modelled.expect
index ac089e2..30be637 100644
--- a/pkg/front_end/testcases/extensions/call_methods.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/extensions/call_methods.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 A a = new A();
 B b = new B();
 
diff --git a/pkg/front_end/testcases/extensions/call_methods.dart.weak.expect b/pkg/front_end/testcases/extensions/call_methods.dart.weak.expect
index d38841f..4373c84 100644
--- a/pkg/front_end/testcases/extensions/call_methods.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/call_methods.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -76,84 +76,64 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  get call() → core::String*
+  get call() → core::String
     return "My name is A";
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  get call() → () →* core::String*
-    return () → core::String* => "My name is B";
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  get call() → () → core::String
+    return () → core::String => "My name is B";
 }
-extension _extension#0 on core::int* {
+extension _extension#0 on core::int {
   get call = self::_extension#0|get#call;
 }
-extension _extension#1 on core::num* {
+extension _extension#1 on core::num {
   get call = self::_extension#1|get#call;
 }
-extension _extension#2 on core::String* {
+extension _extension#2 on core::String {
   get call = self::_extension#2|get#call;
 }
-static field core::String* topLevel1 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:29:18: Error: Too many positional arguments: 0 allowed, but 1 found.
+static field core::String topLevel1 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:29:18: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
 var topLevel1 = 1(10);
                  ^" in self::_extension#2|get#call(self::_extension#0|get#call(1)){<inapplicable>}.(10);
-static field core::String* topLevel2 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:30:18: Error: Too many positional arguments: 0 allowed, but 1 found.
+static field core::String topLevel2 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:30:18: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
 var topLevel2 = 1(\"10\");
                  ^" in self::_extension#2|get#call(self::_extension#0|get#call(1)){<inapplicable>}.("10");
-static field core::String* topLevel3 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:31:20: Error: Too many positional arguments: 0 allowed, but 1 found.
+static field core::String topLevel3 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:31:20: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
 var topLevel3 = 1.0(10);
                    ^" in self::_extension#2|get#call(self::_extension#1|get#call(1.0)){<inapplicable>}.(10);
-static field core::String* topLevel4 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:32:20: Error: Too many positional arguments: 0 allowed, but 1 found.
+static field core::String topLevel4 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:32:20: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
 var topLevel4 = 1.0(\"10\");
                    ^" in self::_extension#2|get#call(self::_extension#1|get#call(1.0)){<inapplicable>}.("10");
-static field self::A* a = new self::A::•();
+static field self::A a = new self::A::•();
 static field invalid-type topLevel5 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:34:18: Error: Cannot invoke an instance of 'A' because it declares 'call' to be something other than a method.
  - 'A' is from 'pkg/front_end/testcases/extensions/call_methods.dart'.
 Try changing 'call' to a method or explicitly invoke 'call'.
 var topLevel5 = a(2);
                  ^";
-static field self::B* b = new self::B::•();
+static field self::B b = new self::B::•();
 static field invalid-type topLevel6 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:36:18: Error: Cannot invoke an instance of 'A' because it declares 'call' to be something other than a method.
  - 'A' is from 'pkg/front_end/testcases/extensions/call_methods.dart'.
 Try changing 'call' to a method or explicitly invoke 'call'.
 var topLevel6 = a(2, \"3\");
                  ^";
-static method _extension#0|get#call(lowered 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(lowered 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(lowered final core::String* #this) → () →* core::String*
-  return () → core::String* => "My name is 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("")(){() →* core::String*};
+  self::_extension#2|get#call("")(){() → core::String};
 }
 static method errors() → dynamic {
   invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:39:4: Error: Too many positional arguments: 0 allowed, but 1 found.
@@ -172,7 +152,7 @@
 Try removing the extra positional arguments.
   1.0(\"10\");
      ^" in self::_extension#2|get#call(self::_extension#1|get#call(1.0)){<inapplicable>}.("10");
-  self::A* a = new self::A::•();
+  self::A a = new self::A::•();
   invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:44:4: Error: Cannot invoke an instance of 'A' because it declares 'call' to be something other than a method.
  - 'A' is from 'pkg/front_end/testcases/extensions/call_methods.dart'.
 Try changing 'call' to a method or explicitly invoke 'call'.
@@ -183,7 +163,7 @@
 Try changing 'call' to a method or explicitly invoke 'call'.
   a(2, \"3\");
    ^";
-  self::B* b = new self::B::•();
+  self::B b = new self::B::•();
   invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:47:4: Error: Cannot invoke an instance of 'B' because it declares 'call' to be something other than a method.
  - 'B' is from 'pkg/front_end/testcases/extensions/call_methods.dart'.
 Try changing 'call' to a method or explicitly invoke 'call'.
diff --git a/pkg/front_end/testcases/extensions/call_methods.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/call_methods.dart.weak.modular.expect
index d38841f..4373c84 100644
--- a/pkg/front_end/testcases/extensions/call_methods.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/extensions/call_methods.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -76,84 +76,64 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  get call() → core::String*
+  get call() → core::String
     return "My name is A";
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  get call() → () →* core::String*
-    return () → core::String* => "My name is B";
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  get call() → () → core::String
+    return () → core::String => "My name is B";
 }
-extension _extension#0 on core::int* {
+extension _extension#0 on core::int {
   get call = self::_extension#0|get#call;
 }
-extension _extension#1 on core::num* {
+extension _extension#1 on core::num {
   get call = self::_extension#1|get#call;
 }
-extension _extension#2 on core::String* {
+extension _extension#2 on core::String {
   get call = self::_extension#2|get#call;
 }
-static field core::String* topLevel1 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:29:18: Error: Too many positional arguments: 0 allowed, but 1 found.
+static field core::String topLevel1 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:29:18: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
 var topLevel1 = 1(10);
                  ^" in self::_extension#2|get#call(self::_extension#0|get#call(1)){<inapplicable>}.(10);
-static field core::String* topLevel2 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:30:18: Error: Too many positional arguments: 0 allowed, but 1 found.
+static field core::String topLevel2 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:30:18: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
 var topLevel2 = 1(\"10\");
                  ^" in self::_extension#2|get#call(self::_extension#0|get#call(1)){<inapplicable>}.("10");
-static field core::String* topLevel3 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:31:20: Error: Too many positional arguments: 0 allowed, but 1 found.
+static field core::String topLevel3 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:31:20: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
 var topLevel3 = 1.0(10);
                    ^" in self::_extension#2|get#call(self::_extension#1|get#call(1.0)){<inapplicable>}.(10);
-static field core::String* topLevel4 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:32:20: Error: Too many positional arguments: 0 allowed, but 1 found.
+static field core::String topLevel4 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:32:20: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
 var topLevel4 = 1.0(\"10\");
                    ^" in self::_extension#2|get#call(self::_extension#1|get#call(1.0)){<inapplicable>}.("10");
-static field self::A* a = new self::A::•();
+static field self::A a = new self::A::•();
 static field invalid-type topLevel5 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:34:18: Error: Cannot invoke an instance of 'A' because it declares 'call' to be something other than a method.
  - 'A' is from 'pkg/front_end/testcases/extensions/call_methods.dart'.
 Try changing 'call' to a method or explicitly invoke 'call'.
 var topLevel5 = a(2);
                  ^";
-static field self::B* b = new self::B::•();
+static field self::B b = new self::B::•();
 static field invalid-type topLevel6 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:36:18: Error: Cannot invoke an instance of 'A' because it declares 'call' to be something other than a method.
  - 'A' is from 'pkg/front_end/testcases/extensions/call_methods.dart'.
 Try changing 'call' to a method or explicitly invoke 'call'.
 var topLevel6 = a(2, \"3\");
                  ^";
-static method _extension#0|get#call(lowered 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(lowered 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(lowered final core::String* #this) → () →* core::String*
-  return () → core::String* => "My name is 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("")(){() →* core::String*};
+  self::_extension#2|get#call("")(){() → core::String};
 }
 static method errors() → dynamic {
   invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:39:4: Error: Too many positional arguments: 0 allowed, but 1 found.
@@ -172,7 +152,7 @@
 Try removing the extra positional arguments.
   1.0(\"10\");
      ^" in self::_extension#2|get#call(self::_extension#1|get#call(1.0)){<inapplicable>}.("10");
-  self::A* a = new self::A::•();
+  self::A a = new self::A::•();
   invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:44:4: Error: Cannot invoke an instance of 'A' because it declares 'call' to be something other than a method.
  - 'A' is from 'pkg/front_end/testcases/extensions/call_methods.dart'.
 Try changing 'call' to a method or explicitly invoke 'call'.
@@ -183,7 +163,7 @@
 Try changing 'call' to a method or explicitly invoke 'call'.
   a(2, \"3\");
    ^";
-  self::B* b = new self::B::•();
+  self::B b = new self::B::•();
   invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:47:4: Error: Cannot invoke an instance of 'B' because it declares 'call' to be something other than a method.
  - 'B' is from 'pkg/front_end/testcases/extensions/call_methods.dart'.
 Try changing 'call' to a method or explicitly invoke 'call'.
diff --git a/pkg/front_end/testcases/extensions/call_methods.dart.weak.outline.expect b/pkg/front_end/testcases/extensions/call_methods.dart.weak.outline.expect
index 1745cce..88c97e4 100644
--- a/pkg/front_end/testcases/extensions/call_methods.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extensions/call_methods.dart.weak.outline.expect
@@ -1,61 +1,41 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
-  get call() → core::String*
+  get call() → core::String
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
-  get call() → () →* core::String*
+  get call() → () → core::String
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension _extension#0 on core::int* {
+extension _extension#0 on core::int {
   get call = self::_extension#0|get#call;
 }
-extension _extension#1 on core::num* {
+extension _extension#1 on core::num {
   get call = self::_extension#1|get#call;
 }
-extension _extension#2 on core::String* {
+extension _extension#2 on core::String {
   get call = self::_extension#2|get#call;
 }
-static field core::String* topLevel1;
-static field core::String* topLevel2;
-static field core::String* topLevel3;
-static field core::String* topLevel4;
-static field self::A* a;
+static field core::String topLevel1;
+static field core::String topLevel2;
+static field core::String topLevel3;
+static field core::String topLevel4;
+static field self::A a;
 static field invalid-type topLevel5;
-static field self::B* b;
+static field self::B b;
 static field invalid-type topLevel6;
-static method _extension#0|get#call(lowered 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(lowered 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(lowered 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.weak.transformed.expect b/pkg/front_end/testcases/extensions/call_methods.dart.weak.transformed.expect
index d38841f..4373c84 100644
--- a/pkg/front_end/testcases/extensions/call_methods.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/call_methods.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -76,84 +76,64 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  get call() → core::String*
+  get call() → core::String
     return "My name is A";
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  get call() → () →* core::String*
-    return () → core::String* => "My name is B";
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  get call() → () → core::String
+    return () → core::String => "My name is B";
 }
-extension _extension#0 on core::int* {
+extension _extension#0 on core::int {
   get call = self::_extension#0|get#call;
 }
-extension _extension#1 on core::num* {
+extension _extension#1 on core::num {
   get call = self::_extension#1|get#call;
 }
-extension _extension#2 on core::String* {
+extension _extension#2 on core::String {
   get call = self::_extension#2|get#call;
 }
-static field core::String* topLevel1 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:29:18: Error: Too many positional arguments: 0 allowed, but 1 found.
+static field core::String topLevel1 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:29:18: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
 var topLevel1 = 1(10);
                  ^" in self::_extension#2|get#call(self::_extension#0|get#call(1)){<inapplicable>}.(10);
-static field core::String* topLevel2 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:30:18: Error: Too many positional arguments: 0 allowed, but 1 found.
+static field core::String topLevel2 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:30:18: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
 var topLevel2 = 1(\"10\");
                  ^" in self::_extension#2|get#call(self::_extension#0|get#call(1)){<inapplicable>}.("10");
-static field core::String* topLevel3 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:31:20: Error: Too many positional arguments: 0 allowed, but 1 found.
+static field core::String topLevel3 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:31:20: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
 var topLevel3 = 1.0(10);
                    ^" in self::_extension#2|get#call(self::_extension#1|get#call(1.0)){<inapplicable>}.(10);
-static field core::String* topLevel4 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:32:20: Error: Too many positional arguments: 0 allowed, but 1 found.
+static field core::String topLevel4 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:32:20: Error: Too many positional arguments: 0 allowed, but 1 found.
 Try removing the extra positional arguments.
 var topLevel4 = 1.0(\"10\");
                    ^" in self::_extension#2|get#call(self::_extension#1|get#call(1.0)){<inapplicable>}.("10");
-static field self::A* a = new self::A::•();
+static field self::A a = new self::A::•();
 static field invalid-type topLevel5 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:34:18: Error: Cannot invoke an instance of 'A' because it declares 'call' to be something other than a method.
  - 'A' is from 'pkg/front_end/testcases/extensions/call_methods.dart'.
 Try changing 'call' to a method or explicitly invoke 'call'.
 var topLevel5 = a(2);
                  ^";
-static field self::B* b = new self::B::•();
+static field self::B b = new self::B::•();
 static field invalid-type topLevel6 = invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:36:18: Error: Cannot invoke an instance of 'A' because it declares 'call' to be something other than a method.
  - 'A' is from 'pkg/front_end/testcases/extensions/call_methods.dart'.
 Try changing 'call' to a method or explicitly invoke 'call'.
 var topLevel6 = a(2, \"3\");
                  ^";
-static method _extension#0|get#call(lowered 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(lowered 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(lowered final core::String* #this) → () →* core::String*
-  return () → core::String* => "My name is 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("")(){() →* core::String*};
+  self::_extension#2|get#call("")(){() → core::String};
 }
 static method errors() → dynamic {
   invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:39:4: Error: Too many positional arguments: 0 allowed, but 1 found.
@@ -172,7 +152,7 @@
 Try removing the extra positional arguments.
   1.0(\"10\");
      ^" in self::_extension#2|get#call(self::_extension#1|get#call(1.0)){<inapplicable>}.("10");
-  self::A* a = new self::A::•();
+  self::A a = new self::A::•();
   invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:44:4: Error: Cannot invoke an instance of 'A' because it declares 'call' to be something other than a method.
  - 'A' is from 'pkg/front_end/testcases/extensions/call_methods.dart'.
 Try changing 'call' to a method or explicitly invoke 'call'.
@@ -183,7 +163,7 @@
 Try changing 'call' to a method or explicitly invoke 'call'.
   a(2, \"3\");
    ^";
-  self::B* b = new self::B::•();
+  self::B b = new self::B::•();
   invalid-expression "pkg/front_end/testcases/extensions/call_methods.dart:47:4: Error: Cannot invoke an instance of 'B' because it declares 'call' to be something other than a method.
  - 'B' is from 'pkg/front_end/testcases/extensions/call_methods.dart'.
 Try changing 'call' to a method or explicitly invoke 'call'.
diff --git a/pkg/front_end/testcases/extensions/check_bounds.dart b/pkg/front_end/testcases/extensions/check_bounds.dart
index bfa3795..0712bf2 100644
--- a/pkg/front_end/testcases/extensions/check_bounds.dart
+++ b/pkg/front_end/testcases/extensions/check_bounds.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2019, 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.
-// @dart=2.9
+
 part 'check_bounds_lib.dart';
 
 class A {}
@@ -17,25 +17,24 @@
 
 main() {}
 
-test() {
-  A a;
-
+test(A a) {
   Class<A> classA = new Class<A>();
+  Class<B> classB = new Class<B>();
+
   classA.method(); // Expect method not found.
   Extension(classA).method(); // Expect bounds mismatch.
   Extension<A>(classA).method(); // Expect bounds mismatch.
-  Extension<B>(classA).method();
+  Extension<B>(classB).method();
   Extension(classA).genericMethod(a); // Expect bounds mismatch.
   Extension(classA).genericMethod<A>(a); // Expect bounds mismatch.
   Extension(classA).genericMethod<B>(a); // Expect bounds mismatch.
   Extension<A>(classA).genericMethod(a); // Expect bounds mismatch.
   Extension<A>(classA).genericMethod<A>(a); // Expect bounds mismatch.
   Extension<A>(classA).genericMethod<B>(a); // Expect bounds mismatch.
-  Extension<B>(classA).genericMethod(a); // Expect bounds mismatch.
-  Extension<B>(classA).genericMethod<A>(a); // Expect bounds mismatch.
-  Extension<B>(classA).genericMethod<B>(a);
+  Extension<B>(classB).genericMethod(a); // Expect bounds mismatch.
+  Extension<B>(classB).genericMethod<A>(a); // Expect bounds mismatch.
+  Extension<B>(classB).genericMethod<B>(a);
 
-  Class<B> classB = new Class<B>();
   classB.method();
   Extension(classB).method();
   Extension<A>(classB).method(); // Expect bounds mismatch.
@@ -57,6 +56,8 @@
 
 final A a = new A();
 final Class<A> classA = new Class<A>();
+final Class<B> classB = new Class<B>();
+
 final field1 = classA.method(); // Expect method not found.
 final field2 = Extension(classA).method(); // Expect bounds mismatch.
 final field3 = Extension<A>(classA).method(); // Expect bounds mismatch.
@@ -70,12 +71,11 @@
 final field10 =
     Extension<A>(classA).genericMethod<B>(a); // Expect bounds mismatch.
 final field11 =
-    Extension<B>(classA).genericMethod(a); // Expect bounds mismatch.
+    Extension<B>(classB).genericMethod(a); // Expect bounds mismatch.
 final field12 =
-    Extension<B>(classA).genericMethod<A>(a); // Expect bounds mismatch.
-final field13 = Extension<B>(classA).genericMethod<B>(a);
+    Extension<B>(classB).genericMethod<A>(a); // Expect bounds mismatch.
+final field13 = Extension<B>(classB).genericMethod<B>(a);
 
-final Class<B> classB = new Class<B>();
 final field14 = classB.method();
 final field15 = Extension(classB).method();
 final field16 = Extension<A>(classB).method(); // Expect bounds mismatch.
diff --git a/pkg/front_end/testcases/extensions/check_bounds.dart.textual_outline.expect b/pkg/front_end/testcases/extensions/check_bounds.dart.textual_outline.expect
index d3150dd..5374e92 100644
--- a/pkg/front_end/testcases/extensions/check_bounds.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/extensions/check_bounds.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 part 'check_bounds_lib.dart';
 
 class A {}
@@ -13,9 +12,10 @@
 }
 
 main() {}
-test() {}
+test(A a) {}
 final A a = new A();
 final Class<A> classA = new Class<A>();
+final Class<B> classB = new Class<B>();
 final field1 = classA.method();
 final field2 = Extension(classA).method();
 final field3 = Extension<A>(classA).method();
@@ -26,10 +26,9 @@
 final field8 = Extension<A>(classA).genericMethod(a);
 final field9 = Extension<A>(classA).genericMethod<A>(a);
 final field10 = Extension<A>(classA).genericMethod<B>(a);
-final field11 = Extension<B>(classA).genericMethod(a);
-final field12 = Extension<B>(classA).genericMethod<A>(a);
-final field13 = Extension<B>(classA).genericMethod<B>(a);
-final Class<B> classB = new Class<B>();
+final field11 = Extension<B>(classB).genericMethod(a);
+final field12 = Extension<B>(classB).genericMethod<A>(a);
+final field13 = Extension<B>(classB).genericMethod<B>(a);
 final field14 = classB.method();
 final field15 = Extension(classB).method();
 final field16 = Extension<A>(classB).method();
diff --git a/pkg/front_end/testcases/extensions/check_bounds.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/extensions/check_bounds.dart.textual_outline_modelled.expect
index dbd1434..80266eb 100644
--- a/pkg/front_end/testcases/extensions/check_bounds.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/extensions/check_bounds.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 part 'check_bounds_lib.dart';
 
 class A {}
@@ -17,9 +16,9 @@
 final Class<B> classB = new Class<B>();
 final field1 = classA.method();
 final field10 = Extension<A>(classA).genericMethod<B>(a);
-final field11 = Extension<B>(classA).genericMethod(a);
-final field12 = Extension<B>(classA).genericMethod<A>(a);
-final field13 = Extension<B>(classA).genericMethod<B>(a);
+final field11 = Extension<B>(classB).genericMethod(a);
+final field12 = Extension<B>(classB).genericMethod<A>(a);
+final field13 = Extension<B>(classB).genericMethod<B>(a);
 final field14 = classB.method();
 final field15 = Extension(classB).method();
 final field16 = Extension<A>(classB).method();
@@ -45,4 +44,4 @@
 final field8 = Extension<A>(classA).genericMethod(a);
 final field9 = Extension<A>(classA).genericMethod<A>(a);
 main() {}
-test() {}
+test(A a) {}
diff --git a/pkg/front_end/testcases/extensions/check_bounds.dart.weak.expect b/pkg/front_end/testcases/extensions/check_bounds.dart.weak.expect
index 0e8aa01..530df36 100644
--- a/pkg/front_end/testcases/extensions/check_bounds.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/check_bounds.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -69,6 +69,12 @@
 //   genericMethod<S extends B>(S s) {}
 //                 ^
 //
+// pkg/front_end/testcases/extensions/check_bounds.dart:30:38: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//   Extension(classA).genericMethod<B>(a); // Expect bounds mismatch.
+//                                      ^
+//
 // pkg/front_end/testcases/extensions/check_bounds.dart:30:3: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
@@ -119,6 +125,12 @@
 //   genericMethod<S extends B>(S s) {}
 //                 ^
 //
+// pkg/front_end/testcases/extensions/check_bounds.dart:33:41: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//   Extension<A>(classA).genericMethod<B>(a); // Expect bounds mismatch.
+//                                         ^
+//
 // pkg/front_end/testcases/extensions/check_bounds.dart:33:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
@@ -133,7 +145,7 @@
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
-//   Extension<B>(classA).genericMethod(a); // Expect bounds mismatch.
+//   Extension<B>(classB).genericMethod(a); // Expect bounds mismatch.
 //                        ^
 // pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
 //   genericMethod<S extends B>(S s) {}
@@ -143,13 +155,19 @@
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try changing type arguments so that they conform to the bounds.
-//   Extension<B>(classA).genericMethod<A>(a); // Expect bounds mismatch.
+//   Extension<B>(classB).genericMethod<A>(a); // Expect bounds mismatch.
 //                        ^
 // pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
 //   genericMethod<S extends B>(S s) {}
 //                 ^
 //
-// pkg/front_end/testcases/extensions/check_bounds.dart:41:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|method'.
+// pkg/front_end/testcases/extensions/check_bounds.dart:36:41: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//   Extension<B>(classB).genericMethod<B>(a);
+//                                         ^
+//
+// pkg/front_end/testcases/extensions/check_bounds.dart:40:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|method'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try changing type arguments so that they conform to the bounds.
@@ -159,7 +177,7 @@
 // extension Extension<T extends B> on Class<T> {
 //                     ^
 //
-// pkg/front_end/testcases/extensions/check_bounds.dart:44:10: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds.dart:43:10: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
@@ -169,7 +187,7 @@
 //   genericMethod<S extends B>(S s) {}
 //                 ^
 //
-// pkg/front_end/testcases/extensions/check_bounds.dart:45:10: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds.dart:44:10: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try changing type arguments so that they conform to the bounds.
@@ -179,7 +197,13 @@
 //   genericMethod<S extends B>(S s) {}
 //                 ^
 //
-// pkg/front_end/testcases/extensions/check_bounds.dart:47:21: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds.dart:45:27: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//   classB.genericMethod<B>(a);
+//                           ^
+//
+// pkg/front_end/testcases/extensions/check_bounds.dart:46:21: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
@@ -189,7 +213,7 @@
 //   genericMethod<S extends B>(S s) {}
 //                 ^
 //
-// pkg/front_end/testcases/extensions/check_bounds.dart:48:21: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds.dart:47:21: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try changing type arguments so that they conform to the bounds.
@@ -199,7 +223,13 @@
 //   genericMethod<S extends B>(S s) {}
 //                 ^
 //
-// pkg/front_end/testcases/extensions/check_bounds.dart:50:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds.dart:48:38: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//   Extension(classB).genericMethod<B>(a);
+//                                      ^
+//
+// pkg/front_end/testcases/extensions/check_bounds.dart:49:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try changing type arguments so that they conform to the bounds.
@@ -209,7 +239,7 @@
 // extension Extension<T extends B> on Class<T> {
 //                     ^
 //
-// pkg/front_end/testcases/extensions/check_bounds.dart:50:3: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds.dart:49:3: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
@@ -219,7 +249,7 @@
 //   genericMethod<S extends B>(S s) {}
 //                 ^
 //
-// pkg/front_end/testcases/extensions/check_bounds.dart:51:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds.dart:50:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try changing type arguments so that they conform to the bounds.
@@ -229,7 +259,7 @@
 // extension Extension<T extends B> on Class<T> {
 //                     ^
 //
-// pkg/front_end/testcases/extensions/check_bounds.dart:51:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds.dart:50:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try changing type arguments so that they conform to the bounds.
@@ -239,7 +269,13 @@
 //   genericMethod<S extends B>(S s) {}
 //                 ^
 //
-// pkg/front_end/testcases/extensions/check_bounds.dart:52:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds.dart:51:41: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//   Extension<A>(classB).genericMethod<B>(a); // Expect bounds mismatch.
+//                                         ^
+//
+// pkg/front_end/testcases/extensions/check_bounds.dart:51:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try changing type arguments so that they conform to the bounds.
@@ -249,7 +285,7 @@
 // extension Extension<T extends B> on Class<T> {
 //                     ^
 //
-// pkg/front_end/testcases/extensions/check_bounds.dart:53:24: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds.dart:52:24: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
@@ -259,7 +295,7 @@
 //   genericMethod<S extends B>(S s) {}
 //                 ^
 //
-// pkg/front_end/testcases/extensions/check_bounds.dart:54:24: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds.dart:53:24: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try changing type arguments so that they conform to the bounds.
@@ -269,14 +305,20 @@
 //   genericMethod<S extends B>(S s) {}
 //                 ^
 //
-// pkg/front_end/testcases/extensions/check_bounds.dart:60:23: Error: The method 'method' isn't defined for the class 'Class<A>'.
+// pkg/front_end/testcases/extensions/check_bounds.dart:54:41: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//   Extension<B>(classB).genericMethod<B>(a);
+//                                         ^
+//
+// pkg/front_end/testcases/extensions/check_bounds.dart:61:23: Error: The method 'method' isn't defined for the class 'Class<A>'.
 //  - 'Class' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try correcting the name to the name of an existing method, or defining a method named 'method'.
 // final field1 = classA.method(); // Expect method not found.
 //                       ^^^^^^
 //
-// pkg/front_end/testcases/extensions/check_bounds.dart:61:16: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|method'.
+// pkg/front_end/testcases/extensions/check_bounds.dart:62:16: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|method'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
@@ -286,7 +328,7 @@
 // extension Extension<T extends B> on Class<T> {
 //                     ^
 //
-// pkg/front_end/testcases/extensions/check_bounds.dart:62:16: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|method'.
+// pkg/front_end/testcases/extensions/check_bounds.dart:63:16: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|method'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try changing type arguments so that they conform to the bounds.
@@ -296,41 +338,28 @@
 // extension Extension<T extends B> on Class<T> {
 //                     ^
 //
-// pkg/front_end/testcases/extensions/check_bounds.dart:64:16: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds.dart:64:29: Error: The argument type 'Class<A>' can't be assigned to the parameter type 'Class<B>'.
+//  - 'Class' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
-// Try specifying type arguments explicitly so that they conform to the bounds.
-// final field5 = Extension(classA).genericMethod(a); // Expect bounds mismatch.
-//                ^
-// pkg/front_end/testcases/extensions/check_bounds.dart:13:21: Context: This is the type variable whose bound isn't conformed to.
-// extension Extension<T extends B> on Class<T> {
-//                     ^
-//
-// pkg/front_end/testcases/extensions/check_bounds.dart:64:16: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
-//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
-//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
-// Try specifying type arguments explicitly so that they conform to the bounds.
-// final field5 = Extension(classA).genericMethod(a); // Expect bounds mismatch.
-//                ^
-// pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
-//   genericMethod<S extends B>(S s) {}
-//                 ^
+// final field4 = Extension<B>(classA).method();
+//                             ^
 //
 // pkg/front_end/testcases/extensions/check_bounds.dart:65:16: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
-// final field6 = Extension(classA).genericMethod<A>(a); // Expect bounds mismatch.
+// final field5 = Extension(classA).genericMethod(a); // Expect bounds mismatch.
 //                ^
 // pkg/front_end/testcases/extensions/check_bounds.dart:13:21: Context: This is the type variable whose bound isn't conformed to.
 // extension Extension<T extends B> on Class<T> {
 //                     ^
 //
-// pkg/front_end/testcases/extensions/check_bounds.dart:65:16: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds.dart:65:16: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
-// Try changing type arguments so that they conform to the bounds.
-// final field6 = Extension(classA).genericMethod<A>(a); // Expect bounds mismatch.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// final field5 = Extension(classA).genericMethod(a); // Expect bounds mismatch.
 //                ^
 // pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
 //   genericMethod<S extends B>(S s) {}
@@ -340,13 +369,39 @@
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
+// final field6 = Extension(classA).genericMethod<A>(a); // Expect bounds mismatch.
+//                ^
+// pkg/front_end/testcases/extensions/check_bounds.dart:13:21: Context: This is the type variable whose bound isn't conformed to.
+// extension Extension<T extends B> on Class<T> {
+//                     ^
+//
+// pkg/front_end/testcases/extensions/check_bounds.dart:66:16: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// final field6 = Extension(classA).genericMethod<A>(a); // Expect bounds mismatch.
+//                ^
+// pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
+//   genericMethod<S extends B>(S s) {}
+//                 ^
+//
+// pkg/front_end/testcases/extensions/check_bounds.dart:67:51: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// final field7 = Extension(classA).genericMethod<B>(a); // Expect bounds mismatch.
+//                                                   ^
+//
+// pkg/front_end/testcases/extensions/check_bounds.dart:67:16: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
 // final field7 = Extension(classA).genericMethod<B>(a); // Expect bounds mismatch.
 //                ^
 // pkg/front_end/testcases/extensions/check_bounds.dart:13:21: Context: This is the type variable whose bound isn't conformed to.
 // extension Extension<T extends B> on Class<T> {
 //                     ^
 //
-// pkg/front_end/testcases/extensions/check_bounds.dart:67:16: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds.dart:68:16: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try changing type arguments so that they conform to the bounds.
@@ -356,7 +411,7 @@
 // extension Extension<T extends B> on Class<T> {
 //                     ^
 //
-// pkg/front_end/testcases/extensions/check_bounds.dart:67:16: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds.dart:68:16: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
@@ -366,7 +421,7 @@
 //   genericMethod<S extends B>(S s) {}
 //                 ^
 //
-// pkg/front_end/testcases/extensions/check_bounds.dart:69:5: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds.dart:70:5: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try changing type arguments so that they conform to the bounds.
@@ -376,7 +431,7 @@
 // extension Extension<T extends B> on Class<T> {
 //                     ^
 //
-// pkg/front_end/testcases/extensions/check_bounds.dart:69:5: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds.dart:70:5: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try changing type arguments so that they conform to the bounds.
@@ -386,7 +441,13 @@
 //   genericMethod<S extends B>(S s) {}
 //                 ^
 //
-// pkg/front_end/testcases/extensions/check_bounds.dart:71:5: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds.dart:72:43: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//     Extension<A>(classA).genericMethod<B>(a); // Expect bounds mismatch.
+//                                           ^
+//
+// pkg/front_end/testcases/extensions/check_bounds.dart:72:5: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try changing type arguments so that they conform to the bounds.
@@ -396,26 +457,32 @@
 // extension Extension<T extends B> on Class<T> {
 //                     ^
 //
-// pkg/front_end/testcases/extensions/check_bounds.dart:73:26: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds.dart:74:26: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
-//     Extension<B>(classA).genericMethod(a); // Expect bounds mismatch.
+//     Extension<B>(classB).genericMethod(a); // Expect bounds mismatch.
 //                          ^
 // pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
 //   genericMethod<S extends B>(S s) {}
 //                 ^
 //
-// pkg/front_end/testcases/extensions/check_bounds.dart:75:26: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds.dart:76:26: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try changing type arguments so that they conform to the bounds.
-//     Extension<B>(classA).genericMethod<A>(a); // Expect bounds mismatch.
+//     Extension<B>(classB).genericMethod<A>(a); // Expect bounds mismatch.
 //                          ^
 // pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
 //   genericMethod<S extends B>(S s) {}
 //                 ^
 //
+// pkg/front_end/testcases/extensions/check_bounds.dart:77:55: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// final field13 = Extension<B>(classB).genericMethod<B>(a);
+//                                                       ^
+//
 // pkg/front_end/testcases/extensions/check_bounds.dart:81:17: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|method'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
@@ -446,6 +513,12 @@
 //   genericMethod<S extends B>(S s) {}
 //                 ^
 //
+// pkg/front_end/testcases/extensions/check_bounds.dart:86:41: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// final field20 = classB.genericMethod<B>(a);
+//                                         ^
+//
 // pkg/front_end/testcases/extensions/check_bounds.dart:87:35: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
@@ -466,6 +539,12 @@
 //   genericMethod<S extends B>(S s) {}
 //                 ^
 //
+// pkg/front_end/testcases/extensions/check_bounds.dart:90:52: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// final field23 = Extension(classB).genericMethod<B>(a);
+//                                                    ^
+//
 // pkg/front_end/testcases/extensions/check_bounds.dart:92:5: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
@@ -506,6 +585,12 @@
 //   genericMethod<S extends B>(S s) {}
 //                 ^
 //
+// pkg/front_end/testcases/extensions/check_bounds.dart:96:43: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//     Extension<A>(classB).genericMethod<B>(a); // Expect bounds mismatch.
+//                                           ^
+//
 // pkg/front_end/testcases/extensions/check_bounds.dart:96:5: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
@@ -536,6 +621,12 @@
 //   genericMethod<S extends B>(S s) {}
 //                 ^
 //
+// pkg/front_end/testcases/extensions/check_bounds.dart:101:55: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// final field29 = Extension<B>(classB).genericMethod<B>(a);
+//                                                       ^
+//
 // pkg/front_end/testcases/extensions/check_bounds_lib.dart:11:10: Error: The method 'method' isn't defined for the class 'Class<A>'.
 //  - 'Class' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
@@ -603,6 +694,12 @@
 //   genericMethod<S extends B>(S s) {}
 //                 ^
 //
+// pkg/front_end/testcases/extensions/check_bounds_lib.dart:17:38: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//   Extension(classA).genericMethod<B>(a); // Expect bounds mismatch.
+//                                      ^
+//
 // pkg/front_end/testcases/extensions/check_bounds_lib.dart:17:3: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
@@ -653,6 +750,12 @@
 //   genericMethod<S extends B>(S s) {}
 //                 ^
 //
+// pkg/front_end/testcases/extensions/check_bounds_lib.dart:20:41: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//   Extension<A>(classA).genericMethod<B>(a); // Expect bounds mismatch.
+//                                         ^
+//
 // pkg/front_end/testcases/extensions/check_bounds_lib.dart:20:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
@@ -667,7 +770,7 @@
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
-//   Extension<B>(classA).genericMethod(a); // Expect bounds mismatch.
+//   Extension<B>(classB).genericMethod(a); // Expect bounds mismatch.
 //                        ^
 // pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
 //   genericMethod<S extends B>(S s) {}
@@ -677,13 +780,19 @@
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try changing type arguments so that they conform to the bounds.
-//   Extension<B>(classA).genericMethod<A>(a); // Expect bounds mismatch.
+//   Extension<B>(classB).genericMethod<A>(a); // Expect bounds mismatch.
 //                        ^
 // pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
 //   genericMethod<S extends B>(S s) {}
 //                 ^
 //
-// pkg/front_end/testcases/extensions/check_bounds_lib.dart:28:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|method'.
+// pkg/front_end/testcases/extensions/check_bounds_lib.dart:23:41: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//   Extension<B>(classB).genericMethod<B>(a);
+//                                         ^
+//
+// pkg/front_end/testcases/extensions/check_bounds_lib.dart:27:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|method'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try changing type arguments so that they conform to the bounds.
@@ -693,7 +802,7 @@
 // extension Extension<T extends B> on Class<T> {
 //                     ^
 //
-// pkg/front_end/testcases/extensions/check_bounds_lib.dart:31:10: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds_lib.dart:30:10: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
@@ -703,7 +812,7 @@
 //   genericMethod<S extends B>(S s) {}
 //                 ^
 //
-// pkg/front_end/testcases/extensions/check_bounds_lib.dart:32:10: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds_lib.dart:31:10: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try changing type arguments so that they conform to the bounds.
@@ -713,7 +822,13 @@
 //   genericMethod<S extends B>(S s) {}
 //                 ^
 //
-// pkg/front_end/testcases/extensions/check_bounds_lib.dart:34:21: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds_lib.dart:32:27: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//   classB.genericMethod<B>(a);
+//                           ^
+//
+// pkg/front_end/testcases/extensions/check_bounds_lib.dart:33:21: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
@@ -723,7 +838,7 @@
 //   genericMethod<S extends B>(S s) {}
 //                 ^
 //
-// pkg/front_end/testcases/extensions/check_bounds_lib.dart:35:21: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds_lib.dart:34:21: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try changing type arguments so that they conform to the bounds.
@@ -733,7 +848,13 @@
 //   genericMethod<S extends B>(S s) {}
 //                 ^
 //
-// pkg/front_end/testcases/extensions/check_bounds_lib.dart:37:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds_lib.dart:35:38: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//   Extension(classB).genericMethod<B>(a);
+//                                      ^
+//
+// pkg/front_end/testcases/extensions/check_bounds_lib.dart:36:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try changing type arguments so that they conform to the bounds.
@@ -743,7 +864,7 @@
 // extension Extension<T extends B> on Class<T> {
 //                     ^
 //
-// pkg/front_end/testcases/extensions/check_bounds_lib.dart:37:3: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds_lib.dart:36:3: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
@@ -753,7 +874,7 @@
 //   genericMethod<S extends B>(S s) {}
 //                 ^
 //
-// pkg/front_end/testcases/extensions/check_bounds_lib.dart:38:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds_lib.dart:37:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try changing type arguments so that they conform to the bounds.
@@ -763,7 +884,7 @@
 // extension Extension<T extends B> on Class<T> {
 //                     ^
 //
-// pkg/front_end/testcases/extensions/check_bounds_lib.dart:38:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds_lib.dart:37:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try changing type arguments so that they conform to the bounds.
@@ -773,7 +894,13 @@
 //   genericMethod<S extends B>(S s) {}
 //                 ^
 //
-// pkg/front_end/testcases/extensions/check_bounds_lib.dart:39:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds_lib.dart:38:41: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//   Extension<A>(classB).genericMethod<B>(a); // Expect bounds mismatch.
+//                                         ^
+//
+// pkg/front_end/testcases/extensions/check_bounds_lib.dart:38:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try changing type arguments so that they conform to the bounds.
@@ -783,7 +910,7 @@
 // extension Extension<T extends B> on Class<T> {
 //                     ^
 //
-// pkg/front_end/testcases/extensions/check_bounds_lib.dart:40:24: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds_lib.dart:39:24: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
@@ -793,7 +920,7 @@
 //   genericMethod<S extends B>(S s) {}
 //                 ^
 //
-// pkg/front_end/testcases/extensions/check_bounds_lib.dart:41:24: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds_lib.dart:40:24: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try changing type arguments so that they conform to the bounds.
@@ -803,170 +930,243 @@
 //   genericMethod<S extends B>(S s) {}
 //                 ^
 //
+// pkg/front_end/testcases/extensions/check_bounds_lib.dart:41:41: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//   Extension<B>(classB).genericMethod<B>(a);
+//                                         ^
+//
 import self as self;
 import "dart:core" as core;
 
 part check_bounds_lib.dart;
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
 }
-class Class<T extends self::A*> extends core::Object {
-  synthetic constructor •() → self::Class<self::Class::T*>*
+class Class<T extends self::A> extends core::Object {
+  synthetic constructor •() → self::Class<self::Class::T>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension Extension<T extends self::B*> on self::Class<T*>* {
+extension Extension<T extends self::B> on self::Class<T> {
   method method = self::Extension|method;
   tearoff method = self::Extension|get#method;
   method genericMethod = self::Extension|genericMethod;
   tearoff genericMethod = self::Extension|get#genericMethod;
 }
-static final field self::A* a = new self::A::•();
-static final field self::Class<self::A*>* classA = new self::Class::•<self::A*>();
-static final field dynamic field1 = invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:60:23: Error: The method 'method' isn't defined for the class 'Class<A>'.
+static final field self::A a = new self::A::•();
+static final field self::Class<self::A> classA = new self::Class::•<self::A>();
+static final field self::Class<self::B> classB = new self::Class::•<self::B>();
+static final field dynamic field1 = invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:61:23: Error: The method 'method' isn't defined for the class 'Class<A>'.
  - 'Class' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 Try correcting the name to the name of an existing method, or defining a method named 'method'.
 final field1 = classA.method(); // Expect method not found.
                       ^^^^^^" in self::classA{<unresolved>}.method();
-static final field dynamic field2 = self::Extension|method<self::A*>(self::classA);
-static final field dynamic field3 = self::Extension|method<self::A*>(self::classA);
-static final field dynamic field4 = self::Extension|method<self::B*>(self::classA as{TypeError} self::Class<self::B*>*);
-static final field dynamic field5 = self::Extension|genericMethod<self::A*, self::A*>(self::classA, self::a);
-static final field dynamic field6 = self::Extension|genericMethod<self::A*, self::A*>(self::classA, self::a);
-static final field dynamic field7 = self::Extension|genericMethod<self::A*, self::B*>(self::classA, self::a as{TypeError} self::B*);
-static final field dynamic field8 = self::Extension|genericMethod<self::A*, self::A*>(self::classA, self::a);
-static final field dynamic field9 = self::Extension|genericMethod<self::A*, self::A*>(self::classA, self::a);
-static final field dynamic field10 = self::Extension|genericMethod<self::A*, self::B*>(self::classA, self::a as{TypeError} self::B*);
-static final field dynamic field11 = self::Extension|genericMethod<self::B*, self::A*>(self::classA as{TypeError} self::Class<self::B*>*, self::a);
-static final field dynamic field12 = self::Extension|genericMethod<self::B*, self::A*>(self::classA as{TypeError} self::Class<self::B*>*, self::a);
-static final field dynamic field13 = self::Extension|genericMethod<self::B*, self::B*>(self::classA as{TypeError} self::Class<self::B*>*, self::a as{TypeError} self::B*);
-static final field self::Class<self::B*>* classB = new self::Class::•<self::B*>();
-static final field dynamic field14 = self::Extension|method<self::B*>(self::classB);
-static final field dynamic field15 = self::Extension|method<self::B*>(self::classB);
-static final field dynamic field16 = self::Extension|method<self::A*>(self::classB);
-static final field dynamic field17 = self::Extension|method<self::B*>(self::classB);
-static final field dynamic field18 = self::Extension|genericMethod<self::B*, self::A*>(self::classB, self::a);
-static final field dynamic field19 = self::Extension|genericMethod<self::B*, self::A*>(self::classB, self::a);
-static final field dynamic field20 = self::Extension|genericMethod<self::B*, self::B*>(self::classB, self::a as{TypeError} self::B*);
-static final field dynamic field21 = self::Extension|genericMethod<self::B*, self::A*>(self::classB, self::a);
-static final field dynamic field22 = self::Extension|genericMethod<self::B*, self::A*>(self::classB, self::a);
-static final field dynamic field23 = self::Extension|genericMethod<self::B*, self::B*>(self::classB, self::a as{TypeError} self::B*);
-static final field dynamic field24 = self::Extension|genericMethod<self::A*, self::A*>(self::classB, self::a);
-static final field dynamic field25 = self::Extension|genericMethod<self::A*, self::A*>(self::classB, self::a);
-static final field dynamic field26 = self::Extension|genericMethod<self::A*, self::B*>(self::classB, self::a as{TypeError} self::B*);
-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*>(lowered final self::Class<self::Extension|method::T*>* #this) → dynamic {}
-static method Extension|get#method<T extends 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*, S extends 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*>(lowered final self::Class<self::Extension|get#genericMethod::T*>* #this) → <S extends self::B*>(S*) →* dynamic
-  return <S extends self::B*>(S* s) → dynamic => self::Extension|genericMethod<self::Extension|get#genericMethod::T*, S*>(#this, s);
+static final field dynamic field2 = self::Extension|method<self::A>(self::classA);
+static final field dynamic field3 = self::Extension|method<self::A>(self::classA);
+static final field dynamic field4 = self::Extension|method<self::B>(invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:64:29: Error: The argument type 'Class<A>' can't be assigned to the parameter type 'Class<B>'.
+ - 'Class' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+ - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+ - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+final field4 = Extension<B>(classA).method();
+                            ^" in self::classA as{TypeError,ForNonNullableByDefault} self::Class<self::B>);
+static final field dynamic field5 = self::Extension|genericMethod<self::A, self::A>(self::classA, self::a);
+static final field dynamic field6 = self::Extension|genericMethod<self::A, self::A>(self::classA, self::a);
+static final field dynamic field7 = self::Extension|genericMethod<self::A, self::B>(self::classA, invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:67:51: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+ - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+ - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+final field7 = Extension(classA).genericMethod<B>(a); // Expect bounds mismatch.
+                                                  ^" in self::a as{TypeError,ForNonNullableByDefault} self::B);
+static final field dynamic field8 = self::Extension|genericMethod<self::A, self::A>(self::classA, self::a);
+static final field dynamic field9 = self::Extension|genericMethod<self::A, self::A>(self::classA, self::a);
+static final field dynamic field10 = self::Extension|genericMethod<self::A, self::B>(self::classA, invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:72:43: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+ - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+ - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+    Extension<A>(classA).genericMethod<B>(a); // Expect bounds mismatch.
+                                          ^" in self::a as{TypeError,ForNonNullableByDefault} self::B);
+static final field dynamic field11 = self::Extension|genericMethod<self::B, self::A>(self::classB, self::a);
+static final field dynamic field12 = self::Extension|genericMethod<self::B, self::A>(self::classB, self::a);
+static final field dynamic field13 = self::Extension|genericMethod<self::B, self::B>(self::classB, invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:77:55: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+ - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+ - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+final field13 = Extension<B>(classB).genericMethod<B>(a);
+                                                      ^" in self::a as{TypeError,ForNonNullableByDefault} self::B);
+static final field dynamic field14 = self::Extension|method<self::B>(self::classB);
+static final field dynamic field15 = self::Extension|method<self::B>(self::classB);
+static final field dynamic field16 = self::Extension|method<self::A>(self::classB);
+static final field dynamic field17 = self::Extension|method<self::B>(self::classB);
+static final field dynamic field18 = self::Extension|genericMethod<self::B, self::A>(self::classB, self::a);
+static final field dynamic field19 = self::Extension|genericMethod<self::B, self::A>(self::classB, self::a);
+static final field dynamic field20 = self::Extension|genericMethod<self::B, self::B>(self::classB, invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:86:41: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+ - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+ - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+final field20 = classB.genericMethod<B>(a);
+                                        ^" in self::a as{TypeError,ForNonNullableByDefault} self::B);
+static final field dynamic field21 = self::Extension|genericMethod<self::B, self::A>(self::classB, self::a);
+static final field dynamic field22 = self::Extension|genericMethod<self::B, self::A>(self::classB, self::a);
+static final field dynamic field23 = self::Extension|genericMethod<self::B, self::B>(self::classB, invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:90:52: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+ - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+ - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+final field23 = Extension(classB).genericMethod<B>(a);
+                                                   ^" in self::a as{TypeError,ForNonNullableByDefault} self::B);
+static final field dynamic field24 = self::Extension|genericMethod<self::A, self::A>(self::classB, self::a);
+static final field dynamic field25 = self::Extension|genericMethod<self::A, self::A>(self::classB, self::a);
+static final field dynamic field26 = self::Extension|genericMethod<self::A, self::B>(self::classB, invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:96:43: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+ - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+ - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+    Extension<A>(classB).genericMethod<B>(a); // Expect bounds mismatch.
+                                          ^" in self::a as{TypeError,ForNonNullableByDefault} self::B);
+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, invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:101:55: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+ - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+ - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+final field29 = Extension<B>(classB).genericMethod<B>(a);
+                                                      ^" in self::a as{TypeError,ForNonNullableByDefault} self::B);
+static method Extension|method<T extends self::B>(lowered final self::Class<self::Extension|method::T> #this) → dynamic {}
+static method Extension|get#method<T extends 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, S extends 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>(lowered final self::Class<self::Extension|get#genericMethod::T> #this) → <S extends self::B>(S) → dynamic
+  return <S extends self::B>(S s) → dynamic => self::Extension|genericMethod<self::Extension|get#genericMethod::T, S>(#this, s);
 static method main() → dynamic {}
-static method test() → dynamic {
-  self::A* a;
-  self::Class<self::A*>* classA = new self::Class::•<self::A*>();
+static method test(self::A a) → dynamic {
+  self::Class<self::A> classA = new self::Class::•<self::A>();
+  self::Class<self::B> classB = new self::Class::•<self::B>();
   invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:24:10: Error: The method 'method' isn't defined for the class 'Class<A>'.
  - 'Class' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 Try correcting the name to the name of an existing method, or defining a method named 'method'.
   classA.method(); // Expect method not found.
          ^^^^^^" in classA{<unresolved>}.method();
-  self::Extension|method<self::A*>(classA);
-  self::Extension|method<self::A*>(classA);
-  self::Extension|method<self::B*>(classA as{TypeError} self::Class<self::B*>*);
-  self::Extension|genericMethod<self::A*, self::A*>(classA, a);
-  self::Extension|genericMethod<self::A*, self::A*>(classA, a);
-  self::Extension|genericMethod<self::A*, self::B*>(classA, a as{TypeError} self::B*);
-  self::Extension|genericMethod<self::A*, self::A*>(classA, a);
-  self::Extension|genericMethod<self::A*, self::A*>(classA, a);
-  self::Extension|genericMethod<self::A*, self::B*>(classA, a as{TypeError} self::B*);
-  self::Extension|genericMethod<self::B*, self::A*>(classA as{TypeError} self::Class<self::B*>*, a);
-  self::Extension|genericMethod<self::B*, self::A*>(classA as{TypeError} self::Class<self::B*>*, a);
-  self::Extension|genericMethod<self::B*, self::B*>(classA as{TypeError} self::Class<self::B*>*, a as{TypeError} self::B*);
-  self::Class<self::B*>* classB = new self::Class::•<self::B*>();
-  self::Extension|method<self::B*>(classB);
-  self::Extension|method<self::B*>(classB);
-  self::Extension|method<self::A*>(classB);
-  self::Extension|method<self::B*>(classB);
-  self::Extension|genericMethod<self::B*, self::A*>(classB, a);
-  self::Extension|genericMethod<self::B*, self::A*>(classB, a);
-  self::Extension|genericMethod<self::B*, self::B*>(classB, a as{TypeError} self::B*);
-  self::Extension|genericMethod<self::B*, self::A*>(classB, a);
-  self::Extension|genericMethod<self::B*, self::A*>(classB, a);
-  self::Extension|genericMethod<self::B*, self::B*>(classB, a as{TypeError} self::B*);
-  self::Extension|genericMethod<self::A*, self::A*>(classB, a);
-  self::Extension|genericMethod<self::A*, self::A*>(classB, a);
-  self::Extension|genericMethod<self::A*, self::B*>(classB, a as{TypeError} self::B*);
-  self::Extension|genericMethod<self::B*, self::A*>(classB, a);
-  self::Extension|genericMethod<self::B*, self::A*>(classB, a);
-  self::Extension|genericMethod<self::B*, self::B*>(classB, a as{TypeError} self::B*);
+  self::Extension|method<self::A>(classA);
+  self::Extension|method<self::A>(classA);
+  self::Extension|method<self::B>(classB);
+  self::Extension|genericMethod<self::A, self::A>(classA, a);
+  self::Extension|genericMethod<self::A, self::A>(classA, a);
+  self::Extension|genericMethod<self::A, self::B>(classA, invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:30:38: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+ - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+ - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+  Extension(classA).genericMethod<B>(a); // Expect bounds mismatch.
+                                     ^" in a as{TypeError,ForNonNullableByDefault} self::B);
+  self::Extension|genericMethod<self::A, self::A>(classA, a);
+  self::Extension|genericMethod<self::A, self::A>(classA, a);
+  self::Extension|genericMethod<self::A, self::B>(classA, invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:33:41: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+ - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+ - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+  Extension<A>(classA).genericMethod<B>(a); // Expect bounds mismatch.
+                                        ^" in a as{TypeError,ForNonNullableByDefault} self::B);
+  self::Extension|genericMethod<self::B, self::A>(classB, a);
+  self::Extension|genericMethod<self::B, self::A>(classB, a);
+  self::Extension|genericMethod<self::B, self::B>(classB, invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:36:41: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+ - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+ - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+  Extension<B>(classB).genericMethod<B>(a);
+                                        ^" in a as{TypeError,ForNonNullableByDefault} self::B);
+  self::Extension|method<self::B>(classB);
+  self::Extension|method<self::B>(classB);
+  self::Extension|method<self::A>(classB);
+  self::Extension|method<self::B>(classB);
+  self::Extension|genericMethod<self::B, self::A>(classB, a);
+  self::Extension|genericMethod<self::B, self::A>(classB, a);
+  self::Extension|genericMethod<self::B, self::B>(classB, invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:45:27: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+ - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+ - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+  classB.genericMethod<B>(a);
+                          ^" in a as{TypeError,ForNonNullableByDefault} self::B);
+  self::Extension|genericMethod<self::B, self::A>(classB, a);
+  self::Extension|genericMethod<self::B, self::A>(classB, a);
+  self::Extension|genericMethod<self::B, self::B>(classB, invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:48:38: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+ - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+ - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+  Extension(classB).genericMethod<B>(a);
+                                     ^" in a as{TypeError,ForNonNullableByDefault} self::B);
+  self::Extension|genericMethod<self::A, self::A>(classB, a);
+  self::Extension|genericMethod<self::A, self::A>(classB, a);
+  self::Extension|genericMethod<self::A, self::B>(classB, invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:51:41: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+ - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+ - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+  Extension<A>(classB).genericMethod<B>(a); // Expect bounds mismatch.
+                                        ^" in a as{TypeError,ForNonNullableByDefault} self::B);
+  self::Extension|genericMethod<self::B, self::A>(classB, a);
+  self::Extension|genericMethod<self::B, self::A>(classB, a);
+  self::Extension|genericMethod<self::B, self::B>(classB, invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:54:41: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+ - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+ - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+  Extension<B>(classB).genericMethod<B>(a);
+                                        ^" in a as{TypeError,ForNonNullableByDefault} self::B);
 }
-static method /* from org-dartlang-testcase:///check_bounds_lib.dart */ testInPart() → dynamic {
-  self::A* a;
-  self::Class<self::A*>* classA = new self::Class::•<self::A*>();
+static method /* from org-dartlang-testcase:///check_bounds_lib.dart */ testInPart(self::A a) → dynamic {
+  self::Class<self::A> classA = new self::Class::•<self::A>();
+  self::Class<self::B> classB = new self::Class::•<self::B>();
   invalid-expression "pkg/front_end/testcases/extensions/check_bounds_lib.dart:11:10: Error: The method 'method' isn't defined for the class 'Class<A>'.
  - 'Class' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 Try correcting the name to the name of an existing method, or defining a method named 'method'.
   classA.method();
          ^^^^^^" in classA{<unresolved>}.method();
-  self::Extension|method<self::A*>(classA);
-  self::Extension|method<self::A*>(classA);
-  self::Extension|method<self::B*>(classA as{TypeError} self::Class<self::B*>*);
-  self::Extension|genericMethod<self::A*, self::A*>(classA, a);
-  self::Extension|genericMethod<self::A*, self::A*>(classA, a);
-  self::Extension|genericMethod<self::A*, self::B*>(classA, a as{TypeError} self::B*);
-  self::Extension|genericMethod<self::A*, self::A*>(classA, a);
-  self::Extension|genericMethod<self::A*, self::A*>(classA, a);
-  self::Extension|genericMethod<self::A*, self::B*>(classA, a as{TypeError} self::B*);
-  self::Extension|genericMethod<self::B*, self::A*>(classA as{TypeError} self::Class<self::B*>*, a);
-  self::Extension|genericMethod<self::B*, self::A*>(classA as{TypeError} self::Class<self::B*>*, a);
-  self::Extension|genericMethod<self::B*, self::B*>(classA as{TypeError} self::Class<self::B*>*, a as{TypeError} self::B*);
-  self::Class<self::B*>* classB = new self::Class::•<self::B*>();
-  self::Extension|method<self::B*>(classB);
-  self::Extension|method<self::B*>(classB);
-  self::Extension|method<self::A*>(classB);
-  self::Extension|method<self::B*>(classB);
-  self::Extension|genericMethod<self::B*, self::A*>(classB, a);
-  self::Extension|genericMethod<self::B*, self::A*>(classB, a);
-  self::Extension|genericMethod<self::B*, self::B*>(classB, a as{TypeError} self::B*);
-  self::Extension|genericMethod<self::B*, self::A*>(classB, a);
-  self::Extension|genericMethod<self::B*, self::A*>(classB, a);
-  self::Extension|genericMethod<self::B*, self::B*>(classB, a as{TypeError} self::B*);
-  self::Extension|genericMethod<self::A*, self::A*>(classB, a);
-  self::Extension|genericMethod<self::A*, self::A*>(classB, a);
-  self::Extension|genericMethod<self::A*, self::B*>(classB, a as{TypeError} self::B*);
-  self::Extension|genericMethod<self::B*, self::A*>(classB, a);
-  self::Extension|genericMethod<self::B*, self::A*>(classB, a);
-  self::Extension|genericMethod<self::B*, self::B*>(classB, a as{TypeError} self::B*);
+  self::Extension|method<self::A>(classA);
+  self::Extension|method<self::A>(classA);
+  self::Extension|method<self::B>(classB);
+  self::Extension|genericMethod<self::A, self::A>(classA, a);
+  self::Extension|genericMethod<self::A, self::A>(classA, a);
+  self::Extension|genericMethod<self::A, self::B>(classA, invalid-expression "pkg/front_end/testcases/extensions/check_bounds_lib.dart:17:38: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+ - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+ - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+  Extension(classA).genericMethod<B>(a); // Expect bounds mismatch.
+                                     ^" in a as{TypeError,ForNonNullableByDefault} self::B);
+  self::Extension|genericMethod<self::A, self::A>(classA, a);
+  self::Extension|genericMethod<self::A, self::A>(classA, a);
+  self::Extension|genericMethod<self::A, self::B>(classA, invalid-expression "pkg/front_end/testcases/extensions/check_bounds_lib.dart:20:41: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+ - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+ - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+  Extension<A>(classA).genericMethod<B>(a); // Expect bounds mismatch.
+                                        ^" in a as{TypeError,ForNonNullableByDefault} self::B);
+  self::Extension|genericMethod<self::B, self::A>(classB, a);
+  self::Extension|genericMethod<self::B, self::A>(classB, a);
+  self::Extension|genericMethod<self::B, self::B>(classB, invalid-expression "pkg/front_end/testcases/extensions/check_bounds_lib.dart:23:41: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+ - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+ - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+  Extension<B>(classB).genericMethod<B>(a);
+                                        ^" in a as{TypeError,ForNonNullableByDefault} self::B);
+  self::Extension|method<self::B>(classB);
+  self::Extension|method<self::B>(classB);
+  self::Extension|method<self::A>(classB);
+  self::Extension|method<self::B>(classB);
+  self::Extension|genericMethod<self::B, self::A>(classB, a);
+  self::Extension|genericMethod<self::B, self::A>(classB, a);
+  self::Extension|genericMethod<self::B, self::B>(classB, invalid-expression "pkg/front_end/testcases/extensions/check_bounds_lib.dart:32:27: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+ - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+ - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+  classB.genericMethod<B>(a);
+                          ^" in a as{TypeError,ForNonNullableByDefault} self::B);
+  self::Extension|genericMethod<self::B, self::A>(classB, a);
+  self::Extension|genericMethod<self::B, self::A>(classB, a);
+  self::Extension|genericMethod<self::B, self::B>(classB, invalid-expression "pkg/front_end/testcases/extensions/check_bounds_lib.dart:35:38: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+ - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+ - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+  Extension(classB).genericMethod<B>(a);
+                                     ^" in a as{TypeError,ForNonNullableByDefault} self::B);
+  self::Extension|genericMethod<self::A, self::A>(classB, a);
+  self::Extension|genericMethod<self::A, self::A>(classB, a);
+  self::Extension|genericMethod<self::A, self::B>(classB, invalid-expression "pkg/front_end/testcases/extensions/check_bounds_lib.dart:38:41: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+ - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+ - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+  Extension<A>(classB).genericMethod<B>(a); // Expect bounds mismatch.
+                                        ^" in a as{TypeError,ForNonNullableByDefault} self::B);
+  self::Extension|genericMethod<self::B, self::A>(classB, a);
+  self::Extension|genericMethod<self::B, self::A>(classB, a);
+  self::Extension|genericMethod<self::B, self::B>(classB, invalid-expression "pkg/front_end/testcases/extensions/check_bounds_lib.dart:41:41: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+ - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+ - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+  Extension<B>(classB).genericMethod<B>(a);
+                                        ^" in a as{TypeError,ForNonNullableByDefault} self::B);
 }
diff --git a/pkg/front_end/testcases/extensions/check_bounds.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/check_bounds.dart.weak.modular.expect
index 0e8aa01..530df36 100644
--- a/pkg/front_end/testcases/extensions/check_bounds.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/extensions/check_bounds.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -69,6 +69,12 @@
 //   genericMethod<S extends B>(S s) {}
 //                 ^
 //
+// pkg/front_end/testcases/extensions/check_bounds.dart:30:38: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//   Extension(classA).genericMethod<B>(a); // Expect bounds mismatch.
+//                                      ^
+//
 // pkg/front_end/testcases/extensions/check_bounds.dart:30:3: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
@@ -119,6 +125,12 @@
 //   genericMethod<S extends B>(S s) {}
 //                 ^
 //
+// pkg/front_end/testcases/extensions/check_bounds.dart:33:41: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//   Extension<A>(classA).genericMethod<B>(a); // Expect bounds mismatch.
+//                                         ^
+//
 // pkg/front_end/testcases/extensions/check_bounds.dart:33:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
@@ -133,7 +145,7 @@
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
-//   Extension<B>(classA).genericMethod(a); // Expect bounds mismatch.
+//   Extension<B>(classB).genericMethod(a); // Expect bounds mismatch.
 //                        ^
 // pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
 //   genericMethod<S extends B>(S s) {}
@@ -143,13 +155,19 @@
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try changing type arguments so that they conform to the bounds.
-//   Extension<B>(classA).genericMethod<A>(a); // Expect bounds mismatch.
+//   Extension<B>(classB).genericMethod<A>(a); // Expect bounds mismatch.
 //                        ^
 // pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
 //   genericMethod<S extends B>(S s) {}
 //                 ^
 //
-// pkg/front_end/testcases/extensions/check_bounds.dart:41:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|method'.
+// pkg/front_end/testcases/extensions/check_bounds.dart:36:41: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//   Extension<B>(classB).genericMethod<B>(a);
+//                                         ^
+//
+// pkg/front_end/testcases/extensions/check_bounds.dart:40:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|method'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try changing type arguments so that they conform to the bounds.
@@ -159,7 +177,7 @@
 // extension Extension<T extends B> on Class<T> {
 //                     ^
 //
-// pkg/front_end/testcases/extensions/check_bounds.dart:44:10: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds.dart:43:10: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
@@ -169,7 +187,7 @@
 //   genericMethod<S extends B>(S s) {}
 //                 ^
 //
-// pkg/front_end/testcases/extensions/check_bounds.dart:45:10: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds.dart:44:10: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try changing type arguments so that they conform to the bounds.
@@ -179,7 +197,13 @@
 //   genericMethod<S extends B>(S s) {}
 //                 ^
 //
-// pkg/front_end/testcases/extensions/check_bounds.dart:47:21: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds.dart:45:27: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//   classB.genericMethod<B>(a);
+//                           ^
+//
+// pkg/front_end/testcases/extensions/check_bounds.dart:46:21: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
@@ -189,7 +213,7 @@
 //   genericMethod<S extends B>(S s) {}
 //                 ^
 //
-// pkg/front_end/testcases/extensions/check_bounds.dart:48:21: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds.dart:47:21: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try changing type arguments so that they conform to the bounds.
@@ -199,7 +223,13 @@
 //   genericMethod<S extends B>(S s) {}
 //                 ^
 //
-// pkg/front_end/testcases/extensions/check_bounds.dart:50:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds.dart:48:38: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//   Extension(classB).genericMethod<B>(a);
+//                                      ^
+//
+// pkg/front_end/testcases/extensions/check_bounds.dart:49:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try changing type arguments so that they conform to the bounds.
@@ -209,7 +239,7 @@
 // extension Extension<T extends B> on Class<T> {
 //                     ^
 //
-// pkg/front_end/testcases/extensions/check_bounds.dart:50:3: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds.dart:49:3: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
@@ -219,7 +249,7 @@
 //   genericMethod<S extends B>(S s) {}
 //                 ^
 //
-// pkg/front_end/testcases/extensions/check_bounds.dart:51:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds.dart:50:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try changing type arguments so that they conform to the bounds.
@@ -229,7 +259,7 @@
 // extension Extension<T extends B> on Class<T> {
 //                     ^
 //
-// pkg/front_end/testcases/extensions/check_bounds.dart:51:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds.dart:50:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try changing type arguments so that they conform to the bounds.
@@ -239,7 +269,13 @@
 //   genericMethod<S extends B>(S s) {}
 //                 ^
 //
-// pkg/front_end/testcases/extensions/check_bounds.dart:52:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds.dart:51:41: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//   Extension<A>(classB).genericMethod<B>(a); // Expect bounds mismatch.
+//                                         ^
+//
+// pkg/front_end/testcases/extensions/check_bounds.dart:51:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try changing type arguments so that they conform to the bounds.
@@ -249,7 +285,7 @@
 // extension Extension<T extends B> on Class<T> {
 //                     ^
 //
-// pkg/front_end/testcases/extensions/check_bounds.dart:53:24: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds.dart:52:24: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
@@ -259,7 +295,7 @@
 //   genericMethod<S extends B>(S s) {}
 //                 ^
 //
-// pkg/front_end/testcases/extensions/check_bounds.dart:54:24: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds.dart:53:24: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try changing type arguments so that they conform to the bounds.
@@ -269,14 +305,20 @@
 //   genericMethod<S extends B>(S s) {}
 //                 ^
 //
-// pkg/front_end/testcases/extensions/check_bounds.dart:60:23: Error: The method 'method' isn't defined for the class 'Class<A>'.
+// pkg/front_end/testcases/extensions/check_bounds.dart:54:41: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//   Extension<B>(classB).genericMethod<B>(a);
+//                                         ^
+//
+// pkg/front_end/testcases/extensions/check_bounds.dart:61:23: Error: The method 'method' isn't defined for the class 'Class<A>'.
 //  - 'Class' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try correcting the name to the name of an existing method, or defining a method named 'method'.
 // final field1 = classA.method(); // Expect method not found.
 //                       ^^^^^^
 //
-// pkg/front_end/testcases/extensions/check_bounds.dart:61:16: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|method'.
+// pkg/front_end/testcases/extensions/check_bounds.dart:62:16: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|method'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
@@ -286,7 +328,7 @@
 // extension Extension<T extends B> on Class<T> {
 //                     ^
 //
-// pkg/front_end/testcases/extensions/check_bounds.dart:62:16: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|method'.
+// pkg/front_end/testcases/extensions/check_bounds.dart:63:16: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|method'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try changing type arguments so that they conform to the bounds.
@@ -296,41 +338,28 @@
 // extension Extension<T extends B> on Class<T> {
 //                     ^
 //
-// pkg/front_end/testcases/extensions/check_bounds.dart:64:16: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds.dart:64:29: Error: The argument type 'Class<A>' can't be assigned to the parameter type 'Class<B>'.
+//  - 'Class' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
-// Try specifying type arguments explicitly so that they conform to the bounds.
-// final field5 = Extension(classA).genericMethod(a); // Expect bounds mismatch.
-//                ^
-// pkg/front_end/testcases/extensions/check_bounds.dart:13:21: Context: This is the type variable whose bound isn't conformed to.
-// extension Extension<T extends B> on Class<T> {
-//                     ^
-//
-// pkg/front_end/testcases/extensions/check_bounds.dart:64:16: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
-//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
-//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
-// Try specifying type arguments explicitly so that they conform to the bounds.
-// final field5 = Extension(classA).genericMethod(a); // Expect bounds mismatch.
-//                ^
-// pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
-//   genericMethod<S extends B>(S s) {}
-//                 ^
+// final field4 = Extension<B>(classA).method();
+//                             ^
 //
 // pkg/front_end/testcases/extensions/check_bounds.dart:65:16: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
-// final field6 = Extension(classA).genericMethod<A>(a); // Expect bounds mismatch.
+// final field5 = Extension(classA).genericMethod(a); // Expect bounds mismatch.
 //                ^
 // pkg/front_end/testcases/extensions/check_bounds.dart:13:21: Context: This is the type variable whose bound isn't conformed to.
 // extension Extension<T extends B> on Class<T> {
 //                     ^
 //
-// pkg/front_end/testcases/extensions/check_bounds.dart:65:16: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds.dart:65:16: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
-// Try changing type arguments so that they conform to the bounds.
-// final field6 = Extension(classA).genericMethod<A>(a); // Expect bounds mismatch.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// final field5 = Extension(classA).genericMethod(a); // Expect bounds mismatch.
 //                ^
 // pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
 //   genericMethod<S extends B>(S s) {}
@@ -340,13 +369,39 @@
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
+// final field6 = Extension(classA).genericMethod<A>(a); // Expect bounds mismatch.
+//                ^
+// pkg/front_end/testcases/extensions/check_bounds.dart:13:21: Context: This is the type variable whose bound isn't conformed to.
+// extension Extension<T extends B> on Class<T> {
+//                     ^
+//
+// pkg/front_end/testcases/extensions/check_bounds.dart:66:16: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// final field6 = Extension(classA).genericMethod<A>(a); // Expect bounds mismatch.
+//                ^
+// pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
+//   genericMethod<S extends B>(S s) {}
+//                 ^
+//
+// pkg/front_end/testcases/extensions/check_bounds.dart:67:51: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// final field7 = Extension(classA).genericMethod<B>(a); // Expect bounds mismatch.
+//                                                   ^
+//
+// pkg/front_end/testcases/extensions/check_bounds.dart:67:16: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
 // final field7 = Extension(classA).genericMethod<B>(a); // Expect bounds mismatch.
 //                ^
 // pkg/front_end/testcases/extensions/check_bounds.dart:13:21: Context: This is the type variable whose bound isn't conformed to.
 // extension Extension<T extends B> on Class<T> {
 //                     ^
 //
-// pkg/front_end/testcases/extensions/check_bounds.dart:67:16: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds.dart:68:16: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try changing type arguments so that they conform to the bounds.
@@ -356,7 +411,7 @@
 // extension Extension<T extends B> on Class<T> {
 //                     ^
 //
-// pkg/front_end/testcases/extensions/check_bounds.dart:67:16: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds.dart:68:16: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
@@ -366,7 +421,7 @@
 //   genericMethod<S extends B>(S s) {}
 //                 ^
 //
-// pkg/front_end/testcases/extensions/check_bounds.dart:69:5: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds.dart:70:5: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try changing type arguments so that they conform to the bounds.
@@ -376,7 +431,7 @@
 // extension Extension<T extends B> on Class<T> {
 //                     ^
 //
-// pkg/front_end/testcases/extensions/check_bounds.dart:69:5: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds.dart:70:5: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try changing type arguments so that they conform to the bounds.
@@ -386,7 +441,13 @@
 //   genericMethod<S extends B>(S s) {}
 //                 ^
 //
-// pkg/front_end/testcases/extensions/check_bounds.dart:71:5: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds.dart:72:43: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//     Extension<A>(classA).genericMethod<B>(a); // Expect bounds mismatch.
+//                                           ^
+//
+// pkg/front_end/testcases/extensions/check_bounds.dart:72:5: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try changing type arguments so that they conform to the bounds.
@@ -396,26 +457,32 @@
 // extension Extension<T extends B> on Class<T> {
 //                     ^
 //
-// pkg/front_end/testcases/extensions/check_bounds.dart:73:26: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds.dart:74:26: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
-//     Extension<B>(classA).genericMethod(a); // Expect bounds mismatch.
+//     Extension<B>(classB).genericMethod(a); // Expect bounds mismatch.
 //                          ^
 // pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
 //   genericMethod<S extends B>(S s) {}
 //                 ^
 //
-// pkg/front_end/testcases/extensions/check_bounds.dart:75:26: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds.dart:76:26: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try changing type arguments so that they conform to the bounds.
-//     Extension<B>(classA).genericMethod<A>(a); // Expect bounds mismatch.
+//     Extension<B>(classB).genericMethod<A>(a); // Expect bounds mismatch.
 //                          ^
 // pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
 //   genericMethod<S extends B>(S s) {}
 //                 ^
 //
+// pkg/front_end/testcases/extensions/check_bounds.dart:77:55: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// final field13 = Extension<B>(classB).genericMethod<B>(a);
+//                                                       ^
+//
 // pkg/front_end/testcases/extensions/check_bounds.dart:81:17: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|method'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
@@ -446,6 +513,12 @@
 //   genericMethod<S extends B>(S s) {}
 //                 ^
 //
+// pkg/front_end/testcases/extensions/check_bounds.dart:86:41: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// final field20 = classB.genericMethod<B>(a);
+//                                         ^
+//
 // pkg/front_end/testcases/extensions/check_bounds.dart:87:35: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
@@ -466,6 +539,12 @@
 //   genericMethod<S extends B>(S s) {}
 //                 ^
 //
+// pkg/front_end/testcases/extensions/check_bounds.dart:90:52: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// final field23 = Extension(classB).genericMethod<B>(a);
+//                                                    ^
+//
 // pkg/front_end/testcases/extensions/check_bounds.dart:92:5: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
@@ -506,6 +585,12 @@
 //   genericMethod<S extends B>(S s) {}
 //                 ^
 //
+// pkg/front_end/testcases/extensions/check_bounds.dart:96:43: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//     Extension<A>(classB).genericMethod<B>(a); // Expect bounds mismatch.
+//                                           ^
+//
 // pkg/front_end/testcases/extensions/check_bounds.dart:96:5: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
@@ -536,6 +621,12 @@
 //   genericMethod<S extends B>(S s) {}
 //                 ^
 //
+// pkg/front_end/testcases/extensions/check_bounds.dart:101:55: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// final field29 = Extension<B>(classB).genericMethod<B>(a);
+//                                                       ^
+//
 // pkg/front_end/testcases/extensions/check_bounds_lib.dart:11:10: Error: The method 'method' isn't defined for the class 'Class<A>'.
 //  - 'Class' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
@@ -603,6 +694,12 @@
 //   genericMethod<S extends B>(S s) {}
 //                 ^
 //
+// pkg/front_end/testcases/extensions/check_bounds_lib.dart:17:38: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//   Extension(classA).genericMethod<B>(a); // Expect bounds mismatch.
+//                                      ^
+//
 // pkg/front_end/testcases/extensions/check_bounds_lib.dart:17:3: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
@@ -653,6 +750,12 @@
 //   genericMethod<S extends B>(S s) {}
 //                 ^
 //
+// pkg/front_end/testcases/extensions/check_bounds_lib.dart:20:41: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//   Extension<A>(classA).genericMethod<B>(a); // Expect bounds mismatch.
+//                                         ^
+//
 // pkg/front_end/testcases/extensions/check_bounds_lib.dart:20:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
@@ -667,7 +770,7 @@
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
-//   Extension<B>(classA).genericMethod(a); // Expect bounds mismatch.
+//   Extension<B>(classB).genericMethod(a); // Expect bounds mismatch.
 //                        ^
 // pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
 //   genericMethod<S extends B>(S s) {}
@@ -677,13 +780,19 @@
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try changing type arguments so that they conform to the bounds.
-//   Extension<B>(classA).genericMethod<A>(a); // Expect bounds mismatch.
+//   Extension<B>(classB).genericMethod<A>(a); // Expect bounds mismatch.
 //                        ^
 // pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
 //   genericMethod<S extends B>(S s) {}
 //                 ^
 //
-// pkg/front_end/testcases/extensions/check_bounds_lib.dart:28:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|method'.
+// pkg/front_end/testcases/extensions/check_bounds_lib.dart:23:41: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//   Extension<B>(classB).genericMethod<B>(a);
+//                                         ^
+//
+// pkg/front_end/testcases/extensions/check_bounds_lib.dart:27:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|method'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try changing type arguments so that they conform to the bounds.
@@ -693,7 +802,7 @@
 // extension Extension<T extends B> on Class<T> {
 //                     ^
 //
-// pkg/front_end/testcases/extensions/check_bounds_lib.dart:31:10: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds_lib.dart:30:10: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
@@ -703,7 +812,7 @@
 //   genericMethod<S extends B>(S s) {}
 //                 ^
 //
-// pkg/front_end/testcases/extensions/check_bounds_lib.dart:32:10: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds_lib.dart:31:10: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try changing type arguments so that they conform to the bounds.
@@ -713,7 +822,13 @@
 //   genericMethod<S extends B>(S s) {}
 //                 ^
 //
-// pkg/front_end/testcases/extensions/check_bounds_lib.dart:34:21: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds_lib.dart:32:27: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//   classB.genericMethod<B>(a);
+//                           ^
+//
+// pkg/front_end/testcases/extensions/check_bounds_lib.dart:33:21: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
@@ -723,7 +838,7 @@
 //   genericMethod<S extends B>(S s) {}
 //                 ^
 //
-// pkg/front_end/testcases/extensions/check_bounds_lib.dart:35:21: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds_lib.dart:34:21: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try changing type arguments so that they conform to the bounds.
@@ -733,7 +848,13 @@
 //   genericMethod<S extends B>(S s) {}
 //                 ^
 //
-// pkg/front_end/testcases/extensions/check_bounds_lib.dart:37:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds_lib.dart:35:38: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//   Extension(classB).genericMethod<B>(a);
+//                                      ^
+//
+// pkg/front_end/testcases/extensions/check_bounds_lib.dart:36:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try changing type arguments so that they conform to the bounds.
@@ -743,7 +864,7 @@
 // extension Extension<T extends B> on Class<T> {
 //                     ^
 //
-// pkg/front_end/testcases/extensions/check_bounds_lib.dart:37:3: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds_lib.dart:36:3: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
@@ -753,7 +874,7 @@
 //   genericMethod<S extends B>(S s) {}
 //                 ^
 //
-// pkg/front_end/testcases/extensions/check_bounds_lib.dart:38:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds_lib.dart:37:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try changing type arguments so that they conform to the bounds.
@@ -763,7 +884,7 @@
 // extension Extension<T extends B> on Class<T> {
 //                     ^
 //
-// pkg/front_end/testcases/extensions/check_bounds_lib.dart:38:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds_lib.dart:37:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try changing type arguments so that they conform to the bounds.
@@ -773,7 +894,13 @@
 //   genericMethod<S extends B>(S s) {}
 //                 ^
 //
-// pkg/front_end/testcases/extensions/check_bounds_lib.dart:39:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds_lib.dart:38:41: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//   Extension<A>(classB).genericMethod<B>(a); // Expect bounds mismatch.
+//                                         ^
+//
+// pkg/front_end/testcases/extensions/check_bounds_lib.dart:38:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try changing type arguments so that they conform to the bounds.
@@ -783,7 +910,7 @@
 // extension Extension<T extends B> on Class<T> {
 //                     ^
 //
-// pkg/front_end/testcases/extensions/check_bounds_lib.dart:40:24: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds_lib.dart:39:24: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
@@ -793,7 +920,7 @@
 //   genericMethod<S extends B>(S s) {}
 //                 ^
 //
-// pkg/front_end/testcases/extensions/check_bounds_lib.dart:41:24: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds_lib.dart:40:24: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try changing type arguments so that they conform to the bounds.
@@ -803,170 +930,243 @@
 //   genericMethod<S extends B>(S s) {}
 //                 ^
 //
+// pkg/front_end/testcases/extensions/check_bounds_lib.dart:41:41: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//   Extension<B>(classB).genericMethod<B>(a);
+//                                         ^
+//
 import self as self;
 import "dart:core" as core;
 
 part check_bounds_lib.dart;
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
 }
-class Class<T extends self::A*> extends core::Object {
-  synthetic constructor •() → self::Class<self::Class::T*>*
+class Class<T extends self::A> extends core::Object {
+  synthetic constructor •() → self::Class<self::Class::T>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension Extension<T extends self::B*> on self::Class<T*>* {
+extension Extension<T extends self::B> on self::Class<T> {
   method method = self::Extension|method;
   tearoff method = self::Extension|get#method;
   method genericMethod = self::Extension|genericMethod;
   tearoff genericMethod = self::Extension|get#genericMethod;
 }
-static final field self::A* a = new self::A::•();
-static final field self::Class<self::A*>* classA = new self::Class::•<self::A*>();
-static final field dynamic field1 = invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:60:23: Error: The method 'method' isn't defined for the class 'Class<A>'.
+static final field self::A a = new self::A::•();
+static final field self::Class<self::A> classA = new self::Class::•<self::A>();
+static final field self::Class<self::B> classB = new self::Class::•<self::B>();
+static final field dynamic field1 = invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:61:23: Error: The method 'method' isn't defined for the class 'Class<A>'.
  - 'Class' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 Try correcting the name to the name of an existing method, or defining a method named 'method'.
 final field1 = classA.method(); // Expect method not found.
                       ^^^^^^" in self::classA{<unresolved>}.method();
-static final field dynamic field2 = self::Extension|method<self::A*>(self::classA);
-static final field dynamic field3 = self::Extension|method<self::A*>(self::classA);
-static final field dynamic field4 = self::Extension|method<self::B*>(self::classA as{TypeError} self::Class<self::B*>*);
-static final field dynamic field5 = self::Extension|genericMethod<self::A*, self::A*>(self::classA, self::a);
-static final field dynamic field6 = self::Extension|genericMethod<self::A*, self::A*>(self::classA, self::a);
-static final field dynamic field7 = self::Extension|genericMethod<self::A*, self::B*>(self::classA, self::a as{TypeError} self::B*);
-static final field dynamic field8 = self::Extension|genericMethod<self::A*, self::A*>(self::classA, self::a);
-static final field dynamic field9 = self::Extension|genericMethod<self::A*, self::A*>(self::classA, self::a);
-static final field dynamic field10 = self::Extension|genericMethod<self::A*, self::B*>(self::classA, self::a as{TypeError} self::B*);
-static final field dynamic field11 = self::Extension|genericMethod<self::B*, self::A*>(self::classA as{TypeError} self::Class<self::B*>*, self::a);
-static final field dynamic field12 = self::Extension|genericMethod<self::B*, self::A*>(self::classA as{TypeError} self::Class<self::B*>*, self::a);
-static final field dynamic field13 = self::Extension|genericMethod<self::B*, self::B*>(self::classA as{TypeError} self::Class<self::B*>*, self::a as{TypeError} self::B*);
-static final field self::Class<self::B*>* classB = new self::Class::•<self::B*>();
-static final field dynamic field14 = self::Extension|method<self::B*>(self::classB);
-static final field dynamic field15 = self::Extension|method<self::B*>(self::classB);
-static final field dynamic field16 = self::Extension|method<self::A*>(self::classB);
-static final field dynamic field17 = self::Extension|method<self::B*>(self::classB);
-static final field dynamic field18 = self::Extension|genericMethod<self::B*, self::A*>(self::classB, self::a);
-static final field dynamic field19 = self::Extension|genericMethod<self::B*, self::A*>(self::classB, self::a);
-static final field dynamic field20 = self::Extension|genericMethod<self::B*, self::B*>(self::classB, self::a as{TypeError} self::B*);
-static final field dynamic field21 = self::Extension|genericMethod<self::B*, self::A*>(self::classB, self::a);
-static final field dynamic field22 = self::Extension|genericMethod<self::B*, self::A*>(self::classB, self::a);
-static final field dynamic field23 = self::Extension|genericMethod<self::B*, self::B*>(self::classB, self::a as{TypeError} self::B*);
-static final field dynamic field24 = self::Extension|genericMethod<self::A*, self::A*>(self::classB, self::a);
-static final field dynamic field25 = self::Extension|genericMethod<self::A*, self::A*>(self::classB, self::a);
-static final field dynamic field26 = self::Extension|genericMethod<self::A*, self::B*>(self::classB, self::a as{TypeError} self::B*);
-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*>(lowered final self::Class<self::Extension|method::T*>* #this) → dynamic {}
-static method Extension|get#method<T extends 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*, S extends 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*>(lowered final self::Class<self::Extension|get#genericMethod::T*>* #this) → <S extends self::B*>(S*) →* dynamic
-  return <S extends self::B*>(S* s) → dynamic => self::Extension|genericMethod<self::Extension|get#genericMethod::T*, S*>(#this, s);
+static final field dynamic field2 = self::Extension|method<self::A>(self::classA);
+static final field dynamic field3 = self::Extension|method<self::A>(self::classA);
+static final field dynamic field4 = self::Extension|method<self::B>(invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:64:29: Error: The argument type 'Class<A>' can't be assigned to the parameter type 'Class<B>'.
+ - 'Class' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+ - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+ - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+final field4 = Extension<B>(classA).method();
+                            ^" in self::classA as{TypeError,ForNonNullableByDefault} self::Class<self::B>);
+static final field dynamic field5 = self::Extension|genericMethod<self::A, self::A>(self::classA, self::a);
+static final field dynamic field6 = self::Extension|genericMethod<self::A, self::A>(self::classA, self::a);
+static final field dynamic field7 = self::Extension|genericMethod<self::A, self::B>(self::classA, invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:67:51: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+ - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+ - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+final field7 = Extension(classA).genericMethod<B>(a); // Expect bounds mismatch.
+                                                  ^" in self::a as{TypeError,ForNonNullableByDefault} self::B);
+static final field dynamic field8 = self::Extension|genericMethod<self::A, self::A>(self::classA, self::a);
+static final field dynamic field9 = self::Extension|genericMethod<self::A, self::A>(self::classA, self::a);
+static final field dynamic field10 = self::Extension|genericMethod<self::A, self::B>(self::classA, invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:72:43: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+ - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+ - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+    Extension<A>(classA).genericMethod<B>(a); // Expect bounds mismatch.
+                                          ^" in self::a as{TypeError,ForNonNullableByDefault} self::B);
+static final field dynamic field11 = self::Extension|genericMethod<self::B, self::A>(self::classB, self::a);
+static final field dynamic field12 = self::Extension|genericMethod<self::B, self::A>(self::classB, self::a);
+static final field dynamic field13 = self::Extension|genericMethod<self::B, self::B>(self::classB, invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:77:55: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+ - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+ - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+final field13 = Extension<B>(classB).genericMethod<B>(a);
+                                                      ^" in self::a as{TypeError,ForNonNullableByDefault} self::B);
+static final field dynamic field14 = self::Extension|method<self::B>(self::classB);
+static final field dynamic field15 = self::Extension|method<self::B>(self::classB);
+static final field dynamic field16 = self::Extension|method<self::A>(self::classB);
+static final field dynamic field17 = self::Extension|method<self::B>(self::classB);
+static final field dynamic field18 = self::Extension|genericMethod<self::B, self::A>(self::classB, self::a);
+static final field dynamic field19 = self::Extension|genericMethod<self::B, self::A>(self::classB, self::a);
+static final field dynamic field20 = self::Extension|genericMethod<self::B, self::B>(self::classB, invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:86:41: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+ - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+ - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+final field20 = classB.genericMethod<B>(a);
+                                        ^" in self::a as{TypeError,ForNonNullableByDefault} self::B);
+static final field dynamic field21 = self::Extension|genericMethod<self::B, self::A>(self::classB, self::a);
+static final field dynamic field22 = self::Extension|genericMethod<self::B, self::A>(self::classB, self::a);
+static final field dynamic field23 = self::Extension|genericMethod<self::B, self::B>(self::classB, invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:90:52: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+ - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+ - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+final field23 = Extension(classB).genericMethod<B>(a);
+                                                   ^" in self::a as{TypeError,ForNonNullableByDefault} self::B);
+static final field dynamic field24 = self::Extension|genericMethod<self::A, self::A>(self::classB, self::a);
+static final field dynamic field25 = self::Extension|genericMethod<self::A, self::A>(self::classB, self::a);
+static final field dynamic field26 = self::Extension|genericMethod<self::A, self::B>(self::classB, invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:96:43: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+ - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+ - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+    Extension<A>(classB).genericMethod<B>(a); // Expect bounds mismatch.
+                                          ^" in self::a as{TypeError,ForNonNullableByDefault} self::B);
+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, invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:101:55: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+ - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+ - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+final field29 = Extension<B>(classB).genericMethod<B>(a);
+                                                      ^" in self::a as{TypeError,ForNonNullableByDefault} self::B);
+static method Extension|method<T extends self::B>(lowered final self::Class<self::Extension|method::T> #this) → dynamic {}
+static method Extension|get#method<T extends 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, S extends 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>(lowered final self::Class<self::Extension|get#genericMethod::T> #this) → <S extends self::B>(S) → dynamic
+  return <S extends self::B>(S s) → dynamic => self::Extension|genericMethod<self::Extension|get#genericMethod::T, S>(#this, s);
 static method main() → dynamic {}
-static method test() → dynamic {
-  self::A* a;
-  self::Class<self::A*>* classA = new self::Class::•<self::A*>();
+static method test(self::A a) → dynamic {
+  self::Class<self::A> classA = new self::Class::•<self::A>();
+  self::Class<self::B> classB = new self::Class::•<self::B>();
   invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:24:10: Error: The method 'method' isn't defined for the class 'Class<A>'.
  - 'Class' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 Try correcting the name to the name of an existing method, or defining a method named 'method'.
   classA.method(); // Expect method not found.
          ^^^^^^" in classA{<unresolved>}.method();
-  self::Extension|method<self::A*>(classA);
-  self::Extension|method<self::A*>(classA);
-  self::Extension|method<self::B*>(classA as{TypeError} self::Class<self::B*>*);
-  self::Extension|genericMethod<self::A*, self::A*>(classA, a);
-  self::Extension|genericMethod<self::A*, self::A*>(classA, a);
-  self::Extension|genericMethod<self::A*, self::B*>(classA, a as{TypeError} self::B*);
-  self::Extension|genericMethod<self::A*, self::A*>(classA, a);
-  self::Extension|genericMethod<self::A*, self::A*>(classA, a);
-  self::Extension|genericMethod<self::A*, self::B*>(classA, a as{TypeError} self::B*);
-  self::Extension|genericMethod<self::B*, self::A*>(classA as{TypeError} self::Class<self::B*>*, a);
-  self::Extension|genericMethod<self::B*, self::A*>(classA as{TypeError} self::Class<self::B*>*, a);
-  self::Extension|genericMethod<self::B*, self::B*>(classA as{TypeError} self::Class<self::B*>*, a as{TypeError} self::B*);
-  self::Class<self::B*>* classB = new self::Class::•<self::B*>();
-  self::Extension|method<self::B*>(classB);
-  self::Extension|method<self::B*>(classB);
-  self::Extension|method<self::A*>(classB);
-  self::Extension|method<self::B*>(classB);
-  self::Extension|genericMethod<self::B*, self::A*>(classB, a);
-  self::Extension|genericMethod<self::B*, self::A*>(classB, a);
-  self::Extension|genericMethod<self::B*, self::B*>(classB, a as{TypeError} self::B*);
-  self::Extension|genericMethod<self::B*, self::A*>(classB, a);
-  self::Extension|genericMethod<self::B*, self::A*>(classB, a);
-  self::Extension|genericMethod<self::B*, self::B*>(classB, a as{TypeError} self::B*);
-  self::Extension|genericMethod<self::A*, self::A*>(classB, a);
-  self::Extension|genericMethod<self::A*, self::A*>(classB, a);
-  self::Extension|genericMethod<self::A*, self::B*>(classB, a as{TypeError} self::B*);
-  self::Extension|genericMethod<self::B*, self::A*>(classB, a);
-  self::Extension|genericMethod<self::B*, self::A*>(classB, a);
-  self::Extension|genericMethod<self::B*, self::B*>(classB, a as{TypeError} self::B*);
+  self::Extension|method<self::A>(classA);
+  self::Extension|method<self::A>(classA);
+  self::Extension|method<self::B>(classB);
+  self::Extension|genericMethod<self::A, self::A>(classA, a);
+  self::Extension|genericMethod<self::A, self::A>(classA, a);
+  self::Extension|genericMethod<self::A, self::B>(classA, invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:30:38: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+ - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+ - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+  Extension(classA).genericMethod<B>(a); // Expect bounds mismatch.
+                                     ^" in a as{TypeError,ForNonNullableByDefault} self::B);
+  self::Extension|genericMethod<self::A, self::A>(classA, a);
+  self::Extension|genericMethod<self::A, self::A>(classA, a);
+  self::Extension|genericMethod<self::A, self::B>(classA, invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:33:41: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+ - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+ - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+  Extension<A>(classA).genericMethod<B>(a); // Expect bounds mismatch.
+                                        ^" in a as{TypeError,ForNonNullableByDefault} self::B);
+  self::Extension|genericMethod<self::B, self::A>(classB, a);
+  self::Extension|genericMethod<self::B, self::A>(classB, a);
+  self::Extension|genericMethod<self::B, self::B>(classB, invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:36:41: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+ - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+ - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+  Extension<B>(classB).genericMethod<B>(a);
+                                        ^" in a as{TypeError,ForNonNullableByDefault} self::B);
+  self::Extension|method<self::B>(classB);
+  self::Extension|method<self::B>(classB);
+  self::Extension|method<self::A>(classB);
+  self::Extension|method<self::B>(classB);
+  self::Extension|genericMethod<self::B, self::A>(classB, a);
+  self::Extension|genericMethod<self::B, self::A>(classB, a);
+  self::Extension|genericMethod<self::B, self::B>(classB, invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:45:27: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+ - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+ - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+  classB.genericMethod<B>(a);
+                          ^" in a as{TypeError,ForNonNullableByDefault} self::B);
+  self::Extension|genericMethod<self::B, self::A>(classB, a);
+  self::Extension|genericMethod<self::B, self::A>(classB, a);
+  self::Extension|genericMethod<self::B, self::B>(classB, invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:48:38: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+ - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+ - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+  Extension(classB).genericMethod<B>(a);
+                                     ^" in a as{TypeError,ForNonNullableByDefault} self::B);
+  self::Extension|genericMethod<self::A, self::A>(classB, a);
+  self::Extension|genericMethod<self::A, self::A>(classB, a);
+  self::Extension|genericMethod<self::A, self::B>(classB, invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:51:41: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+ - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+ - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+  Extension<A>(classB).genericMethod<B>(a); // Expect bounds mismatch.
+                                        ^" in a as{TypeError,ForNonNullableByDefault} self::B);
+  self::Extension|genericMethod<self::B, self::A>(classB, a);
+  self::Extension|genericMethod<self::B, self::A>(classB, a);
+  self::Extension|genericMethod<self::B, self::B>(classB, invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:54:41: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+ - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+ - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+  Extension<B>(classB).genericMethod<B>(a);
+                                        ^" in a as{TypeError,ForNonNullableByDefault} self::B);
 }
-static method /* from org-dartlang-testcase:///check_bounds_lib.dart */ testInPart() → dynamic {
-  self::A* a;
-  self::Class<self::A*>* classA = new self::Class::•<self::A*>();
+static method /* from org-dartlang-testcase:///check_bounds_lib.dart */ testInPart(self::A a) → dynamic {
+  self::Class<self::A> classA = new self::Class::•<self::A>();
+  self::Class<self::B> classB = new self::Class::•<self::B>();
   invalid-expression "pkg/front_end/testcases/extensions/check_bounds_lib.dart:11:10: Error: The method 'method' isn't defined for the class 'Class<A>'.
  - 'Class' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 Try correcting the name to the name of an existing method, or defining a method named 'method'.
   classA.method();
          ^^^^^^" in classA{<unresolved>}.method();
-  self::Extension|method<self::A*>(classA);
-  self::Extension|method<self::A*>(classA);
-  self::Extension|method<self::B*>(classA as{TypeError} self::Class<self::B*>*);
-  self::Extension|genericMethod<self::A*, self::A*>(classA, a);
-  self::Extension|genericMethod<self::A*, self::A*>(classA, a);
-  self::Extension|genericMethod<self::A*, self::B*>(classA, a as{TypeError} self::B*);
-  self::Extension|genericMethod<self::A*, self::A*>(classA, a);
-  self::Extension|genericMethod<self::A*, self::A*>(classA, a);
-  self::Extension|genericMethod<self::A*, self::B*>(classA, a as{TypeError} self::B*);
-  self::Extension|genericMethod<self::B*, self::A*>(classA as{TypeError} self::Class<self::B*>*, a);
-  self::Extension|genericMethod<self::B*, self::A*>(classA as{TypeError} self::Class<self::B*>*, a);
-  self::Extension|genericMethod<self::B*, self::B*>(classA as{TypeError} self::Class<self::B*>*, a as{TypeError} self::B*);
-  self::Class<self::B*>* classB = new self::Class::•<self::B*>();
-  self::Extension|method<self::B*>(classB);
-  self::Extension|method<self::B*>(classB);
-  self::Extension|method<self::A*>(classB);
-  self::Extension|method<self::B*>(classB);
-  self::Extension|genericMethod<self::B*, self::A*>(classB, a);
-  self::Extension|genericMethod<self::B*, self::A*>(classB, a);
-  self::Extension|genericMethod<self::B*, self::B*>(classB, a as{TypeError} self::B*);
-  self::Extension|genericMethod<self::B*, self::A*>(classB, a);
-  self::Extension|genericMethod<self::B*, self::A*>(classB, a);
-  self::Extension|genericMethod<self::B*, self::B*>(classB, a as{TypeError} self::B*);
-  self::Extension|genericMethod<self::A*, self::A*>(classB, a);
-  self::Extension|genericMethod<self::A*, self::A*>(classB, a);
-  self::Extension|genericMethod<self::A*, self::B*>(classB, a as{TypeError} self::B*);
-  self::Extension|genericMethod<self::B*, self::A*>(classB, a);
-  self::Extension|genericMethod<self::B*, self::A*>(classB, a);
-  self::Extension|genericMethod<self::B*, self::B*>(classB, a as{TypeError} self::B*);
+  self::Extension|method<self::A>(classA);
+  self::Extension|method<self::A>(classA);
+  self::Extension|method<self::B>(classB);
+  self::Extension|genericMethod<self::A, self::A>(classA, a);
+  self::Extension|genericMethod<self::A, self::A>(classA, a);
+  self::Extension|genericMethod<self::A, self::B>(classA, invalid-expression "pkg/front_end/testcases/extensions/check_bounds_lib.dart:17:38: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+ - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+ - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+  Extension(classA).genericMethod<B>(a); // Expect bounds mismatch.
+                                     ^" in a as{TypeError,ForNonNullableByDefault} self::B);
+  self::Extension|genericMethod<self::A, self::A>(classA, a);
+  self::Extension|genericMethod<self::A, self::A>(classA, a);
+  self::Extension|genericMethod<self::A, self::B>(classA, invalid-expression "pkg/front_end/testcases/extensions/check_bounds_lib.dart:20:41: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+ - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+ - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+  Extension<A>(classA).genericMethod<B>(a); // Expect bounds mismatch.
+                                        ^" in a as{TypeError,ForNonNullableByDefault} self::B);
+  self::Extension|genericMethod<self::B, self::A>(classB, a);
+  self::Extension|genericMethod<self::B, self::A>(classB, a);
+  self::Extension|genericMethod<self::B, self::B>(classB, invalid-expression "pkg/front_end/testcases/extensions/check_bounds_lib.dart:23:41: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+ - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+ - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+  Extension<B>(classB).genericMethod<B>(a);
+                                        ^" in a as{TypeError,ForNonNullableByDefault} self::B);
+  self::Extension|method<self::B>(classB);
+  self::Extension|method<self::B>(classB);
+  self::Extension|method<self::A>(classB);
+  self::Extension|method<self::B>(classB);
+  self::Extension|genericMethod<self::B, self::A>(classB, a);
+  self::Extension|genericMethod<self::B, self::A>(classB, a);
+  self::Extension|genericMethod<self::B, self::B>(classB, invalid-expression "pkg/front_end/testcases/extensions/check_bounds_lib.dart:32:27: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+ - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+ - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+  classB.genericMethod<B>(a);
+                          ^" in a as{TypeError,ForNonNullableByDefault} self::B);
+  self::Extension|genericMethod<self::B, self::A>(classB, a);
+  self::Extension|genericMethod<self::B, self::A>(classB, a);
+  self::Extension|genericMethod<self::B, self::B>(classB, invalid-expression "pkg/front_end/testcases/extensions/check_bounds_lib.dart:35:38: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+ - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+ - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+  Extension(classB).genericMethod<B>(a);
+                                     ^" in a as{TypeError,ForNonNullableByDefault} self::B);
+  self::Extension|genericMethod<self::A, self::A>(classB, a);
+  self::Extension|genericMethod<self::A, self::A>(classB, a);
+  self::Extension|genericMethod<self::A, self::B>(classB, invalid-expression "pkg/front_end/testcases/extensions/check_bounds_lib.dart:38:41: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+ - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+ - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+  Extension<A>(classB).genericMethod<B>(a); // Expect bounds mismatch.
+                                        ^" in a as{TypeError,ForNonNullableByDefault} self::B);
+  self::Extension|genericMethod<self::B, self::A>(classB, a);
+  self::Extension|genericMethod<self::B, self::A>(classB, a);
+  self::Extension|genericMethod<self::B, self::B>(classB, invalid-expression "pkg/front_end/testcases/extensions/check_bounds_lib.dart:41:41: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+ - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+ - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+  Extension<B>(classB).genericMethod<B>(a);
+                                        ^" in a as{TypeError,ForNonNullableByDefault} self::B);
 }
diff --git a/pkg/front_end/testcases/extensions/check_bounds.dart.weak.outline.expect b/pkg/front_end/testcases/extensions/check_bounds.dart.weak.outline.expect
index 22f598c..9a7437d 100644
--- a/pkg/front_end/testcases/extensions/check_bounds.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extensions/check_bounds.dart.weak.outline.expect
@@ -1,48 +1,29 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 part check_bounds_lib.dart;
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
 }
-class Class<T extends self::A*> extends core::Object {
-  synthetic constructor •() → self::Class<self::Class::T*>*
+class Class<T extends self::A> extends core::Object {
+  synthetic constructor •() → self::Class<self::Class::T>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension Extension<T extends self::B*> on self::Class<T*>* {
+extension Extension<T extends self::B> on self::Class<T> {
   method method = self::Extension|method;
   tearoff method = self::Extension|get#method;
   method genericMethod = self::Extension|genericMethod;
   tearoff genericMethod = self::Extension|get#genericMethod;
 }
-static final field self::A* a;
-static final field self::Class<self::A*>* classA;
+static final field self::A a;
+static final field self::Class<self::A> classA;
+static final field self::Class<self::B> classB;
 static final field dynamic field1;
 static final field dynamic field2;
 static final field dynamic field3;
@@ -56,7 +37,6 @@
 static final field dynamic field11;
 static final field dynamic field12;
 static final field dynamic field13;
-static final field self::Class<self::B*>* classB;
 static final field dynamic field14;
 static final field dynamic field15;
 static final field dynamic field16;
@@ -73,17 +53,17 @@
 static final field dynamic field27;
 static final field dynamic field28;
 static final field dynamic field29;
-static method Extension|method<T extends self::B*>(lowered final self::Class<self::Extension|method::T*>* #this) → dynamic
+static method Extension|method<T extends self::B>(lowered final self::Class<self::Extension|method::T> #this) → dynamic
   ;
-static method Extension|get#method<T extends 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*, S extends self::B*>(lowered final self::Class<self::Extension|genericMethod::T*>* #this, self::Extension|genericMethod::S* s) → dynamic
+static method Extension|get#method<T extends 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, S extends 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*>(lowered final self::Class<self::Extension|get#genericMethod::T*>* #this) → <S extends self::B*>(S*) →* dynamic
-  return <S extends self::B*>(S* s) → dynamic => self::Extension|genericMethod<self::Extension|get#genericMethod::T*, S*>(#this, s);
+static method Extension|get#genericMethod<T extends self::B>(lowered final self::Class<self::Extension|get#genericMethod::T> #this) → <S extends self::B>(S) → dynamic
+  return <S extends self::B>(S s) → dynamic => self::Extension|genericMethod<self::Extension|get#genericMethod::T, S>(#this, s);
 static method main() → dynamic
   ;
-static method test() → dynamic
+static method test(self::A a) → dynamic
   ;
-static method /* from org-dartlang-testcase:///check_bounds_lib.dart */ testInPart() → dynamic
+static method /* from org-dartlang-testcase:///check_bounds_lib.dart */ testInPart(self::A a) → dynamic
   ;
diff --git a/pkg/front_end/testcases/extensions/check_bounds.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/check_bounds.dart.weak.transformed.expect
index 0e8aa01..530df36 100644
--- a/pkg/front_end/testcases/extensions/check_bounds.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/check_bounds.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -69,6 +69,12 @@
 //   genericMethod<S extends B>(S s) {}
 //                 ^
 //
+// pkg/front_end/testcases/extensions/check_bounds.dart:30:38: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//   Extension(classA).genericMethod<B>(a); // Expect bounds mismatch.
+//                                      ^
+//
 // pkg/front_end/testcases/extensions/check_bounds.dart:30:3: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
@@ -119,6 +125,12 @@
 //   genericMethod<S extends B>(S s) {}
 //                 ^
 //
+// pkg/front_end/testcases/extensions/check_bounds.dart:33:41: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//   Extension<A>(classA).genericMethod<B>(a); // Expect bounds mismatch.
+//                                         ^
+//
 // pkg/front_end/testcases/extensions/check_bounds.dart:33:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
@@ -133,7 +145,7 @@
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
-//   Extension<B>(classA).genericMethod(a); // Expect bounds mismatch.
+//   Extension<B>(classB).genericMethod(a); // Expect bounds mismatch.
 //                        ^
 // pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
 //   genericMethod<S extends B>(S s) {}
@@ -143,13 +155,19 @@
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try changing type arguments so that they conform to the bounds.
-//   Extension<B>(classA).genericMethod<A>(a); // Expect bounds mismatch.
+//   Extension<B>(classB).genericMethod<A>(a); // Expect bounds mismatch.
 //                        ^
 // pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
 //   genericMethod<S extends B>(S s) {}
 //                 ^
 //
-// pkg/front_end/testcases/extensions/check_bounds.dart:41:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|method'.
+// pkg/front_end/testcases/extensions/check_bounds.dart:36:41: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//   Extension<B>(classB).genericMethod<B>(a);
+//                                         ^
+//
+// pkg/front_end/testcases/extensions/check_bounds.dart:40:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|method'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try changing type arguments so that they conform to the bounds.
@@ -159,7 +177,7 @@
 // extension Extension<T extends B> on Class<T> {
 //                     ^
 //
-// pkg/front_end/testcases/extensions/check_bounds.dart:44:10: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds.dart:43:10: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
@@ -169,7 +187,7 @@
 //   genericMethod<S extends B>(S s) {}
 //                 ^
 //
-// pkg/front_end/testcases/extensions/check_bounds.dart:45:10: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds.dart:44:10: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try changing type arguments so that they conform to the bounds.
@@ -179,7 +197,13 @@
 //   genericMethod<S extends B>(S s) {}
 //                 ^
 //
-// pkg/front_end/testcases/extensions/check_bounds.dart:47:21: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds.dart:45:27: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//   classB.genericMethod<B>(a);
+//                           ^
+//
+// pkg/front_end/testcases/extensions/check_bounds.dart:46:21: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
@@ -189,7 +213,7 @@
 //   genericMethod<S extends B>(S s) {}
 //                 ^
 //
-// pkg/front_end/testcases/extensions/check_bounds.dart:48:21: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds.dart:47:21: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try changing type arguments so that they conform to the bounds.
@@ -199,7 +223,13 @@
 //   genericMethod<S extends B>(S s) {}
 //                 ^
 //
-// pkg/front_end/testcases/extensions/check_bounds.dart:50:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds.dart:48:38: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//   Extension(classB).genericMethod<B>(a);
+//                                      ^
+//
+// pkg/front_end/testcases/extensions/check_bounds.dart:49:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try changing type arguments so that they conform to the bounds.
@@ -209,7 +239,7 @@
 // extension Extension<T extends B> on Class<T> {
 //                     ^
 //
-// pkg/front_end/testcases/extensions/check_bounds.dart:50:3: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds.dart:49:3: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
@@ -219,7 +249,7 @@
 //   genericMethod<S extends B>(S s) {}
 //                 ^
 //
-// pkg/front_end/testcases/extensions/check_bounds.dart:51:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds.dart:50:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try changing type arguments so that they conform to the bounds.
@@ -229,7 +259,7 @@
 // extension Extension<T extends B> on Class<T> {
 //                     ^
 //
-// pkg/front_end/testcases/extensions/check_bounds.dart:51:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds.dart:50:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try changing type arguments so that they conform to the bounds.
@@ -239,7 +269,13 @@
 //   genericMethod<S extends B>(S s) {}
 //                 ^
 //
-// pkg/front_end/testcases/extensions/check_bounds.dart:52:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds.dart:51:41: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//   Extension<A>(classB).genericMethod<B>(a); // Expect bounds mismatch.
+//                                         ^
+//
+// pkg/front_end/testcases/extensions/check_bounds.dart:51:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try changing type arguments so that they conform to the bounds.
@@ -249,7 +285,7 @@
 // extension Extension<T extends B> on Class<T> {
 //                     ^
 //
-// pkg/front_end/testcases/extensions/check_bounds.dart:53:24: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds.dart:52:24: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
@@ -259,7 +295,7 @@
 //   genericMethod<S extends B>(S s) {}
 //                 ^
 //
-// pkg/front_end/testcases/extensions/check_bounds.dart:54:24: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds.dart:53:24: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try changing type arguments so that they conform to the bounds.
@@ -269,14 +305,20 @@
 //   genericMethod<S extends B>(S s) {}
 //                 ^
 //
-// pkg/front_end/testcases/extensions/check_bounds.dart:60:23: Error: The method 'method' isn't defined for the class 'Class<A>'.
+// pkg/front_end/testcases/extensions/check_bounds.dart:54:41: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//   Extension<B>(classB).genericMethod<B>(a);
+//                                         ^
+//
+// pkg/front_end/testcases/extensions/check_bounds.dart:61:23: Error: The method 'method' isn't defined for the class 'Class<A>'.
 //  - 'Class' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try correcting the name to the name of an existing method, or defining a method named 'method'.
 // final field1 = classA.method(); // Expect method not found.
 //                       ^^^^^^
 //
-// pkg/front_end/testcases/extensions/check_bounds.dart:61:16: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|method'.
+// pkg/front_end/testcases/extensions/check_bounds.dart:62:16: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|method'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
@@ -286,7 +328,7 @@
 // extension Extension<T extends B> on Class<T> {
 //                     ^
 //
-// pkg/front_end/testcases/extensions/check_bounds.dart:62:16: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|method'.
+// pkg/front_end/testcases/extensions/check_bounds.dart:63:16: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|method'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try changing type arguments so that they conform to the bounds.
@@ -296,41 +338,28 @@
 // extension Extension<T extends B> on Class<T> {
 //                     ^
 //
-// pkg/front_end/testcases/extensions/check_bounds.dart:64:16: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds.dart:64:29: Error: The argument type 'Class<A>' can't be assigned to the parameter type 'Class<B>'.
+//  - 'Class' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
-// Try specifying type arguments explicitly so that they conform to the bounds.
-// final field5 = Extension(classA).genericMethod(a); // Expect bounds mismatch.
-//                ^
-// pkg/front_end/testcases/extensions/check_bounds.dart:13:21: Context: This is the type variable whose bound isn't conformed to.
-// extension Extension<T extends B> on Class<T> {
-//                     ^
-//
-// pkg/front_end/testcases/extensions/check_bounds.dart:64:16: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
-//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
-//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
-// Try specifying type arguments explicitly so that they conform to the bounds.
-// final field5 = Extension(classA).genericMethod(a); // Expect bounds mismatch.
-//                ^
-// pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
-//   genericMethod<S extends B>(S s) {}
-//                 ^
+// final field4 = Extension<B>(classA).method();
+//                             ^
 //
 // pkg/front_end/testcases/extensions/check_bounds.dart:65:16: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
-// final field6 = Extension(classA).genericMethod<A>(a); // Expect bounds mismatch.
+// final field5 = Extension(classA).genericMethod(a); // Expect bounds mismatch.
 //                ^
 // pkg/front_end/testcases/extensions/check_bounds.dart:13:21: Context: This is the type variable whose bound isn't conformed to.
 // extension Extension<T extends B> on Class<T> {
 //                     ^
 //
-// pkg/front_end/testcases/extensions/check_bounds.dart:65:16: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds.dart:65:16: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
-// Try changing type arguments so that they conform to the bounds.
-// final field6 = Extension(classA).genericMethod<A>(a); // Expect bounds mismatch.
+// Try specifying type arguments explicitly so that they conform to the bounds.
+// final field5 = Extension(classA).genericMethod(a); // Expect bounds mismatch.
 //                ^
 // pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
 //   genericMethod<S extends B>(S s) {}
@@ -340,13 +369,39 @@
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
+// final field6 = Extension(classA).genericMethod<A>(a); // Expect bounds mismatch.
+//                ^
+// pkg/front_end/testcases/extensions/check_bounds.dart:13:21: Context: This is the type variable whose bound isn't conformed to.
+// extension Extension<T extends B> on Class<T> {
+//                     ^
+//
+// pkg/front_end/testcases/extensions/check_bounds.dart:66:16: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// Try changing type arguments so that they conform to the bounds.
+// final field6 = Extension(classA).genericMethod<A>(a); // Expect bounds mismatch.
+//                ^
+// pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
+//   genericMethod<S extends B>(S s) {}
+//                 ^
+//
+// pkg/front_end/testcases/extensions/check_bounds.dart:67:51: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// final field7 = Extension(classA).genericMethod<B>(a); // Expect bounds mismatch.
+//                                                   ^
+//
+// pkg/front_end/testcases/extensions/check_bounds.dart:67:16: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// Try specifying type arguments explicitly so that they conform to the bounds.
 // final field7 = Extension(classA).genericMethod<B>(a); // Expect bounds mismatch.
 //                ^
 // pkg/front_end/testcases/extensions/check_bounds.dart:13:21: Context: This is the type variable whose bound isn't conformed to.
 // extension Extension<T extends B> on Class<T> {
 //                     ^
 //
-// pkg/front_end/testcases/extensions/check_bounds.dart:67:16: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds.dart:68:16: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try changing type arguments so that they conform to the bounds.
@@ -356,7 +411,7 @@
 // extension Extension<T extends B> on Class<T> {
 //                     ^
 //
-// pkg/front_end/testcases/extensions/check_bounds.dart:67:16: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds.dart:68:16: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
@@ -366,7 +421,7 @@
 //   genericMethod<S extends B>(S s) {}
 //                 ^
 //
-// pkg/front_end/testcases/extensions/check_bounds.dart:69:5: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds.dart:70:5: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try changing type arguments so that they conform to the bounds.
@@ -376,7 +431,7 @@
 // extension Extension<T extends B> on Class<T> {
 //                     ^
 //
-// pkg/front_end/testcases/extensions/check_bounds.dart:69:5: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds.dart:70:5: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try changing type arguments so that they conform to the bounds.
@@ -386,7 +441,13 @@
 //   genericMethod<S extends B>(S s) {}
 //                 ^
 //
-// pkg/front_end/testcases/extensions/check_bounds.dart:71:5: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds.dart:72:43: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//     Extension<A>(classA).genericMethod<B>(a); // Expect bounds mismatch.
+//                                           ^
+//
+// pkg/front_end/testcases/extensions/check_bounds.dart:72:5: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try changing type arguments so that they conform to the bounds.
@@ -396,26 +457,32 @@
 // extension Extension<T extends B> on Class<T> {
 //                     ^
 //
-// pkg/front_end/testcases/extensions/check_bounds.dart:73:26: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds.dart:74:26: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
-//     Extension<B>(classA).genericMethod(a); // Expect bounds mismatch.
+//     Extension<B>(classB).genericMethod(a); // Expect bounds mismatch.
 //                          ^
 // pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
 //   genericMethod<S extends B>(S s) {}
 //                 ^
 //
-// pkg/front_end/testcases/extensions/check_bounds.dart:75:26: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds.dart:76:26: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try changing type arguments so that they conform to the bounds.
-//     Extension<B>(classA).genericMethod<A>(a); // Expect bounds mismatch.
+//     Extension<B>(classB).genericMethod<A>(a); // Expect bounds mismatch.
 //                          ^
 // pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
 //   genericMethod<S extends B>(S s) {}
 //                 ^
 //
+// pkg/front_end/testcases/extensions/check_bounds.dart:77:55: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// final field13 = Extension<B>(classB).genericMethod<B>(a);
+//                                                       ^
+//
 // pkg/front_end/testcases/extensions/check_bounds.dart:81:17: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|method'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
@@ -446,6 +513,12 @@
 //   genericMethod<S extends B>(S s) {}
 //                 ^
 //
+// pkg/front_end/testcases/extensions/check_bounds.dart:86:41: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// final field20 = classB.genericMethod<B>(a);
+//                                         ^
+//
 // pkg/front_end/testcases/extensions/check_bounds.dart:87:35: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
@@ -466,6 +539,12 @@
 //   genericMethod<S extends B>(S s) {}
 //                 ^
 //
+// pkg/front_end/testcases/extensions/check_bounds.dart:90:52: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// final field23 = Extension(classB).genericMethod<B>(a);
+//                                                    ^
+//
 // pkg/front_end/testcases/extensions/check_bounds.dart:92:5: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
@@ -506,6 +585,12 @@
 //   genericMethod<S extends B>(S s) {}
 //                 ^
 //
+// pkg/front_end/testcases/extensions/check_bounds.dart:96:43: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//     Extension<A>(classB).genericMethod<B>(a); // Expect bounds mismatch.
+//                                           ^
+//
 // pkg/front_end/testcases/extensions/check_bounds.dart:96:5: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
@@ -536,6 +621,12 @@
 //   genericMethod<S extends B>(S s) {}
 //                 ^
 //
+// pkg/front_end/testcases/extensions/check_bounds.dart:101:55: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+// final field29 = Extension<B>(classB).genericMethod<B>(a);
+//                                                       ^
+//
 // pkg/front_end/testcases/extensions/check_bounds_lib.dart:11:10: Error: The method 'method' isn't defined for the class 'Class<A>'.
 //  - 'Class' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
@@ -603,6 +694,12 @@
 //   genericMethod<S extends B>(S s) {}
 //                 ^
 //
+// pkg/front_end/testcases/extensions/check_bounds_lib.dart:17:38: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//   Extension(classA).genericMethod<B>(a); // Expect bounds mismatch.
+//                                      ^
+//
 // pkg/front_end/testcases/extensions/check_bounds_lib.dart:17:3: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
@@ -653,6 +750,12 @@
 //   genericMethod<S extends B>(S s) {}
 //                 ^
 //
+// pkg/front_end/testcases/extensions/check_bounds_lib.dart:20:41: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//   Extension<A>(classA).genericMethod<B>(a); // Expect bounds mismatch.
+//                                         ^
+//
 // pkg/front_end/testcases/extensions/check_bounds_lib.dart:20:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
@@ -667,7 +770,7 @@
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
-//   Extension<B>(classA).genericMethod(a); // Expect bounds mismatch.
+//   Extension<B>(classB).genericMethod(a); // Expect bounds mismatch.
 //                        ^
 // pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
 //   genericMethod<S extends B>(S s) {}
@@ -677,13 +780,19 @@
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try changing type arguments so that they conform to the bounds.
-//   Extension<B>(classA).genericMethod<A>(a); // Expect bounds mismatch.
+//   Extension<B>(classB).genericMethod<A>(a); // Expect bounds mismatch.
 //                        ^
 // pkg/front_end/testcases/extensions/check_bounds.dart:15:17: Context: This is the type variable whose bound isn't conformed to.
 //   genericMethod<S extends B>(S s) {}
 //                 ^
 //
-// pkg/front_end/testcases/extensions/check_bounds_lib.dart:28:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|method'.
+// pkg/front_end/testcases/extensions/check_bounds_lib.dart:23:41: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//   Extension<B>(classB).genericMethod<B>(a);
+//                                         ^
+//
+// pkg/front_end/testcases/extensions/check_bounds_lib.dart:27:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|method'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try changing type arguments so that they conform to the bounds.
@@ -693,7 +802,7 @@
 // extension Extension<T extends B> on Class<T> {
 //                     ^
 //
-// pkg/front_end/testcases/extensions/check_bounds_lib.dart:31:10: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds_lib.dart:30:10: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
@@ -703,7 +812,7 @@
 //   genericMethod<S extends B>(S s) {}
 //                 ^
 //
-// pkg/front_end/testcases/extensions/check_bounds_lib.dart:32:10: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds_lib.dart:31:10: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try changing type arguments so that they conform to the bounds.
@@ -713,7 +822,13 @@
 //   genericMethod<S extends B>(S s) {}
 //                 ^
 //
-// pkg/front_end/testcases/extensions/check_bounds_lib.dart:34:21: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds_lib.dart:32:27: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//   classB.genericMethod<B>(a);
+//                           ^
+//
+// pkg/front_end/testcases/extensions/check_bounds_lib.dart:33:21: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
@@ -723,7 +838,7 @@
 //   genericMethod<S extends B>(S s) {}
 //                 ^
 //
-// pkg/front_end/testcases/extensions/check_bounds_lib.dart:35:21: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds_lib.dart:34:21: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try changing type arguments so that they conform to the bounds.
@@ -733,7 +848,13 @@
 //   genericMethod<S extends B>(S s) {}
 //                 ^
 //
-// pkg/front_end/testcases/extensions/check_bounds_lib.dart:37:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds_lib.dart:35:38: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//   Extension(classB).genericMethod<B>(a);
+//                                      ^
+//
+// pkg/front_end/testcases/extensions/check_bounds_lib.dart:36:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try changing type arguments so that they conform to the bounds.
@@ -743,7 +864,7 @@
 // extension Extension<T extends B> on Class<T> {
 //                     ^
 //
-// pkg/front_end/testcases/extensions/check_bounds_lib.dart:37:3: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds_lib.dart:36:3: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
@@ -753,7 +874,7 @@
 //   genericMethod<S extends B>(S s) {}
 //                 ^
 //
-// pkg/front_end/testcases/extensions/check_bounds_lib.dart:38:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds_lib.dart:37:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try changing type arguments so that they conform to the bounds.
@@ -763,7 +884,7 @@
 // extension Extension<T extends B> on Class<T> {
 //                     ^
 //
-// pkg/front_end/testcases/extensions/check_bounds_lib.dart:38:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds_lib.dart:37:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try changing type arguments so that they conform to the bounds.
@@ -773,7 +894,13 @@
 //   genericMethod<S extends B>(S s) {}
 //                 ^
 //
-// pkg/front_end/testcases/extensions/check_bounds_lib.dart:39:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds_lib.dart:38:41: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//   Extension<A>(classB).genericMethod<B>(a); // Expect bounds mismatch.
+//                                         ^
+//
+// pkg/front_end/testcases/extensions/check_bounds_lib.dart:38:3: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'T' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try changing type arguments so that they conform to the bounds.
@@ -783,7 +910,7 @@
 // extension Extension<T extends B> on Class<T> {
 //                     ^
 //
-// pkg/front_end/testcases/extensions/check_bounds_lib.dart:40:24: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds_lib.dart:39:24: Error: Inferred type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try specifying type arguments explicitly so that they conform to the bounds.
@@ -793,7 +920,7 @@
 //   genericMethod<S extends B>(S s) {}
 //                 ^
 //
-// pkg/front_end/testcases/extensions/check_bounds_lib.dart:41:24: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
+// pkg/front_end/testcases/extensions/check_bounds_lib.dart:40:24: Error: Type argument 'A' doesn't conform to the bound 'B' of the type variable 'S' on 'Extension|genericMethod'.
 //  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 //  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 // Try changing type arguments so that they conform to the bounds.
@@ -803,170 +930,243 @@
 //   genericMethod<S extends B>(S s) {}
 //                 ^
 //
+// pkg/front_end/testcases/extensions/check_bounds_lib.dart:41:41: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+//  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//  - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+//   Extension<B>(classB).genericMethod<B>(a);
+//                                         ^
+//
 import self as self;
 import "dart:core" as core;
 
 part check_bounds_lib.dart;
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends self::A {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super self::A::•()
     ;
 }
-class Class<T extends self::A*> extends core::Object {
-  synthetic constructor •() → self::Class<self::Class::T*>*
+class Class<T extends self::A> extends core::Object {
+  synthetic constructor •() → self::Class<self::Class::T>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension Extension<T extends self::B*> on self::Class<T*>* {
+extension Extension<T extends self::B> on self::Class<T> {
   method method = self::Extension|method;
   tearoff method = self::Extension|get#method;
   method genericMethod = self::Extension|genericMethod;
   tearoff genericMethod = self::Extension|get#genericMethod;
 }
-static final field self::A* a = new self::A::•();
-static final field self::Class<self::A*>* classA = new self::Class::•<self::A*>();
-static final field dynamic field1 = invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:60:23: Error: The method 'method' isn't defined for the class 'Class<A>'.
+static final field self::A a = new self::A::•();
+static final field self::Class<self::A> classA = new self::Class::•<self::A>();
+static final field self::Class<self::B> classB = new self::Class::•<self::B>();
+static final field dynamic field1 = invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:61:23: Error: The method 'method' isn't defined for the class 'Class<A>'.
  - 'Class' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 Try correcting the name to the name of an existing method, or defining a method named 'method'.
 final field1 = classA.method(); // Expect method not found.
                       ^^^^^^" in self::classA{<unresolved>}.method();
-static final field dynamic field2 = self::Extension|method<self::A*>(self::classA);
-static final field dynamic field3 = self::Extension|method<self::A*>(self::classA);
-static final field dynamic field4 = self::Extension|method<self::B*>(self::classA as{TypeError} self::Class<self::B*>*);
-static final field dynamic field5 = self::Extension|genericMethod<self::A*, self::A*>(self::classA, self::a);
-static final field dynamic field6 = self::Extension|genericMethod<self::A*, self::A*>(self::classA, self::a);
-static final field dynamic field7 = self::Extension|genericMethod<self::A*, self::B*>(self::classA, self::a as{TypeError} self::B*);
-static final field dynamic field8 = self::Extension|genericMethod<self::A*, self::A*>(self::classA, self::a);
-static final field dynamic field9 = self::Extension|genericMethod<self::A*, self::A*>(self::classA, self::a);
-static final field dynamic field10 = self::Extension|genericMethod<self::A*, self::B*>(self::classA, self::a as{TypeError} self::B*);
-static final field dynamic field11 = self::Extension|genericMethod<self::B*, self::A*>(self::classA as{TypeError} self::Class<self::B*>*, self::a);
-static final field dynamic field12 = self::Extension|genericMethod<self::B*, self::A*>(self::classA as{TypeError} self::Class<self::B*>*, self::a);
-static final field dynamic field13 = self::Extension|genericMethod<self::B*, self::B*>(self::classA as{TypeError} self::Class<self::B*>*, self::a as{TypeError} self::B*);
-static final field self::Class<self::B*>* classB = new self::Class::•<self::B*>();
-static final field dynamic field14 = self::Extension|method<self::B*>(self::classB);
-static final field dynamic field15 = self::Extension|method<self::B*>(self::classB);
-static final field dynamic field16 = self::Extension|method<self::A*>(self::classB);
-static final field dynamic field17 = self::Extension|method<self::B*>(self::classB);
-static final field dynamic field18 = self::Extension|genericMethod<self::B*, self::A*>(self::classB, self::a);
-static final field dynamic field19 = self::Extension|genericMethod<self::B*, self::A*>(self::classB, self::a);
-static final field dynamic field20 = self::Extension|genericMethod<self::B*, self::B*>(self::classB, self::a as{TypeError} self::B*);
-static final field dynamic field21 = self::Extension|genericMethod<self::B*, self::A*>(self::classB, self::a);
-static final field dynamic field22 = self::Extension|genericMethod<self::B*, self::A*>(self::classB, self::a);
-static final field dynamic field23 = self::Extension|genericMethod<self::B*, self::B*>(self::classB, self::a as{TypeError} self::B*);
-static final field dynamic field24 = self::Extension|genericMethod<self::A*, self::A*>(self::classB, self::a);
-static final field dynamic field25 = self::Extension|genericMethod<self::A*, self::A*>(self::classB, self::a);
-static final field dynamic field26 = self::Extension|genericMethod<self::A*, self::B*>(self::classB, self::a as{TypeError} self::B*);
-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*>(lowered final self::Class<self::Extension|method::T*>* #this) → dynamic {}
-static method Extension|get#method<T extends 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*, S extends 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*>(lowered final self::Class<self::Extension|get#genericMethod::T*>* #this) → <S extends self::B*>(S*) →* dynamic
-  return <S extends self::B*>(S* s) → dynamic => self::Extension|genericMethod<self::Extension|get#genericMethod::T*, S*>(#this, s);
+static final field dynamic field2 = self::Extension|method<self::A>(self::classA);
+static final field dynamic field3 = self::Extension|method<self::A>(self::classA);
+static final field dynamic field4 = self::Extension|method<self::B>(invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:64:29: Error: The argument type 'Class<A>' can't be assigned to the parameter type 'Class<B>'.
+ - 'Class' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+ - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+ - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+final field4 = Extension<B>(classA).method();
+                            ^" in self::classA as{TypeError,ForNonNullableByDefault} self::Class<self::B>);
+static final field dynamic field5 = self::Extension|genericMethod<self::A, self::A>(self::classA, self::a);
+static final field dynamic field6 = self::Extension|genericMethod<self::A, self::A>(self::classA, self::a);
+static final field dynamic field7 = self::Extension|genericMethod<self::A, self::B>(self::classA, invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:67:51: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+ - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+ - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+final field7 = Extension(classA).genericMethod<B>(a); // Expect bounds mismatch.
+                                                  ^" in self::a as{TypeError,ForNonNullableByDefault} self::B);
+static final field dynamic field8 = self::Extension|genericMethod<self::A, self::A>(self::classA, self::a);
+static final field dynamic field9 = self::Extension|genericMethod<self::A, self::A>(self::classA, self::a);
+static final field dynamic field10 = self::Extension|genericMethod<self::A, self::B>(self::classA, invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:72:43: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+ - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+ - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+    Extension<A>(classA).genericMethod<B>(a); // Expect bounds mismatch.
+                                          ^" in self::a as{TypeError,ForNonNullableByDefault} self::B);
+static final field dynamic field11 = self::Extension|genericMethod<self::B, self::A>(self::classB, self::a);
+static final field dynamic field12 = self::Extension|genericMethod<self::B, self::A>(self::classB, self::a);
+static final field dynamic field13 = self::Extension|genericMethod<self::B, self::B>(self::classB, invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:77:55: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+ - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+ - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+final field13 = Extension<B>(classB).genericMethod<B>(a);
+                                                      ^" in self::a as{TypeError,ForNonNullableByDefault} self::B);
+static final field dynamic field14 = self::Extension|method<self::B>(self::classB);
+static final field dynamic field15 = self::Extension|method<self::B>(self::classB);
+static final field dynamic field16 = self::Extension|method<self::A>(self::classB);
+static final field dynamic field17 = self::Extension|method<self::B>(self::classB);
+static final field dynamic field18 = self::Extension|genericMethod<self::B, self::A>(self::classB, self::a);
+static final field dynamic field19 = self::Extension|genericMethod<self::B, self::A>(self::classB, self::a);
+static final field dynamic field20 = self::Extension|genericMethod<self::B, self::B>(self::classB, invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:86:41: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+ - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+ - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+final field20 = classB.genericMethod<B>(a);
+                                        ^" in self::a as{TypeError,ForNonNullableByDefault} self::B);
+static final field dynamic field21 = self::Extension|genericMethod<self::B, self::A>(self::classB, self::a);
+static final field dynamic field22 = self::Extension|genericMethod<self::B, self::A>(self::classB, self::a);
+static final field dynamic field23 = self::Extension|genericMethod<self::B, self::B>(self::classB, invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:90:52: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+ - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+ - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+final field23 = Extension(classB).genericMethod<B>(a);
+                                                   ^" in self::a as{TypeError,ForNonNullableByDefault} self::B);
+static final field dynamic field24 = self::Extension|genericMethod<self::A, self::A>(self::classB, self::a);
+static final field dynamic field25 = self::Extension|genericMethod<self::A, self::A>(self::classB, self::a);
+static final field dynamic field26 = self::Extension|genericMethod<self::A, self::B>(self::classB, invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:96:43: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+ - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+ - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+    Extension<A>(classB).genericMethod<B>(a); // Expect bounds mismatch.
+                                          ^" in self::a as{TypeError,ForNonNullableByDefault} self::B);
+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, invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:101:55: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+ - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+ - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+final field29 = Extension<B>(classB).genericMethod<B>(a);
+                                                      ^" in self::a as{TypeError,ForNonNullableByDefault} self::B);
+static method Extension|method<T extends self::B>(lowered final self::Class<self::Extension|method::T> #this) → dynamic {}
+static method Extension|get#method<T extends 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, S extends 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>(lowered final self::Class<self::Extension|get#genericMethod::T> #this) → <S extends self::B>(S) → dynamic
+  return <S extends self::B>(S s) → dynamic => self::Extension|genericMethod<self::Extension|get#genericMethod::T, S>(#this, s);
 static method main() → dynamic {}
-static method test() → dynamic {
-  self::A* a;
-  self::Class<self::A*>* classA = new self::Class::•<self::A*>();
+static method test(self::A a) → dynamic {
+  self::Class<self::A> classA = new self::Class::•<self::A>();
+  self::Class<self::B> classB = new self::Class::•<self::B>();
   invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:24:10: Error: The method 'method' isn't defined for the class 'Class<A>'.
  - 'Class' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 Try correcting the name to the name of an existing method, or defining a method named 'method'.
   classA.method(); // Expect method not found.
          ^^^^^^" in classA{<unresolved>}.method();
-  self::Extension|method<self::A*>(classA);
-  self::Extension|method<self::A*>(classA);
-  self::Extension|method<self::B*>(classA as{TypeError} self::Class<self::B*>*);
-  self::Extension|genericMethod<self::A*, self::A*>(classA, a);
-  self::Extension|genericMethod<self::A*, self::A*>(classA, a);
-  self::Extension|genericMethod<self::A*, self::B*>(classA, a as{TypeError} self::B*);
-  self::Extension|genericMethod<self::A*, self::A*>(classA, a);
-  self::Extension|genericMethod<self::A*, self::A*>(classA, a);
-  self::Extension|genericMethod<self::A*, self::B*>(classA, a as{TypeError} self::B*);
-  self::Extension|genericMethod<self::B*, self::A*>(classA as{TypeError} self::Class<self::B*>*, a);
-  self::Extension|genericMethod<self::B*, self::A*>(classA as{TypeError} self::Class<self::B*>*, a);
-  self::Extension|genericMethod<self::B*, self::B*>(classA as{TypeError} self::Class<self::B*>*, a as{TypeError} self::B*);
-  self::Class<self::B*>* classB = new self::Class::•<self::B*>();
-  self::Extension|method<self::B*>(classB);
-  self::Extension|method<self::B*>(classB);
-  self::Extension|method<self::A*>(classB);
-  self::Extension|method<self::B*>(classB);
-  self::Extension|genericMethod<self::B*, self::A*>(classB, a);
-  self::Extension|genericMethod<self::B*, self::A*>(classB, a);
-  self::Extension|genericMethod<self::B*, self::B*>(classB, a as{TypeError} self::B*);
-  self::Extension|genericMethod<self::B*, self::A*>(classB, a);
-  self::Extension|genericMethod<self::B*, self::A*>(classB, a);
-  self::Extension|genericMethod<self::B*, self::B*>(classB, a as{TypeError} self::B*);
-  self::Extension|genericMethod<self::A*, self::A*>(classB, a);
-  self::Extension|genericMethod<self::A*, self::A*>(classB, a);
-  self::Extension|genericMethod<self::A*, self::B*>(classB, a as{TypeError} self::B*);
-  self::Extension|genericMethod<self::B*, self::A*>(classB, a);
-  self::Extension|genericMethod<self::B*, self::A*>(classB, a);
-  self::Extension|genericMethod<self::B*, self::B*>(classB, a as{TypeError} self::B*);
+  self::Extension|method<self::A>(classA);
+  self::Extension|method<self::A>(classA);
+  self::Extension|method<self::B>(classB);
+  self::Extension|genericMethod<self::A, self::A>(classA, a);
+  self::Extension|genericMethod<self::A, self::A>(classA, a);
+  self::Extension|genericMethod<self::A, self::B>(classA, invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:30:38: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+ - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+ - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+  Extension(classA).genericMethod<B>(a); // Expect bounds mismatch.
+                                     ^" in a as{TypeError,ForNonNullableByDefault} self::B);
+  self::Extension|genericMethod<self::A, self::A>(classA, a);
+  self::Extension|genericMethod<self::A, self::A>(classA, a);
+  self::Extension|genericMethod<self::A, self::B>(classA, invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:33:41: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+ - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+ - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+  Extension<A>(classA).genericMethod<B>(a); // Expect bounds mismatch.
+                                        ^" in a as{TypeError,ForNonNullableByDefault} self::B);
+  self::Extension|genericMethod<self::B, self::A>(classB, a);
+  self::Extension|genericMethod<self::B, self::A>(classB, a);
+  self::Extension|genericMethod<self::B, self::B>(classB, invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:36:41: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+ - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+ - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+  Extension<B>(classB).genericMethod<B>(a);
+                                        ^" in a as{TypeError,ForNonNullableByDefault} self::B);
+  self::Extension|method<self::B>(classB);
+  self::Extension|method<self::B>(classB);
+  self::Extension|method<self::A>(classB);
+  self::Extension|method<self::B>(classB);
+  self::Extension|genericMethod<self::B, self::A>(classB, a);
+  self::Extension|genericMethod<self::B, self::A>(classB, a);
+  self::Extension|genericMethod<self::B, self::B>(classB, invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:45:27: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+ - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+ - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+  classB.genericMethod<B>(a);
+                          ^" in a as{TypeError,ForNonNullableByDefault} self::B);
+  self::Extension|genericMethod<self::B, self::A>(classB, a);
+  self::Extension|genericMethod<self::B, self::A>(classB, a);
+  self::Extension|genericMethod<self::B, self::B>(classB, invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:48:38: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+ - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+ - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+  Extension(classB).genericMethod<B>(a);
+                                     ^" in a as{TypeError,ForNonNullableByDefault} self::B);
+  self::Extension|genericMethod<self::A, self::A>(classB, a);
+  self::Extension|genericMethod<self::A, self::A>(classB, a);
+  self::Extension|genericMethod<self::A, self::B>(classB, invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:51:41: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+ - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+ - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+  Extension<A>(classB).genericMethod<B>(a); // Expect bounds mismatch.
+                                        ^" in a as{TypeError,ForNonNullableByDefault} self::B);
+  self::Extension|genericMethod<self::B, self::A>(classB, a);
+  self::Extension|genericMethod<self::B, self::A>(classB, a);
+  self::Extension|genericMethod<self::B, self::B>(classB, invalid-expression "pkg/front_end/testcases/extensions/check_bounds.dart:54:41: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+ - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+ - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+  Extension<B>(classB).genericMethod<B>(a);
+                                        ^" in a as{TypeError,ForNonNullableByDefault} self::B);
 }
-static method /* from org-dartlang-testcase:///check_bounds_lib.dart */ testInPart() → dynamic {
-  self::A* a;
-  self::Class<self::A*>* classA = new self::Class::•<self::A*>();
+static method /* from org-dartlang-testcase:///check_bounds_lib.dart */ testInPart(self::A a) → dynamic {
+  self::Class<self::A> classA = new self::Class::•<self::A>();
+  self::Class<self::B> classB = new self::Class::•<self::B>();
   invalid-expression "pkg/front_end/testcases/extensions/check_bounds_lib.dart:11:10: Error: The method 'method' isn't defined for the class 'Class<A>'.
  - 'Class' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
  - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
 Try correcting the name to the name of an existing method, or defining a method named 'method'.
   classA.method();
          ^^^^^^" in classA{<unresolved>}.method();
-  self::Extension|method<self::A*>(classA);
-  self::Extension|method<self::A*>(classA);
-  self::Extension|method<self::B*>(classA as{TypeError} self::Class<self::B*>*);
-  self::Extension|genericMethod<self::A*, self::A*>(classA, a);
-  self::Extension|genericMethod<self::A*, self::A*>(classA, a);
-  self::Extension|genericMethod<self::A*, self::B*>(classA, a as{TypeError} self::B*);
-  self::Extension|genericMethod<self::A*, self::A*>(classA, a);
-  self::Extension|genericMethod<self::A*, self::A*>(classA, a);
-  self::Extension|genericMethod<self::A*, self::B*>(classA, a as{TypeError} self::B*);
-  self::Extension|genericMethod<self::B*, self::A*>(classA as{TypeError} self::Class<self::B*>*, a);
-  self::Extension|genericMethod<self::B*, self::A*>(classA as{TypeError} self::Class<self::B*>*, a);
-  self::Extension|genericMethod<self::B*, self::B*>(classA as{TypeError} self::Class<self::B*>*, a as{TypeError} self::B*);
-  self::Class<self::B*>* classB = new self::Class::•<self::B*>();
-  self::Extension|method<self::B*>(classB);
-  self::Extension|method<self::B*>(classB);
-  self::Extension|method<self::A*>(classB);
-  self::Extension|method<self::B*>(classB);
-  self::Extension|genericMethod<self::B*, self::A*>(classB, a);
-  self::Extension|genericMethod<self::B*, self::A*>(classB, a);
-  self::Extension|genericMethod<self::B*, self::B*>(classB, a as{TypeError} self::B*);
-  self::Extension|genericMethod<self::B*, self::A*>(classB, a);
-  self::Extension|genericMethod<self::B*, self::A*>(classB, a);
-  self::Extension|genericMethod<self::B*, self::B*>(classB, a as{TypeError} self::B*);
-  self::Extension|genericMethod<self::A*, self::A*>(classB, a);
-  self::Extension|genericMethod<self::A*, self::A*>(classB, a);
-  self::Extension|genericMethod<self::A*, self::B*>(classB, a as{TypeError} self::B*);
-  self::Extension|genericMethod<self::B*, self::A*>(classB, a);
-  self::Extension|genericMethod<self::B*, self::A*>(classB, a);
-  self::Extension|genericMethod<self::B*, self::B*>(classB, a as{TypeError} self::B*);
+  self::Extension|method<self::A>(classA);
+  self::Extension|method<self::A>(classA);
+  self::Extension|method<self::B>(classB);
+  self::Extension|genericMethod<self::A, self::A>(classA, a);
+  self::Extension|genericMethod<self::A, self::A>(classA, a);
+  self::Extension|genericMethod<self::A, self::B>(classA, invalid-expression "pkg/front_end/testcases/extensions/check_bounds_lib.dart:17:38: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+ - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+ - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+  Extension(classA).genericMethod<B>(a); // Expect bounds mismatch.
+                                     ^" in a as{TypeError,ForNonNullableByDefault} self::B);
+  self::Extension|genericMethod<self::A, self::A>(classA, a);
+  self::Extension|genericMethod<self::A, self::A>(classA, a);
+  self::Extension|genericMethod<self::A, self::B>(classA, invalid-expression "pkg/front_end/testcases/extensions/check_bounds_lib.dart:20:41: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+ - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+ - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+  Extension<A>(classA).genericMethod<B>(a); // Expect bounds mismatch.
+                                        ^" in a as{TypeError,ForNonNullableByDefault} self::B);
+  self::Extension|genericMethod<self::B, self::A>(classB, a);
+  self::Extension|genericMethod<self::B, self::A>(classB, a);
+  self::Extension|genericMethod<self::B, self::B>(classB, invalid-expression "pkg/front_end/testcases/extensions/check_bounds_lib.dart:23:41: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+ - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+ - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+  Extension<B>(classB).genericMethod<B>(a);
+                                        ^" in a as{TypeError,ForNonNullableByDefault} self::B);
+  self::Extension|method<self::B>(classB);
+  self::Extension|method<self::B>(classB);
+  self::Extension|method<self::A>(classB);
+  self::Extension|method<self::B>(classB);
+  self::Extension|genericMethod<self::B, self::A>(classB, a);
+  self::Extension|genericMethod<self::B, self::A>(classB, a);
+  self::Extension|genericMethod<self::B, self::B>(classB, invalid-expression "pkg/front_end/testcases/extensions/check_bounds_lib.dart:32:27: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+ - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+ - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+  classB.genericMethod<B>(a);
+                          ^" in a as{TypeError,ForNonNullableByDefault} self::B);
+  self::Extension|genericMethod<self::B, self::A>(classB, a);
+  self::Extension|genericMethod<self::B, self::A>(classB, a);
+  self::Extension|genericMethod<self::B, self::B>(classB, invalid-expression "pkg/front_end/testcases/extensions/check_bounds_lib.dart:35:38: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+ - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+ - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+  Extension(classB).genericMethod<B>(a);
+                                     ^" in a as{TypeError,ForNonNullableByDefault} self::B);
+  self::Extension|genericMethod<self::A, self::A>(classB, a);
+  self::Extension|genericMethod<self::A, self::A>(classB, a);
+  self::Extension|genericMethod<self::A, self::B>(classB, invalid-expression "pkg/front_end/testcases/extensions/check_bounds_lib.dart:38:41: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+ - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+ - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+  Extension<A>(classB).genericMethod<B>(a); // Expect bounds mismatch.
+                                        ^" in a as{TypeError,ForNonNullableByDefault} self::B);
+  self::Extension|genericMethod<self::B, self::A>(classB, a);
+  self::Extension|genericMethod<self::B, self::A>(classB, a);
+  self::Extension|genericMethod<self::B, self::B>(classB, invalid-expression "pkg/front_end/testcases/extensions/check_bounds_lib.dart:41:41: Error: The argument type 'A' can't be assigned to the parameter type 'B'.
+ - 'A' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+ - 'B' is from 'pkg/front_end/testcases/extensions/check_bounds.dart'.
+  Extension<B>(classB).genericMethod<B>(a);
+                                        ^" in a as{TypeError,ForNonNullableByDefault} self::B);
 }
diff --git a/pkg/front_end/testcases/extensions/check_bounds_lib.dart b/pkg/front_end/testcases/extensions/check_bounds_lib.dart
index cf84769..47e8a2e 100644
--- a/pkg/front_end/testcases/extensions/check_bounds_lib.dart
+++ b/pkg/front_end/testcases/extensions/check_bounds_lib.dart
@@ -1,28 +1,27 @@
 // Copyright (c) 2019, 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.
-// @dart=2.9
+
 part of 'check_bounds.dart';
 
-testInPart() {
-  A a;
-
+testInPart(A a) {
   Class<A> classA = new Class<A>();
+  Class<B> classB = new Class<B>();
+
   classA.method();
   Extension(classA).method(); // Expect bounds mismatch.
   Extension<A>(classA).method(); // Expect bounds mismatch.
-  Extension<B>(classA).method();
+  Extension<B>(classB).method();
   Extension(classA).genericMethod(a); // Expect bounds mismatch.
   Extension(classA).genericMethod<A>(a); // Expect bounds mismatch.
   Extension(classA).genericMethod<B>(a); // Expect bounds mismatch.
   Extension<A>(classA).genericMethod(a); // Expect bounds mismatch.
   Extension<A>(classA).genericMethod<A>(a); // Expect bounds mismatch.
   Extension<A>(classA).genericMethod<B>(a); // Expect bounds mismatch.
-  Extension<B>(classA).genericMethod(a); // Expect bounds mismatch.
-  Extension<B>(classA).genericMethod<A>(a); // Expect bounds mismatch.
-  Extension<B>(classA).genericMethod<B>(a);
+  Extension<B>(classB).genericMethod(a); // Expect bounds mismatch.
+  Extension<B>(classB).genericMethod<A>(a); // Expect bounds mismatch.
+  Extension<B>(classB).genericMethod<B>(a);
 
-  Class<B> classB = new Class<B>();
   classB.method();
   Extension(classB).method();
   Extension<A>(classB).method(); // Expect bounds mismatch.
diff --git a/pkg/front_end/testcases/extensions/compounds.dart b/pkg/front_end/testcases/extensions/compounds.dart
index af73621..3189665 100644
--- a/pkg/front_end/testcases/extensions/compounds.dart
+++ b/pkg/front_end/testcases/extensions/compounds.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2019, 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.
-// @dart=2.9
+
 class Number {
   final int value;
 
@@ -408,7 +408,7 @@
   expect(n0, IntClassExtension(v).property);
 }
 
-testExplicitNullAwareProperties(Class v) {
+testExplicitNullAwareProperties(Class? v) {
   Number n0 = new Number(0);
   Number n1 = new Number(1);
   Number n2 = new Number(2);
@@ -446,7 +446,7 @@
   expect(n0, ClassExtension(v)?.property, v == null);
 }
 
-testExplicitNullAwareIntProperties(IntClass v) {
+testExplicitNullAwareIntProperties(IntClass? v) {
   int n0 = 0;
   int n1 = 1;
   int n2 = 2;
diff --git a/pkg/front_end/testcases/extensions/compounds.dart.textual_outline.expect b/pkg/front_end/testcases/extensions/compounds.dart.textual_outline.expect
index bb35225..89e856f 100644
--- a/pkg/front_end/testcases/extensions/compounds.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/extensions/compounds.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Number {
   final int value;
   Number(this.value);
@@ -40,6 +39,6 @@
 testIntProperties() {}
 testExplicitProperties() {}
 testExplicitIntProperties() {}
-testExplicitNullAwareProperties(Class v) {}
-testExplicitNullAwareIntProperties(IntClass v) {}
+testExplicitNullAwareProperties(Class? v) {}
+testExplicitNullAwareIntProperties(IntClass? v) {}
 expect(expected, actual, [expectNull = false]) {}
diff --git a/pkg/front_end/testcases/extensions/compounds.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/extensions/compounds.dart.textual_outline_modelled.expect
index b845645..2ef5e18 100644
--- a/pkg/front_end/testcases/extensions/compounds.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/extensions/compounds.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Class {
   Class(this.field);
   Number field;
@@ -38,8 +37,8 @@
 
 main() {}
 testExplicitIntProperties() {}
-testExplicitNullAwareIntProperties(IntClass v) {}
-testExplicitNullAwareProperties(Class v) {}
+testExplicitNullAwareIntProperties(IntClass? v) {}
+testExplicitNullAwareProperties(Class? v) {}
 testExplicitProperties() {}
 testIntProperties() {}
 testLocals() {}
diff --git a/pkg/front_end/testcases/extensions/compounds.dart.weak.expect b/pkg/front_end/testcases/extensions/compounds.dart.weak.expect
index ccd5bd4..d1424bc 100644
--- a/pkg/front_end/testcases/extensions/compounds.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/compounds.dart.weak.expect
@@ -1,117 +1,90 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Number extends core::Object {
-  final field core::int* value;
-  constructor •(core::int* value) → self::Number*
+  final field core::int value;
+  constructor •(core::int value) → self::Number
     : self::Number::value = value, super core::Object::•()
     ;
-  get hashCode() → core::int*
-    return this.{self::Number::value}{core::int*}.{core::num::hashCode}{core::int*};
-  operator ==(core::Object* other) → core::bool*
-    return other is self::Number* && this.{self::Number::value}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} other{self::Number*}.{self::Number::value}{core::int*};
-  method toString() → core::String*
-    return "Number(${this.{self::Number::value}{core::int*}})";
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  get hashCode() → core::int
+    return this.{self::Number::value}{core::int}.{core::num::hashCode}{core::int};
+  operator ==(core::Object other) → core::bool
+    return other is{ForNonNullableByDefault} self::Number && this.{self::Number::value}{core::int} =={core::num::==}{(core::Object) → core::bool} other{self::Number}.{self::Number::value}{core::int};
+  method toString() → core::String
+    return "Number(${this.{self::Number::value}{core::int}})";
 }
 class Class extends core::Object {
-  field self::Number* field;
-  constructor •(self::Number* field) → self::Class*
+  field self::Number field;
+  constructor •(self::Number field) → self::Class
     : self::Class::field = field, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class IntClass extends core::Object {
-  field core::int* field;
-  constructor •(core::int* field) → self::IntClass*
+  field core::int field;
+  constructor •(core::int field) → self::IntClass
     : self::IntClass::field = field, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension NumberExtension on self::Number* {
+extension NumberExtension on self::Number {
   operator + = self::NumberExtension|+;
   operator - = self::NumberExtension|-;
 }
-extension ClassExtension on self::Class* {
+extension ClassExtension on self::Class {
   get property = self::ClassExtension|get#property;
   method testImplicitProperties = self::ClassExtension|testImplicitProperties;
   tearoff testImplicitProperties = self::ClassExtension|get#testImplicitProperties;
   set property = self::ClassExtension|set#property;
 }
-extension IntClassExtension on self::IntClass* {
+extension IntClassExtension on self::IntClass {
   get property = self::IntClassExtension|get#property;
   method testImplicitProperties = self::IntClassExtension|testImplicitProperties;
   tearoff testImplicitProperties = self::IntClassExtension|get#testImplicitProperties;
   set property = self::IntClassExtension|set#property;
 }
-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::int*}.{core::num::+}(other{core::int*}){(core::num*) →* core::int*});
+static method NumberExtension|+(lowered final self::Number #this, core::Object other) → self::Number {
+  if(other is{ForNonNullableByDefault} core::int) {
+    return new self::Number::•(#this.{self::Number::value}{core::int}.{core::num::+}(other{core::int}){(core::num) → core::int});
   }
   else
-    if(other is self::Number*) {
-      return new self::Number::•(#this.{self::Number::value}{core::int*}.{core::num::+}(other{self::Number*}.{self::Number::value}{core::int*}){(core::num*) →* core::int*});
+    if(other is{ForNonNullableByDefault} self::Number) {
+      return new self::Number::•(#this.{self::Number::value}{core::int}.{core::num::+}(other{self::Number}.{self::Number::value}{core::int}){(core::num) → core::int});
     }
     else {
       throw new core::ArgumentError::•("${other}");
     }
 }
-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::int*}.{core::num::-}(other{core::int*}){(core::num*) →* core::int*});
+static method NumberExtension|-(lowered final self::Number #this, core::Object other) → self::Number {
+  if(other is{ForNonNullableByDefault} core::int) {
+    return new self::Number::•(#this.{self::Number::value}{core::int}.{core::num::-}(other{core::int}){(core::num) → core::int});
   }
   else
-    if(other is self::Number*) {
-      return new self::Number::•(#this.{self::Number::value}{core::int*}.{core::num::-}(other{self::Number*}.{self::Number::value}{core::int*}){(core::num*) →* core::int*});
+    if(other is{ForNonNullableByDefault} self::Number) {
+      return new self::Number::•(#this.{self::Number::value}{core::int}.{core::num::-}(other{self::Number}.{self::Number::value}{core::int}){(core::num) → core::int});
     }
     else {
       throw new core::ArgumentError::•("${other}");
     }
 }
-static method ClassExtension|get#property(lowered final self::Class* #this) → self::Number*
-  return #this.{self::Class::field}{self::Number*};
-static method ClassExtension|set#property(lowered final self::Class* #this, self::Number* value) → void {
+static method ClassExtension|get#property(lowered final self::Class #this) → self::Number
+  return #this.{self::Class::field}{self::Number};
+static method ClassExtension|set#property(lowered final self::Class #this, self::Number value) → void {
   #this.{self::Class::field} = value;
 }
-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);
+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);
   self::expect(n0, self::ClassExtension|get#property(#this));
-  self::expect(n1, let final self::Number* #t1 = self::NumberExtension|+(self::ClassExtension|get#property(#this), n1) in let final void #t2 = self::ClassExtension|set#property(#this, #t1) in #t1);
-  self::expect(n2, let final self::Number* #t3 = self::NumberExtension|+(self::ClassExtension|get#property(#this), n1) in let final void #t4 = self::ClassExtension|set#property(#this, #t3) in #t3);
-  self::expect(n0, let final self::Number* #t5 = self::NumberExtension|-(self::ClassExtension|get#property(#this), n2) in let final void #t6 = self::ClassExtension|set#property(#this, #t5) in #t5);
-  self::expect(n1, let final self::Number* #t7 = self::NumberExtension|+(self::ClassExtension|get#property(#this), n1) in let final void #t8 = self::ClassExtension|set#property(#this, #t7) in #t7);
-  self::expect(n0, let final self::Number* #t9 = self::NumberExtension|-(self::ClassExtension|get#property(#this), n1) in let final void #t10 = self::ClassExtension|set#property(#this, #t9) in #t9);
-  self::expect(n1, let final self::Number* #t11 = self::NumberExtension|+(self::ClassExtension|get#property(#this), 1) in let final void #t12 = self::ClassExtension|set#property(#this, #t11) in #t11);
-  self::expect(n0, let final self::Number* #t13 = self::NumberExtension|-(self::ClassExtension|get#property(#this), 1) in let final void #t14 = self::ClassExtension|set#property(#this, #t13) in #t13);
-  self::expect(n0, let final self::Number* #t15 = self::ClassExtension|get#property(#this) in let final self::Number* #t16 = self::ClassExtension|set#property(#this, self::NumberExtension|+(#t15, 1)) in #t15);
-  self::expect(n1, let final self::Number* #t17 = self::ClassExtension|get#property(#this) in let final self::Number* #t18 = self::ClassExtension|set#property(#this, self::NumberExtension|-(#t17, 1)) in #t17);
+  self::expect(n1, let final self::Number #t1 = self::NumberExtension|+(self::ClassExtension|get#property(#this), n1) in let final void #t2 = self::ClassExtension|set#property(#this, #t1) in #t1);
+  self::expect(n2, let final self::Number #t3 = self::NumberExtension|+(self::ClassExtension|get#property(#this), n1) in let final void #t4 = self::ClassExtension|set#property(#this, #t3) in #t3);
+  self::expect(n0, let final self::Number #t5 = self::NumberExtension|-(self::ClassExtension|get#property(#this), n2) in let final void #t6 = self::ClassExtension|set#property(#this, #t5) in #t5);
+  self::expect(n1, let final self::Number #t7 = self::NumberExtension|+(self::ClassExtension|get#property(#this), n1) in let final void #t8 = self::ClassExtension|set#property(#this, #t7) in #t7);
+  self::expect(n0, let final self::Number #t9 = self::NumberExtension|-(self::ClassExtension|get#property(#this), n1) in let final void #t10 = self::ClassExtension|set#property(#this, #t9) in #t9);
+  self::expect(n1, let final self::Number #t11 = self::NumberExtension|+(self::ClassExtension|get#property(#this), 1) in let final void #t12 = self::ClassExtension|set#property(#this, #t11) in #t11);
+  self::expect(n0, let final self::Number #t13 = self::NumberExtension|-(self::ClassExtension|get#property(#this), 1) in let final void #t14 = self::ClassExtension|set#property(#this, #t13) in #t13);
+  self::expect(n0, let final self::Number #t15 = self::ClassExtension|get#property(#this) in let final self::Number #t16 = self::ClassExtension|set#property(#this, self::NumberExtension|+(#t15, 1)) in #t15);
+  self::expect(n1, let final self::Number #t17 = self::ClassExtension|get#property(#this) in let final self::Number #t18 = self::ClassExtension|set#property(#this, self::NumberExtension|-(#t17, 1)) in #t17);
   self::expect(n0, self::ClassExtension|get#property(#this));
   self::expect(n0, self::ClassExtension|get#property(#this));
   self::ClassExtension|set#property(#this, self::NumberExtension|+(self::ClassExtension|get#property(#this), n1));
@@ -124,58 +97,58 @@
   self::expect(n1, self::ClassExtension|get#property(#this));
   self::ClassExtension|set#property(#this, self::NumberExtension|-(self::ClassExtension|get#property(#this), n1));
   self::expect(n0, self::ClassExtension|get#property(#this));
-  let final self::Number* #t19 = self::NumberExtension|+(self::ClassExtension|get#property(#this), 1) in let final void #t20 = self::ClassExtension|set#property(#this, #t19) in #t19;
+  let final self::Number #t19 = self::NumberExtension|+(self::ClassExtension|get#property(#this), 1) in let final void #t20 = self::ClassExtension|set#property(#this, #t19) in #t19;
   self::expect(n1, self::ClassExtension|get#property(#this));
-  let final self::Number* #t21 = self::NumberExtension|-(self::ClassExtension|get#property(#this), 1) in let final void #t22 = self::ClassExtension|set#property(#this, #t21) in #t21;
+  let final self::Number #t21 = self::NumberExtension|-(self::ClassExtension|get#property(#this), 1) in let final void #t22 = self::ClassExtension|set#property(#this, #t21) in #t21;
   self::expect(n0, self::ClassExtension|get#property(#this));
   self::ClassExtension|set#property(#this, self::NumberExtension|+(self::ClassExtension|get#property(#this), 1));
   self::expect(n1, self::ClassExtension|get#property(#this));
   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(lowered 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(lowered final self::IntClass* #this) → core::int*
-  return #this.{self::IntClass::field}{core::int*};
-static method IntClassExtension|set#property(lowered final self::IntClass* #this, core::int* value) → void {
+static method IntClassExtension|get#property(lowered final self::IntClass #this) → core::int
+  return #this.{self::IntClass::field}{core::int};
+static method IntClassExtension|set#property(lowered final self::IntClass #this, core::int value) → void {
   #this.{self::IntClass::field} = value;
 }
-static method IntClassExtension|testImplicitProperties(lowered final self::IntClass* #this) → dynamic {
-  core::int* n0 = 0;
-  core::int* n1 = 1;
-  core::int* n2 = 2;
+static method IntClassExtension|testImplicitProperties(lowered final self::IntClass #this) → dynamic {
+  core::int n0 = 0;
+  core::int n1 = 1;
+  core::int n2 = 2;
   self::expect(n0, self::IntClassExtension|get#property(#this));
-  self::expect(n1, let final core::int* #t23 = self::IntClassExtension|get#property(#this).{core::num::+}(n1){(core::num*) →* core::int*} in let final void #t24 = self::IntClassExtension|set#property(#this, #t23) in #t23);
-  self::expect(n2, let final core::int* #t25 = self::IntClassExtension|get#property(#this).{core::num::+}(n1){(core::num*) →* core::int*} in let final void #t26 = self::IntClassExtension|set#property(#this, #t25) in #t25);
-  self::expect(n0, let final core::int* #t27 = self::IntClassExtension|get#property(#this).{core::num::-}(n2){(core::num*) →* core::int*} in let final void #t28 = self::IntClassExtension|set#property(#this, #t27) in #t27);
-  self::expect(n1, let final core::int* #t29 = self::IntClassExtension|get#property(#this).{core::num::+}(n1){(core::num*) →* core::int*} in let final void #t30 = self::IntClassExtension|set#property(#this, #t29) in #t29);
-  self::expect(n0, let final core::int* #t31 = self::IntClassExtension|get#property(#this).{core::num::-}(n1){(core::num*) →* core::int*} in let final void #t32 = self::IntClassExtension|set#property(#this, #t31) in #t31);
-  self::expect(n1, let final core::int* #t33 = self::IntClassExtension|get#property(#this).{core::num::+}(1){(core::num*) →* core::int*} in let final void #t34 = self::IntClassExtension|set#property(#this, #t33) in #t33);
-  self::expect(n0, let final core::int* #t35 = self::IntClassExtension|get#property(#this).{core::num::-}(1){(core::num*) →* core::int*} in let final void #t36 = self::IntClassExtension|set#property(#this, #t35) in #t35);
-  self::expect(n0, let final core::int* #t37 = self::IntClassExtension|get#property(#this) in let final core::int* #t38 = self::IntClassExtension|set#property(#this, #t37.{core::num::+}(1){(core::num*) →* core::int*}) in #t37);
-  self::expect(n1, let final core::int* #t39 = self::IntClassExtension|get#property(#this) in let final core::int* #t40 = self::IntClassExtension|set#property(#this, #t39.{core::num::-}(1){(core::num*) →* core::int*}) in #t39);
+  self::expect(n1, let final core::int #t23 = self::IntClassExtension|get#property(#this).{core::num::+}(n1){(core::num) → core::int} in let final void #t24 = self::IntClassExtension|set#property(#this, #t23) in #t23);
+  self::expect(n2, let final core::int #t25 = self::IntClassExtension|get#property(#this).{core::num::+}(n1){(core::num) → core::int} in let final void #t26 = self::IntClassExtension|set#property(#this, #t25) in #t25);
+  self::expect(n0, let final core::int #t27 = self::IntClassExtension|get#property(#this).{core::num::-}(n2){(core::num) → core::int} in let final void #t28 = self::IntClassExtension|set#property(#this, #t27) in #t27);
+  self::expect(n1, let final core::int #t29 = self::IntClassExtension|get#property(#this).{core::num::+}(n1){(core::num) → core::int} in let final void #t30 = self::IntClassExtension|set#property(#this, #t29) in #t29);
+  self::expect(n0, let final core::int #t31 = self::IntClassExtension|get#property(#this).{core::num::-}(n1){(core::num) → core::int} in let final void #t32 = self::IntClassExtension|set#property(#this, #t31) in #t31);
+  self::expect(n1, let final core::int #t33 = self::IntClassExtension|get#property(#this).{core::num::+}(1){(core::num) → core::int} in let final void #t34 = self::IntClassExtension|set#property(#this, #t33) in #t33);
+  self::expect(n0, let final core::int #t35 = self::IntClassExtension|get#property(#this).{core::num::-}(1){(core::num) → core::int} in let final void #t36 = self::IntClassExtension|set#property(#this, #t35) in #t35);
+  self::expect(n0, let final core::int #t37 = self::IntClassExtension|get#property(#this) in let final core::int #t38 = self::IntClassExtension|set#property(#this, #t37.{core::num::+}(1){(core::num) → core::int}) in #t37);
+  self::expect(n1, let final core::int #t39 = self::IntClassExtension|get#property(#this) in let final core::int #t40 = self::IntClassExtension|set#property(#this, #t39.{core::num::-}(1){(core::num) → core::int}) in #t39);
   self::expect(n0, self::IntClassExtension|get#property(#this));
   self::expect(n0, self::IntClassExtension|get#property(#this));
-  self::IntClassExtension|set#property(#this, self::IntClassExtension|get#property(#this).{core::num::+}(n1){(core::num*) →* core::int*});
+  self::IntClassExtension|set#property(#this, self::IntClassExtension|get#property(#this).{core::num::+}(n1){(core::num) → core::int});
   self::expect(n1, self::IntClassExtension|get#property(#this));
-  self::IntClassExtension|set#property(#this, self::IntClassExtension|get#property(#this).{core::num::+}(n1){(core::num*) →* core::int*});
+  self::IntClassExtension|set#property(#this, self::IntClassExtension|get#property(#this).{core::num::+}(n1){(core::num) → core::int});
   self::expect(n2, self::IntClassExtension|get#property(#this));
-  self::IntClassExtension|set#property(#this, self::IntClassExtension|get#property(#this).{core::num::-}(n2){(core::num*) →* core::int*});
+  self::IntClassExtension|set#property(#this, self::IntClassExtension|get#property(#this).{core::num::-}(n2){(core::num) → core::int});
   self::expect(n0, self::IntClassExtension|get#property(#this));
-  self::IntClassExtension|set#property(#this, self::IntClassExtension|get#property(#this).{core::num::+}(n1){(core::num*) →* core::int*});
+  self::IntClassExtension|set#property(#this, self::IntClassExtension|get#property(#this).{core::num::+}(n1){(core::num) → core::int});
   self::expect(n1, self::IntClassExtension|get#property(#this));
-  self::IntClassExtension|set#property(#this, self::IntClassExtension|get#property(#this).{core::num::-}(n1){(core::num*) →* core::int*});
+  self::IntClassExtension|set#property(#this, self::IntClassExtension|get#property(#this).{core::num::-}(n1){(core::num) → core::int});
   self::expect(n0, self::IntClassExtension|get#property(#this));
-  let final core::int* #t41 = self::IntClassExtension|get#property(#this).{core::num::+}(1){(core::num*) →* core::int*} in let final void #t42 = self::IntClassExtension|set#property(#this, #t41) in #t41;
+  let final core::int #t41 = self::IntClassExtension|get#property(#this).{core::num::+}(1){(core::num) → core::int} in let final void #t42 = self::IntClassExtension|set#property(#this, #t41) in #t41;
   self::expect(n1, self::IntClassExtension|get#property(#this));
-  let final core::int* #t43 = self::IntClassExtension|get#property(#this).{core::num::-}(1){(core::num*) →* core::int*} in let final void #t44 = self::IntClassExtension|set#property(#this, #t43) in #t43;
+  let final core::int #t43 = self::IntClassExtension|get#property(#this).{core::num::-}(1){(core::num) → core::int} in let final void #t44 = self::IntClassExtension|set#property(#this, #t43) in #t43;
   self::expect(n0, self::IntClassExtension|get#property(#this));
-  self::IntClassExtension|set#property(#this, self::IntClassExtension|get#property(#this).{core::num::+}(1){(core::num*) →* core::int*});
+  self::IntClassExtension|set#property(#this, self::IntClassExtension|get#property(#this).{core::num::+}(1){(core::num) → core::int});
   self::expect(n1, self::IntClassExtension|get#property(#this));
-  self::IntClassExtension|set#property(#this, self::IntClassExtension|get#property(#this).{core::num::-}(1){(core::num*) →* core::int*});
+  self::IntClassExtension|set#property(#this, self::IntClassExtension|get#property(#this).{core::num::-}(1){(core::num) → core::int});
   self::expect(n0, self::IntClassExtension|get#property(#this));
 }
-static method IntClassExtension|get#testImplicitProperties(lowered 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();
@@ -191,10 +164,10 @@
   self::IntClassExtension|testImplicitProperties(new self::IntClass::•(0));
 }
 static method testLocals() → dynamic {
-  self::Number* n0 = new self::Number::•(0);
-  self::Number* n1 = new self::Number::•(1);
-  self::Number* n2 = new self::Number::•(2);
-  self::Number* v = n0;
+  self::Number n0 = new self::Number::•(0);
+  self::Number n1 = new self::Number::•(1);
+  self::Number n2 = new self::Number::•(2);
+  self::Number v = n0;
   self::expect(n0, v);
   self::expect(n1, v = self::NumberExtension|+(v, n1));
   self::expect(n2, v = self::NumberExtension|+(v, n1));
@@ -203,8 +176,8 @@
   self::expect(n0, v = self::NumberExtension|-(v, n1));
   self::expect(n1, v = self::NumberExtension|+(v, 1));
   self::expect(n0, v = self::NumberExtension|-(v, 1));
-  self::expect(n0, let final self::Number* #t45 = v in let final self::Number* #t46 = v = self::NumberExtension|+(#t45, 1) in #t45);
-  self::expect(n1, let final self::Number* #t47 = v in let final self::Number* #t48 = v = self::NumberExtension|-(#t47, 1) in #t47);
+  self::expect(n0, let final self::Number #t45 = v in let final self::Number #t46 = v = self::NumberExtension|+(#t45, 1) in #t45);
+  self::expect(n1, let final self::Number #t47 = v in let final self::Number #t48 = v = self::NumberExtension|-(#t47, 1) in #t47);
   self::expect(n0, v);
   self::expect(n0, v);
   v = self::NumberExtension|+(v, n1);
@@ -227,284 +200,284 @@
   self::expect(n0, v);
 }
 static method testProperties() → dynamic {
-  self::Number* n0 = new self::Number::•(0);
-  self::Number* n1 = new self::Number::•(1);
-  self::Number* n2 = new self::Number::•(2);
-  self::Class* v = new self::Class::•(n0);
-  self::expect(n0, v.{self::Class::field}{self::Number*});
-  self::expect(n1, let final self::Class* #t49 = v in #t49.{self::Class::field} = self::NumberExtension|+(#t49.{self::Class::field}{self::Number*}, n1));
-  self::expect(n2, let final self::Class* #t50 = v in #t50.{self::Class::field} = self::NumberExtension|+(#t50.{self::Class::field}{self::Number*}, n1));
-  self::expect(n0, let final self::Class* #t51 = v in #t51.{self::Class::field} = self::NumberExtension|-(#t51.{self::Class::field}{self::Number*}, n2));
-  self::expect(n1, let final self::Class* #t52 = v in #t52.{self::Class::field} = self::NumberExtension|+(#t52.{self::Class::field}{self::Number*}, n1));
-  self::expect(n0, let final self::Class* #t53 = v in #t53.{self::Class::field} = self::NumberExtension|-(#t53.{self::Class::field}{self::Number*}, n1));
-  self::expect(n1, let final self::Class* #t54 = v in #t54.{self::Class::field} = self::NumberExtension|+(#t54.{self::Class::field}{self::Number*}, 1));
-  self::expect(n0, let final self::Class* #t55 = v in #t55.{self::Class::field} = self::NumberExtension|-(#t55.{self::Class::field}{self::Number*}, 1));
-  self::expect(n0, let final self::Class* #t56 = v in let final self::Number* #t57 = #t56.{self::Class::field}{self::Number*} in let final self::Number* #t58 = #t56.{self::Class::field} = self::NumberExtension|+(#t57, 1) in #t57);
-  self::expect(n1, let final self::Class* #t59 = v in let final self::Number* #t60 = #t59.{self::Class::field}{self::Number*} in let final self::Number* #t61 = #t59.{self::Class::field} = self::NumberExtension|-(#t60, 1) in #t60);
-  self::expect(n0, v.{self::Class::field}{self::Number*});
-  self::expect(n0, v.{self::Class::field}{self::Number*});
-  let final self::Class* #t62 = v in #t62.{self::Class::field} = self::NumberExtension|+(#t62.{self::Class::field}{self::Number*}, n1);
-  self::expect(n1, v.{self::Class::field}{self::Number*});
-  let final self::Class* #t63 = v in #t63.{self::Class::field} = self::NumberExtension|+(#t63.{self::Class::field}{self::Number*}, n1);
-  self::expect(n2, v.{self::Class::field}{self::Number*});
-  let final self::Class* #t64 = v in #t64.{self::Class::field} = self::NumberExtension|-(#t64.{self::Class::field}{self::Number*}, n2);
-  self::expect(n0, v.{self::Class::field}{self::Number*});
-  let final self::Class* #t65 = v in #t65.{self::Class::field} = self::NumberExtension|+(#t65.{self::Class::field}{self::Number*}, n1);
-  self::expect(n1, v.{self::Class::field}{self::Number*});
-  let final self::Class* #t66 = v in #t66.{self::Class::field} = self::NumberExtension|-(#t66.{self::Class::field}{self::Number*}, n1);
-  self::expect(n0, v.{self::Class::field}{self::Number*});
-  let final self::Class* #t67 = v in #t67.{self::Class::field} = self::NumberExtension|+(#t67.{self::Class::field}{self::Number*}, 1);
-  self::expect(n1, v.{self::Class::field}{self::Number*});
-  let final self::Class* #t68 = v in #t68.{self::Class::field} = self::NumberExtension|-(#t68.{self::Class::field}{self::Number*}, 1);
-  self::expect(n0, v.{self::Class::field}{self::Number*});
-  let final self::Class* #t69 = v in #t69.{self::Class::field} = self::NumberExtension|+(#t69.{self::Class::field}{self::Number*}, 1);
-  self::expect(n1, v.{self::Class::field}{self::Number*});
-  let final self::Class* #t70 = v in #t70.{self::Class::field} = self::NumberExtension|-(#t70.{self::Class::field}{self::Number*}, 1);
-  self::expect(n0, v.{self::Class::field}{self::Number*});
+  self::Number n0 = new self::Number::•(0);
+  self::Number n1 = new self::Number::•(1);
+  self::Number n2 = new self::Number::•(2);
+  self::Class v = new self::Class::•(n0);
+  self::expect(n0, v.{self::Class::field}{self::Number});
+  self::expect(n1, let final self::Class #t49 = v in #t49.{self::Class::field} = self::NumberExtension|+(#t49.{self::Class::field}{self::Number}, n1));
+  self::expect(n2, let final self::Class #t50 = v in #t50.{self::Class::field} = self::NumberExtension|+(#t50.{self::Class::field}{self::Number}, n1));
+  self::expect(n0, let final self::Class #t51 = v in #t51.{self::Class::field} = self::NumberExtension|-(#t51.{self::Class::field}{self::Number}, n2));
+  self::expect(n1, let final self::Class #t52 = v in #t52.{self::Class::field} = self::NumberExtension|+(#t52.{self::Class::field}{self::Number}, n1));
+  self::expect(n0, let final self::Class #t53 = v in #t53.{self::Class::field} = self::NumberExtension|-(#t53.{self::Class::field}{self::Number}, n1));
+  self::expect(n1, let final self::Class #t54 = v in #t54.{self::Class::field} = self::NumberExtension|+(#t54.{self::Class::field}{self::Number}, 1));
+  self::expect(n0, let final self::Class #t55 = v in #t55.{self::Class::field} = self::NumberExtension|-(#t55.{self::Class::field}{self::Number}, 1));
+  self::expect(n0, let final self::Class #t56 = v in let final self::Number #t57 = #t56.{self::Class::field}{self::Number} in let final self::Number #t58 = #t56.{self::Class::field} = self::NumberExtension|+(#t57, 1) in #t57);
+  self::expect(n1, let final self::Class #t59 = v in let final self::Number #t60 = #t59.{self::Class::field}{self::Number} in let final self::Number #t61 = #t59.{self::Class::field} = self::NumberExtension|-(#t60, 1) in #t60);
+  self::expect(n0, v.{self::Class::field}{self::Number});
+  self::expect(n0, v.{self::Class::field}{self::Number});
+  let final self::Class #t62 = v in #t62.{self::Class::field} = self::NumberExtension|+(#t62.{self::Class::field}{self::Number}, n1);
+  self::expect(n1, v.{self::Class::field}{self::Number});
+  let final self::Class #t63 = v in #t63.{self::Class::field} = self::NumberExtension|+(#t63.{self::Class::field}{self::Number}, n1);
+  self::expect(n2, v.{self::Class::field}{self::Number});
+  let final self::Class #t64 = v in #t64.{self::Class::field} = self::NumberExtension|-(#t64.{self::Class::field}{self::Number}, n2);
+  self::expect(n0, v.{self::Class::field}{self::Number});
+  let final self::Class #t65 = v in #t65.{self::Class::field} = self::NumberExtension|+(#t65.{self::Class::field}{self::Number}, n1);
+  self::expect(n1, v.{self::Class::field}{self::Number});
+  let final self::Class #t66 = v in #t66.{self::Class::field} = self::NumberExtension|-(#t66.{self::Class::field}{self::Number}, n1);
+  self::expect(n0, v.{self::Class::field}{self::Number});
+  let final self::Class #t67 = v in #t67.{self::Class::field} = self::NumberExtension|+(#t67.{self::Class::field}{self::Number}, 1);
+  self::expect(n1, v.{self::Class::field}{self::Number});
+  let final self::Class #t68 = v in #t68.{self::Class::field} = self::NumberExtension|-(#t68.{self::Class::field}{self::Number}, 1);
+  self::expect(n0, v.{self::Class::field}{self::Number});
+  let final self::Class #t69 = v in #t69.{self::Class::field} = self::NumberExtension|+(#t69.{self::Class::field}{self::Number}, 1);
+  self::expect(n1, v.{self::Class::field}{self::Number});
+  let final self::Class #t70 = v in #t70.{self::Class::field} = self::NumberExtension|-(#t70.{self::Class::field}{self::Number}, 1);
+  self::expect(n0, v.{self::Class::field}{self::Number});
   self::expect(n0, self::ClassExtension|get#property(v));
-  self::expect(n1, let final self::Class* #t71 = v in let final self::Number* #t72 = self::NumberExtension|+(self::ClassExtension|get#property(#t71), n1) in let final void #t73 = self::ClassExtension|set#property(#t71, #t72) in #t72);
-  self::expect(n2, let final self::Class* #t74 = v in let final self::Number* #t75 = self::NumberExtension|+(self::ClassExtension|get#property(#t74), n1) in let final void #t76 = self::ClassExtension|set#property(#t74, #t75) in #t75);
-  self::expect(n0, let final self::Class* #t77 = v in let final self::Number* #t78 = self::NumberExtension|-(self::ClassExtension|get#property(#t77), n2) in let final void #t79 = self::ClassExtension|set#property(#t77, #t78) in #t78);
-  self::expect(n1, let final self::Class* #t80 = v in let final self::Number* #t81 = self::NumberExtension|+(self::ClassExtension|get#property(#t80), n1) in let final void #t82 = self::ClassExtension|set#property(#t80, #t81) in #t81);
-  self::expect(n0, let final self::Class* #t83 = v in let final self::Number* #t84 = self::NumberExtension|-(self::ClassExtension|get#property(#t83), n1) in let final void #t85 = self::ClassExtension|set#property(#t83, #t84) in #t84);
-  self::expect(n1, let final self::Class* #t86 = v in let final self::Number* #t87 = self::NumberExtension|+(self::ClassExtension|get#property(#t86), 1) in let final void #t88 = self::ClassExtension|set#property(#t86, #t87) in #t87);
-  self::expect(n0, let final self::Class* #t89 = v in let final self::Number* #t90 = self::NumberExtension|-(self::ClassExtension|get#property(#t89), 1) in let final void #t91 = self::ClassExtension|set#property(#t89, #t90) in #t90);
-  self::expect(n0, let final self::Class* #t92 = v in let final self::Number* #t93 = self::ClassExtension|get#property(#t92) in let final self::Number* #t94 = self::ClassExtension|set#property(#t92, self::NumberExtension|+(#t93, 1)) in #t93);
-  self::expect(n1, let final self::Class* #t95 = v in let final self::Number* #t96 = self::ClassExtension|get#property(#t95) in let final self::Number* #t97 = self::ClassExtension|set#property(#t95, self::NumberExtension|-(#t96, 1)) in #t96);
+  self::expect(n1, let final self::Class #t71 = v in let final self::Number #t72 = self::NumberExtension|+(self::ClassExtension|get#property(#t71), n1) in let final void #t73 = self::ClassExtension|set#property(#t71, #t72) in #t72);
+  self::expect(n2, let final self::Class #t74 = v in let final self::Number #t75 = self::NumberExtension|+(self::ClassExtension|get#property(#t74), n1) in let final void #t76 = self::ClassExtension|set#property(#t74, #t75) in #t75);
+  self::expect(n0, let final self::Class #t77 = v in let final self::Number #t78 = self::NumberExtension|-(self::ClassExtension|get#property(#t77), n2) in let final void #t79 = self::ClassExtension|set#property(#t77, #t78) in #t78);
+  self::expect(n1, let final self::Class #t80 = v in let final self::Number #t81 = self::NumberExtension|+(self::ClassExtension|get#property(#t80), n1) in let final void #t82 = self::ClassExtension|set#property(#t80, #t81) in #t81);
+  self::expect(n0, let final self::Class #t83 = v in let final self::Number #t84 = self::NumberExtension|-(self::ClassExtension|get#property(#t83), n1) in let final void #t85 = self::ClassExtension|set#property(#t83, #t84) in #t84);
+  self::expect(n1, let final self::Class #t86 = v in let final self::Number #t87 = self::NumberExtension|+(self::ClassExtension|get#property(#t86), 1) in let final void #t88 = self::ClassExtension|set#property(#t86, #t87) in #t87);
+  self::expect(n0, let final self::Class #t89 = v in let final self::Number #t90 = self::NumberExtension|-(self::ClassExtension|get#property(#t89), 1) in let final void #t91 = self::ClassExtension|set#property(#t89, #t90) in #t90);
+  self::expect(n0, let final self::Class #t92 = v in let final self::Number #t93 = self::ClassExtension|get#property(#t92) in let final self::Number #t94 = self::ClassExtension|set#property(#t92, self::NumberExtension|+(#t93, 1)) in #t93);
+  self::expect(n1, let final self::Class #t95 = v in let final self::Number #t96 = self::ClassExtension|get#property(#t95) in let final self::Number #t97 = self::ClassExtension|set#property(#t95, self::NumberExtension|-(#t96, 1)) in #t96);
   self::expect(n0, self::ClassExtension|get#property(v));
   self::expect(n0, self::ClassExtension|get#property(v));
-  let final self::Class* #t98 = v in self::ClassExtension|set#property(#t98, self::NumberExtension|+(self::ClassExtension|get#property(#t98), n1));
+  let final self::Class #t98 = v in self::ClassExtension|set#property(#t98, self::NumberExtension|+(self::ClassExtension|get#property(#t98), n1));
   self::expect(n1, self::ClassExtension|get#property(v));
-  let final self::Class* #t99 = v in self::ClassExtension|set#property(#t99, self::NumberExtension|+(self::ClassExtension|get#property(#t99), n1));
+  let final self::Class #t99 = v in self::ClassExtension|set#property(#t99, self::NumberExtension|+(self::ClassExtension|get#property(#t99), n1));
   self::expect(n2, self::ClassExtension|get#property(v));
-  let final self::Class* #t100 = v in self::ClassExtension|set#property(#t100, self::NumberExtension|-(self::ClassExtension|get#property(#t100), n2));
+  let final self::Class #t100 = v in self::ClassExtension|set#property(#t100, self::NumberExtension|-(self::ClassExtension|get#property(#t100), n2));
   self::expect(n0, self::ClassExtension|get#property(v));
-  let final self::Class* #t101 = v in self::ClassExtension|set#property(#t101, self::NumberExtension|+(self::ClassExtension|get#property(#t101), n1));
+  let final self::Class #t101 = v in self::ClassExtension|set#property(#t101, self::NumberExtension|+(self::ClassExtension|get#property(#t101), n1));
   self::expect(n1, self::ClassExtension|get#property(v));
-  let final self::Class* #t102 = v in self::ClassExtension|set#property(#t102, self::NumberExtension|-(self::ClassExtension|get#property(#t102), n1));
+  let final self::Class #t102 = v in self::ClassExtension|set#property(#t102, self::NumberExtension|-(self::ClassExtension|get#property(#t102), n1));
   self::expect(n0, self::ClassExtension|get#property(v));
-  let final self::Class* #t103 = v in let final self::Number* #t104 = self::NumberExtension|+(self::ClassExtension|get#property(#t103), 1) in let final void #t105 = self::ClassExtension|set#property(#t103, #t104) in #t104;
+  let final self::Class #t103 = v in let final self::Number #t104 = self::NumberExtension|+(self::ClassExtension|get#property(#t103), 1) in let final void #t105 = self::ClassExtension|set#property(#t103, #t104) in #t104;
   self::expect(n1, self::ClassExtension|get#property(v));
-  let final self::Class* #t106 = v in let final self::Number* #t107 = self::NumberExtension|-(self::ClassExtension|get#property(#t106), 1) in let final void #t108 = self::ClassExtension|set#property(#t106, #t107) in #t107;
+  let final self::Class #t106 = v in let final self::Number #t107 = self::NumberExtension|-(self::ClassExtension|get#property(#t106), 1) in let final void #t108 = self::ClassExtension|set#property(#t106, #t107) in #t107;
   self::expect(n0, self::ClassExtension|get#property(v));
-  let final self::Class* #t109 = v in self::ClassExtension|set#property(#t109, self::NumberExtension|+(self::ClassExtension|get#property(#t109), 1));
+  let final self::Class #t109 = v in self::ClassExtension|set#property(#t109, self::NumberExtension|+(self::ClassExtension|get#property(#t109), 1));
   self::expect(n1, self::ClassExtension|get#property(v));
-  let final self::Class* #t110 = v in self::ClassExtension|set#property(#t110, self::NumberExtension|-(self::ClassExtension|get#property(#t110), 1));
+  let final self::Class #t110 = v in self::ClassExtension|set#property(#t110, self::NumberExtension|-(self::ClassExtension|get#property(#t110), 1));
   self::expect(n0, self::ClassExtension|get#property(v));
 }
 static method testIntProperties() → dynamic {
-  core::int* n0 = 0;
-  core::int* n1 = 1;
-  core::int* n2 = 2;
-  self::IntClass* v = new self::IntClass::•(n0);
-  self::expect(n0, v.{self::IntClass::field}{core::int*});
-  self::expect(n1, let final self::IntClass* #t111 = v in #t111.{self::IntClass::field} = #t111.{self::IntClass::field}{core::int*}.{core::num::+}(n1){(core::num*) →* core::int*});
-  self::expect(n2, let final self::IntClass* #t112 = v in #t112.{self::IntClass::field} = #t112.{self::IntClass::field}{core::int*}.{core::num::+}(n1){(core::num*) →* core::int*});
-  self::expect(n0, let final self::IntClass* #t113 = v in #t113.{self::IntClass::field} = #t113.{self::IntClass::field}{core::int*}.{core::num::-}(n2){(core::num*) →* core::int*});
-  self::expect(n1, let final self::IntClass* #t114 = v in #t114.{self::IntClass::field} = #t114.{self::IntClass::field}{core::int*}.{core::num::+}(n1){(core::num*) →* core::int*});
-  self::expect(n0, let final self::IntClass* #t115 = v in #t115.{self::IntClass::field} = #t115.{self::IntClass::field}{core::int*}.{core::num::-}(n1){(core::num*) →* core::int*});
-  self::expect(n1, let final self::IntClass* #t116 = v in #t116.{self::IntClass::field} = #t116.{self::IntClass::field}{core::int*}.{core::num::+}(1){(core::num*) →* core::int*});
-  self::expect(n0, let final self::IntClass* #t117 = v in #t117.{self::IntClass::field} = #t117.{self::IntClass::field}{core::int*}.{core::num::-}(1){(core::num*) →* core::int*});
-  self::expect(n0, let final self::IntClass* #t118 = v in let final core::int* #t119 = #t118.{self::IntClass::field}{core::int*} in let final core::int* #t120 = #t118.{self::IntClass::field} = #t119.{core::num::+}(1){(core::num*) →* core::int*} in #t119);
-  self::expect(n1, let final self::IntClass* #t121 = v in let final core::int* #t122 = #t121.{self::IntClass::field}{core::int*} in let final core::int* #t123 = #t121.{self::IntClass::field} = #t122.{core::num::-}(1){(core::num*) →* core::int*} in #t122);
-  self::expect(n0, v.{self::IntClass::field}{core::int*});
-  self::expect(n0, v.{self::IntClass::field}{core::int*});
-  let final self::IntClass* #t124 = v in #t124.{self::IntClass::field} = #t124.{self::IntClass::field}{core::int*}.{core::num::+}(n1){(core::num*) →* core::int*};
-  self::expect(n1, v.{self::IntClass::field}{core::int*});
-  let final self::IntClass* #t125 = v in #t125.{self::IntClass::field} = #t125.{self::IntClass::field}{core::int*}.{core::num::+}(n1){(core::num*) →* core::int*};
-  self::expect(n2, v.{self::IntClass::field}{core::int*});
-  let final self::IntClass* #t126 = v in #t126.{self::IntClass::field} = #t126.{self::IntClass::field}{core::int*}.{core::num::-}(n2){(core::num*) →* core::int*};
-  self::expect(n0, v.{self::IntClass::field}{core::int*});
-  let final self::IntClass* #t127 = v in #t127.{self::IntClass::field} = #t127.{self::IntClass::field}{core::int*}.{core::num::+}(n1){(core::num*) →* core::int*};
-  self::expect(n1, v.{self::IntClass::field}{core::int*});
-  let final self::IntClass* #t128 = v in #t128.{self::IntClass::field} = #t128.{self::IntClass::field}{core::int*}.{core::num::-}(n1){(core::num*) →* core::int*};
-  self::expect(n0, v.{self::IntClass::field}{core::int*});
-  let final self::IntClass* #t129 = v in #t129.{self::IntClass::field} = #t129.{self::IntClass::field}{core::int*}.{core::num::+}(1){(core::num*) →* core::int*};
-  self::expect(n1, v.{self::IntClass::field}{core::int*});
-  let final self::IntClass* #t130 = v in #t130.{self::IntClass::field} = #t130.{self::IntClass::field}{core::int*}.{core::num::-}(1){(core::num*) →* core::int*};
-  self::expect(n0, v.{self::IntClass::field}{core::int*});
-  let final self::IntClass* #t131 = v in #t131.{self::IntClass::field} = #t131.{self::IntClass::field}{core::int*}.{core::num::+}(1){(core::num*) →* core::int*};
-  self::expect(n1, v.{self::IntClass::field}{core::int*});
-  let final self::IntClass* #t132 = v in #t132.{self::IntClass::field} = #t132.{self::IntClass::field}{core::int*}.{core::num::-}(1){(core::num*) →* core::int*};
-  self::expect(n0, v.{self::IntClass::field}{core::int*});
+  core::int n0 = 0;
+  core::int n1 = 1;
+  core::int n2 = 2;
+  self::IntClass v = new self::IntClass::•(n0);
+  self::expect(n0, v.{self::IntClass::field}{core::int});
+  self::expect(n1, let final self::IntClass #t111 = v in #t111.{self::IntClass::field} = #t111.{self::IntClass::field}{core::int}.{core::num::+}(n1){(core::num) → core::int});
+  self::expect(n2, let final self::IntClass #t112 = v in #t112.{self::IntClass::field} = #t112.{self::IntClass::field}{core::int}.{core::num::+}(n1){(core::num) → core::int});
+  self::expect(n0, let final self::IntClass #t113 = v in #t113.{self::IntClass::field} = #t113.{self::IntClass::field}{core::int}.{core::num::-}(n2){(core::num) → core::int});
+  self::expect(n1, let final self::IntClass #t114 = v in #t114.{self::IntClass::field} = #t114.{self::IntClass::field}{core::int}.{core::num::+}(n1){(core::num) → core::int});
+  self::expect(n0, let final self::IntClass #t115 = v in #t115.{self::IntClass::field} = #t115.{self::IntClass::field}{core::int}.{core::num::-}(n1){(core::num) → core::int});
+  self::expect(n1, let final self::IntClass #t116 = v in #t116.{self::IntClass::field} = #t116.{self::IntClass::field}{core::int}.{core::num::+}(1){(core::num) → core::int});
+  self::expect(n0, let final self::IntClass #t117 = v in #t117.{self::IntClass::field} = #t117.{self::IntClass::field}{core::int}.{core::num::-}(1){(core::num) → core::int});
+  self::expect(n0, let final self::IntClass #t118 = v in let final core::int #t119 = #t118.{self::IntClass::field}{core::int} in let final core::int #t120 = #t118.{self::IntClass::field} = #t119.{core::num::+}(1){(core::num) → core::int} in #t119);
+  self::expect(n1, let final self::IntClass #t121 = v in let final core::int #t122 = #t121.{self::IntClass::field}{core::int} in let final core::int #t123 = #t121.{self::IntClass::field} = #t122.{core::num::-}(1){(core::num) → core::int} in #t122);
+  self::expect(n0, v.{self::IntClass::field}{core::int});
+  self::expect(n0, v.{self::IntClass::field}{core::int});
+  let final self::IntClass #t124 = v in #t124.{self::IntClass::field} = #t124.{self::IntClass::field}{core::int}.{core::num::+}(n1){(core::num) → core::int};
+  self::expect(n1, v.{self::IntClass::field}{core::int});
+  let final self::IntClass #t125 = v in #t125.{self::IntClass::field} = #t125.{self::IntClass::field}{core::int}.{core::num::+}(n1){(core::num) → core::int};
+  self::expect(n2, v.{self::IntClass::field}{core::int});
+  let final self::IntClass #t126 = v in #t126.{self::IntClass::field} = #t126.{self::IntClass::field}{core::int}.{core::num::-}(n2){(core::num) → core::int};
+  self::expect(n0, v.{self::IntClass::field}{core::int});
+  let final self::IntClass #t127 = v in #t127.{self::IntClass::field} = #t127.{self::IntClass::field}{core::int}.{core::num::+}(n1){(core::num) → core::int};
+  self::expect(n1, v.{self::IntClass::field}{core::int});
+  let final self::IntClass #t128 = v in #t128.{self::IntClass::field} = #t128.{self::IntClass::field}{core::int}.{core::num::-}(n1){(core::num) → core::int};
+  self::expect(n0, v.{self::IntClass::field}{core::int});
+  let final self::IntClass #t129 = v in #t129.{self::IntClass::field} = #t129.{self::IntClass::field}{core::int}.{core::num::+}(1){(core::num) → core::int};
+  self::expect(n1, v.{self::IntClass::field}{core::int});
+  let final self::IntClass #t130 = v in #t130.{self::IntClass::field} = #t130.{self::IntClass::field}{core::int}.{core::num::-}(1){(core::num) → core::int};
+  self::expect(n0, v.{self::IntClass::field}{core::int});
+  let final self::IntClass #t131 = v in #t131.{self::IntClass::field} = #t131.{self::IntClass::field}{core::int}.{core::num::+}(1){(core::num) → core::int};
+  self::expect(n1, v.{self::IntClass::field}{core::int});
+  let final self::IntClass #t132 = v in #t132.{self::IntClass::field} = #t132.{self::IntClass::field}{core::int}.{core::num::-}(1){(core::num) → core::int};
+  self::expect(n0, v.{self::IntClass::field}{core::int});
   self::expect(n0, self::IntClassExtension|get#property(v));
-  self::expect(n1, let final self::IntClass* #t133 = v in let final core::int* #t134 = self::IntClassExtension|get#property(#t133).{core::num::+}(n1){(core::num*) →* core::int*} in let final void #t135 = self::IntClassExtension|set#property(#t133, #t134) in #t134);
-  self::expect(n2, let final self::IntClass* #t136 = v in let final core::int* #t137 = self::IntClassExtension|get#property(#t136).{core::num::+}(n1){(core::num*) →* core::int*} in let final void #t138 = self::IntClassExtension|set#property(#t136, #t137) in #t137);
-  self::expect(n0, let final self::IntClass* #t139 = v in let final core::int* #t140 = self::IntClassExtension|get#property(#t139).{core::num::-}(n2){(core::num*) →* core::int*} in let final void #t141 = self::IntClassExtension|set#property(#t139, #t140) in #t140);
-  self::expect(n1, let final self::IntClass* #t142 = v in let final core::int* #t143 = self::IntClassExtension|get#property(#t142).{core::num::+}(n1){(core::num*) →* core::int*} in let final void #t144 = self::IntClassExtension|set#property(#t142, #t143) in #t143);
-  self::expect(n0, let final self::IntClass* #t145 = v in let final core::int* #t146 = self::IntClassExtension|get#property(#t145).{core::num::-}(n1){(core::num*) →* core::int*} in let final void #t147 = self::IntClassExtension|set#property(#t145, #t146) in #t146);
-  self::expect(n1, let final self::IntClass* #t148 = v in let final core::int* #t149 = self::IntClassExtension|get#property(#t148).{core::num::+}(1){(core::num*) →* core::int*} in let final void #t150 = self::IntClassExtension|set#property(#t148, #t149) in #t149);
-  self::expect(n0, let final self::IntClass* #t151 = v in let final core::int* #t152 = self::IntClassExtension|get#property(#t151).{core::num::-}(1){(core::num*) →* core::int*} in let final void #t153 = self::IntClassExtension|set#property(#t151, #t152) in #t152);
-  self::expect(n0, let final self::IntClass* #t154 = v in let final core::int* #t155 = self::IntClassExtension|get#property(#t154) in let final core::int* #t156 = self::IntClassExtension|set#property(#t154, #t155.{core::num::+}(1){(core::num*) →* core::int*}) in #t155);
-  self::expect(n1, let final self::IntClass* #t157 = v in let final core::int* #t158 = self::IntClassExtension|get#property(#t157) in let final core::int* #t159 = self::IntClassExtension|set#property(#t157, #t158.{core::num::-}(1){(core::num*) →* core::int*}) in #t158);
+  self::expect(n1, let final self::IntClass #t133 = v in let final core::int #t134 = self::IntClassExtension|get#property(#t133).{core::num::+}(n1){(core::num) → core::int} in let final void #t135 = self::IntClassExtension|set#property(#t133, #t134) in #t134);
+  self::expect(n2, let final self::IntClass #t136 = v in let final core::int #t137 = self::IntClassExtension|get#property(#t136).{core::num::+}(n1){(core::num) → core::int} in let final void #t138 = self::IntClassExtension|set#property(#t136, #t137) in #t137);
+  self::expect(n0, let final self::IntClass #t139 = v in let final core::int #t140 = self::IntClassExtension|get#property(#t139).{core::num::-}(n2){(core::num) → core::int} in let final void #t141 = self::IntClassExtension|set#property(#t139, #t140) in #t140);
+  self::expect(n1, let final self::IntClass #t142 = v in let final core::int #t143 = self::IntClassExtension|get#property(#t142).{core::num::+}(n1){(core::num) → core::int} in let final void #t144 = self::IntClassExtension|set#property(#t142, #t143) in #t143);
+  self::expect(n0, let final self::IntClass #t145 = v in let final core::int #t146 = self::IntClassExtension|get#property(#t145).{core::num::-}(n1){(core::num) → core::int} in let final void #t147 = self::IntClassExtension|set#property(#t145, #t146) in #t146);
+  self::expect(n1, let final self::IntClass #t148 = v in let final core::int #t149 = self::IntClassExtension|get#property(#t148).{core::num::+}(1){(core::num) → core::int} in let final void #t150 = self::IntClassExtension|set#property(#t148, #t149) in #t149);
+  self::expect(n0, let final self::IntClass #t151 = v in let final core::int #t152 = self::IntClassExtension|get#property(#t151).{core::num::-}(1){(core::num) → core::int} in let final void #t153 = self::IntClassExtension|set#property(#t151, #t152) in #t152);
+  self::expect(n0, let final self::IntClass #t154 = v in let final core::int #t155 = self::IntClassExtension|get#property(#t154) in let final core::int #t156 = self::IntClassExtension|set#property(#t154, #t155.{core::num::+}(1){(core::num) → core::int}) in #t155);
+  self::expect(n1, let final self::IntClass #t157 = v in let final core::int #t158 = self::IntClassExtension|get#property(#t157) in let final core::int #t159 = self::IntClassExtension|set#property(#t157, #t158.{core::num::-}(1){(core::num) → core::int}) in #t158);
   self::expect(n0, self::IntClassExtension|get#property(v));
   self::expect(n0, self::IntClassExtension|get#property(v));
-  let final self::IntClass* #t160 = v in self::IntClassExtension|set#property(#t160, self::IntClassExtension|get#property(#t160).{core::num::+}(n1){(core::num*) →* core::int*});
+  let final self::IntClass #t160 = v in self::IntClassExtension|set#property(#t160, self::IntClassExtension|get#property(#t160).{core::num::+}(n1){(core::num) → core::int});
   self::expect(n1, self::IntClassExtension|get#property(v));
-  let final self::IntClass* #t161 = v in self::IntClassExtension|set#property(#t161, self::IntClassExtension|get#property(#t161).{core::num::+}(n1){(core::num*) →* core::int*});
+  let final self::IntClass #t161 = v in self::IntClassExtension|set#property(#t161, self::IntClassExtension|get#property(#t161).{core::num::+}(n1){(core::num) → core::int});
   self::expect(n2, self::IntClassExtension|get#property(v));
-  let final self::IntClass* #t162 = v in self::IntClassExtension|set#property(#t162, self::IntClassExtension|get#property(#t162).{core::num::-}(n2){(core::num*) →* core::int*});
+  let final self::IntClass #t162 = v in self::IntClassExtension|set#property(#t162, self::IntClassExtension|get#property(#t162).{core::num::-}(n2){(core::num) → core::int});
   self::expect(n0, self::IntClassExtension|get#property(v));
-  let final self::IntClass* #t163 = v in self::IntClassExtension|set#property(#t163, self::IntClassExtension|get#property(#t163).{core::num::+}(n1){(core::num*) →* core::int*});
+  let final self::IntClass #t163 = v in self::IntClassExtension|set#property(#t163, self::IntClassExtension|get#property(#t163).{core::num::+}(n1){(core::num) → core::int});
   self::expect(n1, self::IntClassExtension|get#property(v));
-  let final self::IntClass* #t164 = v in self::IntClassExtension|set#property(#t164, self::IntClassExtension|get#property(#t164).{core::num::-}(n1){(core::num*) →* core::int*});
+  let final self::IntClass #t164 = v in self::IntClassExtension|set#property(#t164, self::IntClassExtension|get#property(#t164).{core::num::-}(n1){(core::num) → core::int});
   self::expect(n0, self::IntClassExtension|get#property(v));
-  let final self::IntClass* #t165 = v in let final core::int* #t166 = self::IntClassExtension|get#property(#t165).{core::num::+}(1){(core::num*) →* core::int*} in let final void #t167 = self::IntClassExtension|set#property(#t165, #t166) in #t166;
+  let final self::IntClass #t165 = v in let final core::int #t166 = self::IntClassExtension|get#property(#t165).{core::num::+}(1){(core::num) → core::int} in let final void #t167 = self::IntClassExtension|set#property(#t165, #t166) in #t166;
   self::expect(n1, self::IntClassExtension|get#property(v));
-  let final self::IntClass* #t168 = v in let final core::int* #t169 = self::IntClassExtension|get#property(#t168).{core::num::-}(1){(core::num*) →* core::int*} in let final void #t170 = self::IntClassExtension|set#property(#t168, #t169) in #t169;
+  let final self::IntClass #t168 = v in let final core::int #t169 = self::IntClassExtension|get#property(#t168).{core::num::-}(1){(core::num) → core::int} in let final void #t170 = self::IntClassExtension|set#property(#t168, #t169) in #t169;
   self::expect(n0, self::IntClassExtension|get#property(v));
-  let final self::IntClass* #t171 = v in self::IntClassExtension|set#property(#t171, self::IntClassExtension|get#property(#t171).{core::num::+}(1){(core::num*) →* core::int*});
+  let final self::IntClass #t171 = v in self::IntClassExtension|set#property(#t171, self::IntClassExtension|get#property(#t171).{core::num::+}(1){(core::num) → core::int});
   self::expect(n1, self::IntClassExtension|get#property(v));
-  let final self::IntClass* #t172 = v in self::IntClassExtension|set#property(#t172, self::IntClassExtension|get#property(#t172).{core::num::-}(1){(core::num*) →* core::int*});
+  let final self::IntClass #t172 = v in self::IntClassExtension|set#property(#t172, self::IntClassExtension|get#property(#t172).{core::num::-}(1){(core::num) → core::int});
   self::expect(n0, self::IntClassExtension|get#property(v));
 }
 static method testExplicitProperties() → dynamic {
-  self::Number* n0 = new self::Number::•(0);
-  self::Number* n1 = new self::Number::•(1);
-  self::Number* n2 = new self::Number::•(2);
-  self::Class* v = new self::Class::•(n0);
+  self::Number n0 = new self::Number::•(0);
+  self::Number n1 = new self::Number::•(1);
+  self::Number n2 = new self::Number::•(2);
+  self::Class v = new self::Class::•(n0);
   self::expect(n0, self::ClassExtension|get#property(v));
-  self::expect(n1, let final self::Class* #t173 = v in let final self::Number* #t174 = self::NumberExtension|+(self::ClassExtension|get#property(#t173), n1) in let final void #t175 = self::ClassExtension|set#property(#t173, #t174) in #t174);
-  self::expect(n2, let final self::Class* #t176 = v in let final self::Number* #t177 = self::NumberExtension|+(self::ClassExtension|get#property(#t176), n1) in let final void #t178 = self::ClassExtension|set#property(#t176, #t177) in #t177);
-  self::expect(n0, let final self::Class* #t179 = v in let final self::Number* #t180 = self::NumberExtension|-(self::ClassExtension|get#property(#t179), n2) in let final void #t181 = self::ClassExtension|set#property(#t179, #t180) in #t180);
-  self::expect(n1, let final self::Class* #t182 = v in let final self::Number* #t183 = self::NumberExtension|+(self::ClassExtension|get#property(#t182), n1) in let final void #t184 = self::ClassExtension|set#property(#t182, #t183) in #t183);
-  self::expect(n0, let final self::Class* #t185 = v in let final self::Number* #t186 = self::NumberExtension|-(self::ClassExtension|get#property(#t185), n1) in let final void #t187 = self::ClassExtension|set#property(#t185, #t186) in #t186);
-  self::expect(n1, let final self::Class* #t188 = v in let final self::Number* #t189 = self::NumberExtension|+(self::ClassExtension|get#property(#t188), 1) in let final void #t190 = self::ClassExtension|set#property(#t188, #t189) in #t189);
-  self::expect(n0, let final self::Class* #t191 = v in let final self::Number* #t192 = self::NumberExtension|-(self::ClassExtension|get#property(#t191), 1) in let final void #t193 = self::ClassExtension|set#property(#t191, #t192) in #t192);
-  self::expect(n0, let final self::Class* #t194 = v in let final self::Number* #t195 = self::ClassExtension|get#property(#t194) in let final self::Number* #t196 = let final self::Number* #t197 = self::NumberExtension|+(#t195, 1) in let final void #t198 = self::ClassExtension|set#property(#t194, #t197) in #t197 in #t195);
-  self::expect(n1, let final self::Class* #t199 = v in let final self::Number* #t200 = self::ClassExtension|get#property(#t199) in let final self::Number* #t201 = let final self::Number* #t202 = self::NumberExtension|-(#t200, 1) in let final void #t203 = self::ClassExtension|set#property(#t199, #t202) in #t202 in #t200);
+  self::expect(n1, let final self::Class #t173 = v in let final self::Number #t174 = self::NumberExtension|+(self::ClassExtension|get#property(#t173), n1) in let final void #t175 = self::ClassExtension|set#property(#t173, #t174) in #t174);
+  self::expect(n2, let final self::Class #t176 = v in let final self::Number #t177 = self::NumberExtension|+(self::ClassExtension|get#property(#t176), n1) in let final void #t178 = self::ClassExtension|set#property(#t176, #t177) in #t177);
+  self::expect(n0, let final self::Class #t179 = v in let final self::Number #t180 = self::NumberExtension|-(self::ClassExtension|get#property(#t179), n2) in let final void #t181 = self::ClassExtension|set#property(#t179, #t180) in #t180);
+  self::expect(n1, let final self::Class #t182 = v in let final self::Number #t183 = self::NumberExtension|+(self::ClassExtension|get#property(#t182), n1) in let final void #t184 = self::ClassExtension|set#property(#t182, #t183) in #t183);
+  self::expect(n0, let final self::Class #t185 = v in let final self::Number #t186 = self::NumberExtension|-(self::ClassExtension|get#property(#t185), n1) in let final void #t187 = self::ClassExtension|set#property(#t185, #t186) in #t186);
+  self::expect(n1, let final self::Class #t188 = v in let final self::Number #t189 = self::NumberExtension|+(self::ClassExtension|get#property(#t188), 1) in let final void #t190 = self::ClassExtension|set#property(#t188, #t189) in #t189);
+  self::expect(n0, let final self::Class #t191 = v in let final self::Number #t192 = self::NumberExtension|-(self::ClassExtension|get#property(#t191), 1) in let final void #t193 = self::ClassExtension|set#property(#t191, #t192) in #t192);
+  self::expect(n0, let final self::Class #t194 = v in let final self::Number #t195 = self::ClassExtension|get#property(#t194) in let final self::Number #t196 = let final self::Number #t197 = self::NumberExtension|+(#t195, 1) in let final void #t198 = self::ClassExtension|set#property(#t194, #t197) in #t197 in #t195);
+  self::expect(n1, let final self::Class #t199 = v in let final self::Number #t200 = self::ClassExtension|get#property(#t199) in let final self::Number #t201 = let final self::Number #t202 = self::NumberExtension|-(#t200, 1) in let final void #t203 = self::ClassExtension|set#property(#t199, #t202) in #t202 in #t200);
   self::expect(n0, self::ClassExtension|get#property(v));
   self::expect(n0, self::ClassExtension|get#property(v));
-  let final self::Class* #t204 = v in self::ClassExtension|set#property(#t204, self::NumberExtension|+(self::ClassExtension|get#property(#t204), n1));
+  let final self::Class #t204 = v in self::ClassExtension|set#property(#t204, self::NumberExtension|+(self::ClassExtension|get#property(#t204), n1));
   self::expect(n1, self::ClassExtension|get#property(v));
-  let final self::Class* #t205 = v in self::ClassExtension|set#property(#t205, self::NumberExtension|+(self::ClassExtension|get#property(#t205), n1));
+  let final self::Class #t205 = v in self::ClassExtension|set#property(#t205, self::NumberExtension|+(self::ClassExtension|get#property(#t205), n1));
   self::expect(n2, self::ClassExtension|get#property(v));
-  let final self::Class* #t206 = v in self::ClassExtension|set#property(#t206, self::NumberExtension|-(self::ClassExtension|get#property(#t206), n2));
+  let final self::Class #t206 = v in self::ClassExtension|set#property(#t206, self::NumberExtension|-(self::ClassExtension|get#property(#t206), n2));
   self::expect(n0, self::ClassExtension|get#property(v));
-  let final self::Class* #t207 = v in self::ClassExtension|set#property(#t207, self::NumberExtension|+(self::ClassExtension|get#property(#t207), n1));
+  let final self::Class #t207 = v in self::ClassExtension|set#property(#t207, self::NumberExtension|+(self::ClassExtension|get#property(#t207), n1));
   self::expect(n1, self::ClassExtension|get#property(v));
-  let final self::Class* #t208 = v in self::ClassExtension|set#property(#t208, self::NumberExtension|-(self::ClassExtension|get#property(#t208), n1));
+  let final self::Class #t208 = v in self::ClassExtension|set#property(#t208, self::NumberExtension|-(self::ClassExtension|get#property(#t208), n1));
   self::expect(n0, self::ClassExtension|get#property(v));
-  let final self::Class* #t209 = v in let final self::Number* #t210 = self::NumberExtension|+(self::ClassExtension|get#property(#t209), 1) in let final void #t211 = self::ClassExtension|set#property(#t209, #t210) in #t210;
+  let final self::Class #t209 = v in let final self::Number #t210 = self::NumberExtension|+(self::ClassExtension|get#property(#t209), 1) in let final void #t211 = self::ClassExtension|set#property(#t209, #t210) in #t210;
   self::expect(n1, self::ClassExtension|get#property(v));
-  let final self::Class* #t212 = v in let final self::Number* #t213 = self::NumberExtension|-(self::ClassExtension|get#property(#t212), 1) in let final void #t214 = self::ClassExtension|set#property(#t212, #t213) in #t213;
+  let final self::Class #t212 = v in let final self::Number #t213 = self::NumberExtension|-(self::ClassExtension|get#property(#t212), 1) in let final void #t214 = self::ClassExtension|set#property(#t212, #t213) in #t213;
   self::expect(n0, self::ClassExtension|get#property(v));
-  let final self::Class* #t215 = v in self::ClassExtension|set#property(#t215, self::NumberExtension|+(self::ClassExtension|get#property(#t215), 1));
+  let final self::Class #t215 = v in self::ClassExtension|set#property(#t215, self::NumberExtension|+(self::ClassExtension|get#property(#t215), 1));
   self::expect(n1, self::ClassExtension|get#property(v));
-  let final self::Class* #t216 = v in self::ClassExtension|set#property(#t216, self::NumberExtension|-(self::ClassExtension|get#property(#t216), 1));
+  let final self::Class #t216 = v in self::ClassExtension|set#property(#t216, self::NumberExtension|-(self::ClassExtension|get#property(#t216), 1));
   self::expect(n0, self::ClassExtension|get#property(v));
 }
 static method testExplicitIntProperties() → dynamic {
-  core::int* n0 = 0;
-  core::int* n1 = 1;
-  core::int* n2 = 2;
-  self::IntClass* v = new self::IntClass::•(n0);
+  core::int n0 = 0;
+  core::int n1 = 1;
+  core::int n2 = 2;
+  self::IntClass v = new self::IntClass::•(n0);
   self::expect(n0, self::IntClassExtension|get#property(v));
-  self::expect(n1, let final self::IntClass* #t217 = v in let final core::int* #t218 = self::IntClassExtension|get#property(#t217).{core::num::+}(n1){(core::num*) →* core::int*} in let final void #t219 = self::IntClassExtension|set#property(#t217, #t218) in #t218);
-  self::expect(n2, let final self::IntClass* #t220 = v in let final core::int* #t221 = self::IntClassExtension|get#property(#t220).{core::num::+}(n1){(core::num*) →* core::int*} in let final void #t222 = self::IntClassExtension|set#property(#t220, #t221) in #t221);
-  self::expect(n0, let final self::IntClass* #t223 = v in let final core::int* #t224 = self::IntClassExtension|get#property(#t223).{core::num::-}(n2){(core::num*) →* core::int*} in let final void #t225 = self::IntClassExtension|set#property(#t223, #t224) in #t224);
-  self::expect(n1, let final self::IntClass* #t226 = v in let final core::int* #t227 = self::IntClassExtension|get#property(#t226).{core::num::+}(n1){(core::num*) →* core::int*} in let final void #t228 = self::IntClassExtension|set#property(#t226, #t227) in #t227);
-  self::expect(n0, let final self::IntClass* #t229 = v in let final core::int* #t230 = self::IntClassExtension|get#property(#t229).{core::num::-}(n1){(core::num*) →* core::int*} in let final void #t231 = self::IntClassExtension|set#property(#t229, #t230) in #t230);
-  self::expect(n1, let final self::IntClass* #t232 = v in let final core::int* #t233 = self::IntClassExtension|get#property(#t232).{core::num::+}(1){(core::num*) →* core::int*} in let final void #t234 = self::IntClassExtension|set#property(#t232, #t233) in #t233);
-  self::expect(n0, let final self::IntClass* #t235 = v in let final core::int* #t236 = self::IntClassExtension|get#property(#t235).{core::num::-}(1){(core::num*) →* core::int*} in let final void #t237 = self::IntClassExtension|set#property(#t235, #t236) in #t236);
-  self::expect(n0, let final self::IntClass* #t238 = v in let final core::int* #t239 = self::IntClassExtension|get#property(#t238) in let final core::int* #t240 = let final core::int* #t241 = #t239.{core::num::+}(1){(core::num*) →* core::int*} in let final void #t242 = self::IntClassExtension|set#property(#t238, #t241) in #t241 in #t239);
-  self::expect(n1, let final self::IntClass* #t243 = v in let final core::int* #t244 = self::IntClassExtension|get#property(#t243) in let final core::int* #t245 = let final core::int* #t246 = #t244.{core::num::-}(1){(core::num*) →* core::int*} in let final void #t247 = self::IntClassExtension|set#property(#t243, #t246) in #t246 in #t244);
+  self::expect(n1, let final self::IntClass #t217 = v in let final core::int #t218 = self::IntClassExtension|get#property(#t217).{core::num::+}(n1){(core::num) → core::int} in let final void #t219 = self::IntClassExtension|set#property(#t217, #t218) in #t218);
+  self::expect(n2, let final self::IntClass #t220 = v in let final core::int #t221 = self::IntClassExtension|get#property(#t220).{core::num::+}(n1){(core::num) → core::int} in let final void #t222 = self::IntClassExtension|set#property(#t220, #t221) in #t221);
+  self::expect(n0, let final self::IntClass #t223 = v in let final core::int #t224 = self::IntClassExtension|get#property(#t223).{core::num::-}(n2){(core::num) → core::int} in let final void #t225 = self::IntClassExtension|set#property(#t223, #t224) in #t224);
+  self::expect(n1, let final self::IntClass #t226 = v in let final core::int #t227 = self::IntClassExtension|get#property(#t226).{core::num::+}(n1){(core::num) → core::int} in let final void #t228 = self::IntClassExtension|set#property(#t226, #t227) in #t227);
+  self::expect(n0, let final self::IntClass #t229 = v in let final core::int #t230 = self::IntClassExtension|get#property(#t229).{core::num::-}(n1){(core::num) → core::int} in let final void #t231 = self::IntClassExtension|set#property(#t229, #t230) in #t230);
+  self::expect(n1, let final self::IntClass #t232 = v in let final core::int #t233 = self::IntClassExtension|get#property(#t232).{core::num::+}(1){(core::num) → core::int} in let final void #t234 = self::IntClassExtension|set#property(#t232, #t233) in #t233);
+  self::expect(n0, let final self::IntClass #t235 = v in let final core::int #t236 = self::IntClassExtension|get#property(#t235).{core::num::-}(1){(core::num) → core::int} in let final void #t237 = self::IntClassExtension|set#property(#t235, #t236) in #t236);
+  self::expect(n0, let final self::IntClass #t238 = v in let final core::int #t239 = self::IntClassExtension|get#property(#t238) in let final core::int #t240 = let final core::int #t241 = #t239.{core::num::+}(1){(core::num) → core::int} in let final void #t242 = self::IntClassExtension|set#property(#t238, #t241) in #t241 in #t239);
+  self::expect(n1, let final self::IntClass #t243 = v in let final core::int #t244 = self::IntClassExtension|get#property(#t243) in let final core::int #t245 = let final core::int #t246 = #t244.{core::num::-}(1){(core::num) → core::int} in let final void #t247 = self::IntClassExtension|set#property(#t243, #t246) in #t246 in #t244);
   self::expect(n0, self::IntClassExtension|get#property(v));
   self::expect(n0, self::IntClassExtension|get#property(v));
-  let final self::IntClass* #t248 = v in self::IntClassExtension|set#property(#t248, self::IntClassExtension|get#property(#t248).{core::num::+}(n1){(core::num*) →* core::int*});
+  let final self::IntClass #t248 = v in self::IntClassExtension|set#property(#t248, self::IntClassExtension|get#property(#t248).{core::num::+}(n1){(core::num) → core::int});
   self::expect(n1, self::IntClassExtension|get#property(v));
-  let final self::IntClass* #t249 = v in self::IntClassExtension|set#property(#t249, self::IntClassExtension|get#property(#t249).{core::num::+}(n1){(core::num*) →* core::int*});
+  let final self::IntClass #t249 = v in self::IntClassExtension|set#property(#t249, self::IntClassExtension|get#property(#t249).{core::num::+}(n1){(core::num) → core::int});
   self::expect(n2, self::IntClassExtension|get#property(v));
-  let final self::IntClass* #t250 = v in self::IntClassExtension|set#property(#t250, self::IntClassExtension|get#property(#t250).{core::num::-}(n2){(core::num*) →* core::int*});
+  let final self::IntClass #t250 = v in self::IntClassExtension|set#property(#t250, self::IntClassExtension|get#property(#t250).{core::num::-}(n2){(core::num) → core::int});
   self::expect(n0, self::IntClassExtension|get#property(v));
-  let final self::IntClass* #t251 = v in self::IntClassExtension|set#property(#t251, self::IntClassExtension|get#property(#t251).{core::num::+}(n1){(core::num*) →* core::int*});
+  let final self::IntClass #t251 = v in self::IntClassExtension|set#property(#t251, self::IntClassExtension|get#property(#t251).{core::num::+}(n1){(core::num) → core::int});
   self::expect(n1, self::IntClassExtension|get#property(v));
-  let final self::IntClass* #t252 = v in self::IntClassExtension|set#property(#t252, self::IntClassExtension|get#property(#t252).{core::num::-}(n1){(core::num*) →* core::int*});
+  let final self::IntClass #t252 = v in self::IntClassExtension|set#property(#t252, self::IntClassExtension|get#property(#t252).{core::num::-}(n1){(core::num) → core::int});
   self::expect(n0, self::IntClassExtension|get#property(v));
-  let final self::IntClass* #t253 = v in let final core::int* #t254 = self::IntClassExtension|get#property(#t253).{core::num::+}(1){(core::num*) →* core::int*} in let final void #t255 = self::IntClassExtension|set#property(#t253, #t254) in #t254;
+  let final self::IntClass #t253 = v in let final core::int #t254 = self::IntClassExtension|get#property(#t253).{core::num::+}(1){(core::num) → core::int} in let final void #t255 = self::IntClassExtension|set#property(#t253, #t254) in #t254;
   self::expect(n1, self::IntClassExtension|get#property(v));
-  let final self::IntClass* #t256 = v in let final core::int* #t257 = self::IntClassExtension|get#property(#t256).{core::num::-}(1){(core::num*) →* core::int*} in let final void #t258 = self::IntClassExtension|set#property(#t256, #t257) in #t257;
+  let final self::IntClass #t256 = v in let final core::int #t257 = self::IntClassExtension|get#property(#t256).{core::num::-}(1){(core::num) → core::int} in let final void #t258 = self::IntClassExtension|set#property(#t256, #t257) in #t257;
   self::expect(n0, self::IntClassExtension|get#property(v));
-  let final self::IntClass* #t259 = v in self::IntClassExtension|set#property(#t259, self::IntClassExtension|get#property(#t259).{core::num::+}(1){(core::num*) →* core::int*});
+  let final self::IntClass #t259 = v in self::IntClassExtension|set#property(#t259, self::IntClassExtension|get#property(#t259).{core::num::+}(1){(core::num) → core::int});
   self::expect(n1, self::IntClassExtension|get#property(v));
-  let final self::IntClass* #t260 = v in self::IntClassExtension|set#property(#t260, self::IntClassExtension|get#property(#t260).{core::num::-}(1){(core::num*) →* core::int*});
+  let final self::IntClass #t260 = v in self::IntClassExtension|set#property(#t260, self::IntClassExtension|get#property(#t260).{core::num::-}(1){(core::num) → core::int});
   self::expect(n0, self::IntClassExtension|get#property(v));
 }
-static method testExplicitNullAwareProperties(self::Class* v) → dynamic {
-  self::Number* n0 = new self::Number::•(0);
-  self::Number* n1 = new self::Number::•(1);
-  self::Number* n2 = new self::Number::•(2);
-  self::expect(n0, let final self::Class* #t261 = v in #t261 == null ?{self::Number*} null : self::ClassExtension|get#property(#t261), v == null);
-  self::expect(n1, let final self::Class* #t262 = v in #t262 == null ?{self::Number*} null : let final self::Number* #t263 = self::NumberExtension|+(self::ClassExtension|get#property(#t262), n1) in let final void #t264 = self::ClassExtension|set#property(#t262, #t263) in #t263, v == null);
-  self::expect(n2, let final self::Class* #t265 = v in #t265 == null ?{self::Number*} null : let final self::Number* #t266 = self::NumberExtension|+(self::ClassExtension|get#property(#t265), n1) in let final void #t267 = self::ClassExtension|set#property(#t265, #t266) in #t266, v == null);
-  self::expect(n0, let final self::Class* #t268 = v in #t268 == null ?{self::Number*} null : let final self::Number* #t269 = self::NumberExtension|-(self::ClassExtension|get#property(#t268), n2) in let final void #t270 = self::ClassExtension|set#property(#t268, #t269) in #t269, v == null);
-  self::expect(n1, let final self::Class* #t271 = v in #t271 == null ?{self::Number*} null : let final self::Number* #t272 = self::NumberExtension|+(self::ClassExtension|get#property(#t271), n1) in let final void #t273 = self::ClassExtension|set#property(#t271, #t272) in #t272, v == null);
-  self::expect(n0, let final self::Class* #t274 = v in #t274 == null ?{self::Number*} null : let final self::Number* #t275 = self::NumberExtension|-(self::ClassExtension|get#property(#t274), n1) in let final void #t276 = self::ClassExtension|set#property(#t274, #t275) in #t275, v == null);
-  self::expect(n1, let final self::Class* #t277 = v in #t277 == null ?{self::Number*} null : let final self::Number* #t278 = self::NumberExtension|+(self::ClassExtension|get#property(#t277), 1) in let final void #t279 = self::ClassExtension|set#property(#t277, #t278) in #t278, v == null);
-  self::expect(n0, let final self::Class* #t280 = v in #t280 == null ?{self::Number*} null : let final self::Number* #t281 = self::NumberExtension|-(self::ClassExtension|get#property(#t280), 1) in let final void #t282 = self::ClassExtension|set#property(#t280, #t281) in #t281, v == null);
-  self::expect(n0, let final self::Class* #t283 = v in #t283 == null ?{self::Number*} null : let final self::Number* #t284 = self::ClassExtension|get#property(#t283) in let final self::Number* #t285 = let final self::Number* #t286 = self::NumberExtension|+(#t284, 1) in let final void #t287 = self::ClassExtension|set#property(#t283, #t286) in #t286 in #t284, v == null);
-  self::expect(n1, let final self::Class* #t288 = v in #t288 == null ?{self::Number*} null : let final self::Number* #t289 = self::ClassExtension|get#property(#t288) in let final self::Number* #t290 = let final self::Number* #t291 = self::NumberExtension|-(#t289, 1) in let final void #t292 = self::ClassExtension|set#property(#t288, #t291) in #t291 in #t289, v == null);
-  self::expect(n0, let final self::Class* #t293 = v in #t293 == null ?{self::Number*} null : self::ClassExtension|get#property(#t293), v == null);
-  self::expect(n0, let final self::Class* #t294 = v in #t294 == null ?{self::Number*} null : self::ClassExtension|get#property(#t294), v == null);
-  let final self::Class* #t295 = v in #t295 == null ?{self::Number*} null : self::ClassExtension|set#property(#t295, self::NumberExtension|+(self::ClassExtension|get#property(#t295), n1));
-  self::expect(n1, let final self::Class* #t296 = v in #t296 == null ?{self::Number*} null : self::ClassExtension|get#property(#t296), v == null);
-  let final self::Class* #t297 = v in #t297 == null ?{self::Number*} null : self::ClassExtension|set#property(#t297, self::NumberExtension|+(self::ClassExtension|get#property(#t297), n1));
-  self::expect(n2, let final self::Class* #t298 = v in #t298 == null ?{self::Number*} null : self::ClassExtension|get#property(#t298), v == null);
-  let final self::Class* #t299 = v in #t299 == null ?{self::Number*} null : self::ClassExtension|set#property(#t299, self::NumberExtension|-(self::ClassExtension|get#property(#t299), n2));
-  self::expect(n0, let final self::Class* #t300 = v in #t300 == null ?{self::Number*} null : self::ClassExtension|get#property(#t300), v == null);
-  let final self::Class* #t301 = v in #t301 == null ?{self::Number*} null : self::ClassExtension|set#property(#t301, self::NumberExtension|+(self::ClassExtension|get#property(#t301), n1));
-  self::expect(n1, let final self::Class* #t302 = v in #t302 == null ?{self::Number*} null : self::ClassExtension|get#property(#t302), v == null);
-  let final self::Class* #t303 = v in #t303 == null ?{self::Number*} null : self::ClassExtension|set#property(#t303, self::NumberExtension|-(self::ClassExtension|get#property(#t303), n1));
-  self::expect(n0, let final self::Class* #t304 = v in #t304 == null ?{self::Number*} null : self::ClassExtension|get#property(#t304), v == null);
-  let final self::Class* #t305 = v in #t305 == null ?{self::Number*} null : let final self::Number* #t306 = self::NumberExtension|+(self::ClassExtension|get#property(#t305), 1) in let final void #t307 = self::ClassExtension|set#property(#t305, #t306) in #t306;
-  self::expect(n1, let final self::Class* #t308 = v in #t308 == null ?{self::Number*} null : self::ClassExtension|get#property(#t308), v == null);
-  let final self::Class* #t309 = v in #t309 == null ?{self::Number*} null : let final self::Number* #t310 = self::NumberExtension|-(self::ClassExtension|get#property(#t309), 1) in let final void #t311 = self::ClassExtension|set#property(#t309, #t310) in #t310;
-  self::expect(n0, let final self::Class* #t312 = v in #t312 == null ?{self::Number*} null : self::ClassExtension|get#property(#t312), v == null);
-  let final self::Class* #t313 = v in #t313 == null ?{self::Number*} null : self::ClassExtension|set#property(#t313, self::NumberExtension|+(self::ClassExtension|get#property(#t313), 1));
-  self::expect(n1, let final self::Class* #t314 = v in #t314 == null ?{self::Number*} null : self::ClassExtension|get#property(#t314), v == null);
-  let final self::Class* #t315 = v in #t315 == null ?{self::Number*} null : self::ClassExtension|set#property(#t315, self::NumberExtension|-(self::ClassExtension|get#property(#t315), 1));
-  self::expect(n0, let final self::Class* #t316 = v in #t316 == null ?{self::Number*} null : self::ClassExtension|get#property(#t316), v == null);
+static method testExplicitNullAwareProperties(self::Class? v) → dynamic {
+  self::Number n0 = new self::Number::•(0);
+  self::Number n1 = new self::Number::•(1);
+  self::Number n2 = new self::Number::•(2);
+  self::expect(n0, let final self::Class? #t261 = v in #t261 == null ?{self::Number?} null : self::ClassExtension|get#property(#t261{self::Class}), v == null);
+  self::expect(n1, let final self::Class? #t262 = v in #t262 == null ?{self::Number?} null : let final self::Number #t263 = self::NumberExtension|+(self::ClassExtension|get#property(#t262{self::Class}), n1) in let final void #t264 = self::ClassExtension|set#property(#t262{self::Class}, #t263) in #t263, v == null);
+  self::expect(n2, let final self::Class? #t265 = v in #t265 == null ?{self::Number?} null : let final self::Number #t266 = self::NumberExtension|+(self::ClassExtension|get#property(#t265{self::Class}), n1) in let final void #t267 = self::ClassExtension|set#property(#t265{self::Class}, #t266) in #t266, v == null);
+  self::expect(n0, let final self::Class? #t268 = v in #t268 == null ?{self::Number?} null : let final self::Number #t269 = self::NumberExtension|-(self::ClassExtension|get#property(#t268{self::Class}), n2) in let final void #t270 = self::ClassExtension|set#property(#t268{self::Class}, #t269) in #t269, v == null);
+  self::expect(n1, let final self::Class? #t271 = v in #t271 == null ?{self::Number?} null : let final self::Number #t272 = self::NumberExtension|+(self::ClassExtension|get#property(#t271{self::Class}), n1) in let final void #t273 = self::ClassExtension|set#property(#t271{self::Class}, #t272) in #t272, v == null);
+  self::expect(n0, let final self::Class? #t274 = v in #t274 == null ?{self::Number?} null : let final self::Number #t275 = self::NumberExtension|-(self::ClassExtension|get#property(#t274{self::Class}), n1) in let final void #t276 = self::ClassExtension|set#property(#t274{self::Class}, #t275) in #t275, v == null);
+  self::expect(n1, let final self::Class? #t277 = v in #t277 == null ?{self::Number?} null : let final self::Number #t278 = self::NumberExtension|+(self::ClassExtension|get#property(#t277{self::Class}), 1) in let final void #t279 = self::ClassExtension|set#property(#t277{self::Class}, #t278) in #t278, v == null);
+  self::expect(n0, let final self::Class? #t280 = v in #t280 == null ?{self::Number?} null : let final self::Number #t281 = self::NumberExtension|-(self::ClassExtension|get#property(#t280{self::Class}), 1) in let final void #t282 = self::ClassExtension|set#property(#t280{self::Class}, #t281) in #t281, v == null);
+  self::expect(n0, let final self::Class? #t283 = v in #t283 == null ?{self::Number?} null : let final self::Number #t284 = self::ClassExtension|get#property(#t283{self::Class}) in let final self::Number #t285 = let final self::Number #t286 = self::NumberExtension|+(#t284, 1) in let final void #t287 = self::ClassExtension|set#property(#t283{self::Class}, #t286) in #t286 in #t284, v == null);
+  self::expect(n1, let final self::Class? #t288 = v in #t288 == null ?{self::Number?} null : let final self::Number #t289 = self::ClassExtension|get#property(#t288{self::Class}) in let final self::Number #t290 = let final self::Number #t291 = self::NumberExtension|-(#t289, 1) in let final void #t292 = self::ClassExtension|set#property(#t288{self::Class}, #t291) in #t291 in #t289, v == null);
+  self::expect(n0, let final self::Class? #t293 = v in #t293 == null ?{self::Number?} null : self::ClassExtension|get#property(#t293{self::Class}), v == null);
+  self::expect(n0, let final self::Class? #t294 = v in #t294 == null ?{self::Number?} null : self::ClassExtension|get#property(#t294{self::Class}), v == null);
+  let final self::Class? #t295 = v in #t295 == null ?{self::Number?} null : self::ClassExtension|set#property(#t295{self::Class}, self::NumberExtension|+(self::ClassExtension|get#property(#t295{self::Class}), n1));
+  self::expect(n1, let final self::Class? #t296 = v in #t296 == null ?{self::Number?} null : self::ClassExtension|get#property(#t296{self::Class}), v == null);
+  let final self::Class? #t297 = v in #t297 == null ?{self::Number?} null : self::ClassExtension|set#property(#t297{self::Class}, self::NumberExtension|+(self::ClassExtension|get#property(#t297{self::Class}), n1));
+  self::expect(n2, let final self::Class? #t298 = v in #t298 == null ?{self::Number?} null : self::ClassExtension|get#property(#t298{self::Class}), v == null);
+  let final self::Class? #t299 = v in #t299 == null ?{self::Number?} null : self::ClassExtension|set#property(#t299{self::Class}, self::NumberExtension|-(self::ClassExtension|get#property(#t299{self::Class}), n2));
+  self::expect(n0, let final self::Class? #t300 = v in #t300 == null ?{self::Number?} null : self::ClassExtension|get#property(#t300{self::Class}), v == null);
+  let final self::Class? #t301 = v in #t301 == null ?{self::Number?} null : self::ClassExtension|set#property(#t301{self::Class}, self::NumberExtension|+(self::ClassExtension|get#property(#t301{self::Class}), n1));
+  self::expect(n1, let final self::Class? #t302 = v in #t302 == null ?{self::Number?} null : self::ClassExtension|get#property(#t302{self::Class}), v == null);
+  let final self::Class? #t303 = v in #t303 == null ?{self::Number?} null : self::ClassExtension|set#property(#t303{self::Class}, self::NumberExtension|-(self::ClassExtension|get#property(#t303{self::Class}), n1));
+  self::expect(n0, let final self::Class? #t304 = v in #t304 == null ?{self::Number?} null : self::ClassExtension|get#property(#t304{self::Class}), v == null);
+  let final self::Class? #t305 = v in #t305 == null ?{self::Number?} null : let final self::Number #t306 = self::NumberExtension|+(self::ClassExtension|get#property(#t305{self::Class}), 1) in let final void #t307 = self::ClassExtension|set#property(#t305{self::Class}, #t306) in #t306;
+  self::expect(n1, let final self::Class? #t308 = v in #t308 == null ?{self::Number?} null : self::ClassExtension|get#property(#t308{self::Class}), v == null);
+  let final self::Class? #t309 = v in #t309 == null ?{self::Number?} null : let final self::Number #t310 = self::NumberExtension|-(self::ClassExtension|get#property(#t309{self::Class}), 1) in let final void #t311 = self::ClassExtension|set#property(#t309{self::Class}, #t310) in #t310;
+  self::expect(n0, let final self::Class? #t312 = v in #t312 == null ?{self::Number?} null : self::ClassExtension|get#property(#t312{self::Class}), v == null);
+  let final self::Class? #t313 = v in #t313 == null ?{self::Number?} null : self::ClassExtension|set#property(#t313{self::Class}, self::NumberExtension|+(self::ClassExtension|get#property(#t313{self::Class}), 1));
+  self::expect(n1, let final self::Class? #t314 = v in #t314 == null ?{self::Number?} null : self::ClassExtension|get#property(#t314{self::Class}), v == null);
+  let final self::Class? #t315 = v in #t315 == null ?{self::Number?} null : self::ClassExtension|set#property(#t315{self::Class}, self::NumberExtension|-(self::ClassExtension|get#property(#t315{self::Class}), 1));
+  self::expect(n0, let final self::Class? #t316 = v in #t316 == null ?{self::Number?} null : self::ClassExtension|get#property(#t316{self::Class}), v == null);
 }
-static method testExplicitNullAwareIntProperties(self::IntClass* v) → dynamic {
-  core::int* n0 = 0;
-  core::int* n1 = 1;
-  core::int* n2 = 2;
-  self::expect(n0, let final self::IntClass* #t317 = v in #t317 == null ?{core::int*} null : self::IntClassExtension|get#property(#t317), v == null);
-  self::expect(n1, let final self::IntClass* #t318 = v in #t318 == null ?{core::int*} null : let final core::int* #t319 = self::IntClassExtension|get#property(#t318).{core::num::+}(n1){(core::num*) →* core::int*} in let final void #t320 = self::IntClassExtension|set#property(#t318, #t319) in #t319, v == null);
-  self::expect(n2, let final self::IntClass* #t321 = v in #t321 == null ?{core::int*} null : let final core::int* #t322 = self::IntClassExtension|get#property(#t321).{core::num::+}(n1){(core::num*) →* core::int*} in let final void #t323 = self::IntClassExtension|set#property(#t321, #t322) in #t322, v == null);
-  self::expect(n0, let final self::IntClass* #t324 = v in #t324 == null ?{core::int*} null : let final core::int* #t325 = self::IntClassExtension|get#property(#t324).{core::num::-}(n2){(core::num*) →* core::int*} in let final void #t326 = self::IntClassExtension|set#property(#t324, #t325) in #t325, v == null);
-  self::expect(n1, let final self::IntClass* #t327 = v in #t327 == null ?{core::int*} null : let final core::int* #t328 = self::IntClassExtension|get#property(#t327).{core::num::+}(n1){(core::num*) →* core::int*} in let final void #t329 = self::IntClassExtension|set#property(#t327, #t328) in #t328, v == null);
-  self::expect(n0, let final self::IntClass* #t330 = v in #t330 == null ?{core::int*} null : let final core::int* #t331 = self::IntClassExtension|get#property(#t330).{core::num::-}(n1){(core::num*) →* core::int*} in let final void #t332 = self::IntClassExtension|set#property(#t330, #t331) in #t331, v == null);
-  self::expect(n1, let final self::IntClass* #t333 = v in #t333 == null ?{core::int*} null : let final core::int* #t334 = self::IntClassExtension|get#property(#t333).{core::num::+}(1){(core::num*) →* core::int*} in let final void #t335 = self::IntClassExtension|set#property(#t333, #t334) in #t334, v == null);
-  self::expect(n0, let final self::IntClass* #t336 = v in #t336 == null ?{core::int*} null : let final core::int* #t337 = self::IntClassExtension|get#property(#t336).{core::num::-}(1){(core::num*) →* core::int*} in let final void #t338 = self::IntClassExtension|set#property(#t336, #t337) in #t337, v == null);
-  self::expect(n0, let final self::IntClass* #t339 = v in #t339 == null ?{core::int*} null : let final core::int* #t340 = self::IntClassExtension|get#property(#t339) in let final core::int* #t341 = let final core::int* #t342 = #t340.{core::num::+}(1){(core::num*) →* core::int*} in let final void #t343 = self::IntClassExtension|set#property(#t339, #t342) in #t342 in #t340, v == null);
-  self::expect(n1, let final self::IntClass* #t344 = v in #t344 == null ?{core::int*} null : let final core::int* #t345 = self::IntClassExtension|get#property(#t344) in let final core::int* #t346 = let final core::int* #t347 = #t345.{core::num::-}(1){(core::num*) →* core::int*} in let final void #t348 = self::IntClassExtension|set#property(#t344, #t347) in #t347 in #t345, v == null);
-  self::expect(n0, let final self::IntClass* #t349 = v in #t349 == null ?{core::int*} null : self::IntClassExtension|get#property(#t349), v == null);
-  self::expect(n0, let final self::IntClass* #t350 = v in #t350 == null ?{core::int*} null : self::IntClassExtension|get#property(#t350), v == null);
-  let final self::IntClass* #t351 = v in #t351 == null ?{core::int*} null : self::IntClassExtension|set#property(#t351, self::IntClassExtension|get#property(#t351).{core::num::+}(n1){(core::num*) →* core::int*});
-  self::expect(n1, let final self::IntClass* #t352 = v in #t352 == null ?{core::int*} null : self::IntClassExtension|get#property(#t352), v == null);
-  let final self::IntClass* #t353 = v in #t353 == null ?{core::int*} null : self::IntClassExtension|set#property(#t353, self::IntClassExtension|get#property(#t353).{core::num::+}(n1){(core::num*) →* core::int*});
-  self::expect(n2, let final self::IntClass* #t354 = v in #t354 == null ?{core::int*} null : self::IntClassExtension|get#property(#t354), v == null);
-  let final self::IntClass* #t355 = v in #t355 == null ?{core::int*} null : self::IntClassExtension|set#property(#t355, self::IntClassExtension|get#property(#t355).{core::num::-}(n2){(core::num*) →* core::int*});
-  self::expect(n0, let final self::IntClass* #t356 = v in #t356 == null ?{core::int*} null : self::IntClassExtension|get#property(#t356), v == null);
-  let final self::IntClass* #t357 = v in #t357 == null ?{core::int*} null : self::IntClassExtension|set#property(#t357, self::IntClassExtension|get#property(#t357).{core::num::+}(n1){(core::num*) →* core::int*});
-  self::expect(n1, let final self::IntClass* #t358 = v in #t358 == null ?{core::int*} null : self::IntClassExtension|get#property(#t358), v == null);
-  let final self::IntClass* #t359 = v in #t359 == null ?{core::int*} null : self::IntClassExtension|set#property(#t359, self::IntClassExtension|get#property(#t359).{core::num::-}(n1){(core::num*) →* core::int*});
-  self::expect(n0, let final self::IntClass* #t360 = v in #t360 == null ?{core::int*} null : self::IntClassExtension|get#property(#t360), v == null);
-  let final self::IntClass* #t361 = v in #t361 == null ?{core::int*} null : let final core::int* #t362 = self::IntClassExtension|get#property(#t361).{core::num::+}(1){(core::num*) →* core::int*} in let final void #t363 = self::IntClassExtension|set#property(#t361, #t362) in #t362;
-  self::expect(n1, let final self::IntClass* #t364 = v in #t364 == null ?{core::int*} null : self::IntClassExtension|get#property(#t364), v == null);
-  let final self::IntClass* #t365 = v in #t365 == null ?{core::int*} null : let final core::int* #t366 = self::IntClassExtension|get#property(#t365).{core::num::-}(1){(core::num*) →* core::int*} in let final void #t367 = self::IntClassExtension|set#property(#t365, #t366) in #t366;
-  self::expect(n0, let final self::IntClass* #t368 = v in #t368 == null ?{core::int*} null : self::IntClassExtension|get#property(#t368), v == null);
-  let final self::IntClass* #t369 = v in #t369 == null ?{core::int*} null : self::IntClassExtension|set#property(#t369, self::IntClassExtension|get#property(#t369).{core::num::+}(1){(core::num*) →* core::int*});
-  self::expect(n1, let final self::IntClass* #t370 = v in #t370 == null ?{core::int*} null : self::IntClassExtension|get#property(#t370), v == null);
-  let final self::IntClass* #t371 = v in #t371 == null ?{core::int*} null : self::IntClassExtension|set#property(#t371, self::IntClassExtension|get#property(#t371).{core::num::-}(1){(core::num*) →* core::int*});
-  self::expect(n0, let final self::IntClass* #t372 = v in #t372 == null ?{core::int*} null : self::IntClassExtension|get#property(#t372), v == null);
+static method testExplicitNullAwareIntProperties(self::IntClass? v) → dynamic {
+  core::int n0 = 0;
+  core::int n1 = 1;
+  core::int n2 = 2;
+  self::expect(n0, let final self::IntClass? #t317 = v in #t317 == null ?{core::int?} null : self::IntClassExtension|get#property(#t317{self::IntClass}), v == null);
+  self::expect(n1, let final self::IntClass? #t318 = v in #t318 == null ?{core::int?} null : let final core::int #t319 = self::IntClassExtension|get#property(#t318{self::IntClass}).{core::num::+}(n1){(core::num) → core::int} in let final void #t320 = self::IntClassExtension|set#property(#t318{self::IntClass}, #t319) in #t319, v == null);
+  self::expect(n2, let final self::IntClass? #t321 = v in #t321 == null ?{core::int?} null : let final core::int #t322 = self::IntClassExtension|get#property(#t321{self::IntClass}).{core::num::+}(n1){(core::num) → core::int} in let final void #t323 = self::IntClassExtension|set#property(#t321{self::IntClass}, #t322) in #t322, v == null);
+  self::expect(n0, let final self::IntClass? #t324 = v in #t324 == null ?{core::int?} null : let final core::int #t325 = self::IntClassExtension|get#property(#t324{self::IntClass}).{core::num::-}(n2){(core::num) → core::int} in let final void #t326 = self::IntClassExtension|set#property(#t324{self::IntClass}, #t325) in #t325, v == null);
+  self::expect(n1, let final self::IntClass? #t327 = v in #t327 == null ?{core::int?} null : let final core::int #t328 = self::IntClassExtension|get#property(#t327{self::IntClass}).{core::num::+}(n1){(core::num) → core::int} in let final void #t329 = self::IntClassExtension|set#property(#t327{self::IntClass}, #t328) in #t328, v == null);
+  self::expect(n0, let final self::IntClass? #t330 = v in #t330 == null ?{core::int?} null : let final core::int #t331 = self::IntClassExtension|get#property(#t330{self::IntClass}).{core::num::-}(n1){(core::num) → core::int} in let final void #t332 = self::IntClassExtension|set#property(#t330{self::IntClass}, #t331) in #t331, v == null);
+  self::expect(n1, let final self::IntClass? #t333 = v in #t333 == null ?{core::int?} null : let final core::int #t334 = self::IntClassExtension|get#property(#t333{self::IntClass}).{core::num::+}(1){(core::num) → core::int} in let final void #t335 = self::IntClassExtension|set#property(#t333{self::IntClass}, #t334) in #t334, v == null);
+  self::expect(n0, let final self::IntClass? #t336 = v in #t336 == null ?{core::int?} null : let final core::int #t337 = self::IntClassExtension|get#property(#t336{self::IntClass}).{core::num::-}(1){(core::num) → core::int} in let final void #t338 = self::IntClassExtension|set#property(#t336{self::IntClass}, #t337) in #t337, v == null);
+  self::expect(n0, let final self::IntClass? #t339 = v in #t339 == null ?{core::int?} null : let final core::int #t340 = self::IntClassExtension|get#property(#t339{self::IntClass}) in let final core::int #t341 = let final core::int #t342 = #t340.{core::num::+}(1){(core::num) → core::int} in let final void #t343 = self::IntClassExtension|set#property(#t339{self::IntClass}, #t342) in #t342 in #t340, v == null);
+  self::expect(n1, let final self::IntClass? #t344 = v in #t344 == null ?{core::int?} null : let final core::int #t345 = self::IntClassExtension|get#property(#t344{self::IntClass}) in let final core::int #t346 = let final core::int #t347 = #t345.{core::num::-}(1){(core::num) → core::int} in let final void #t348 = self::IntClassExtension|set#property(#t344{self::IntClass}, #t347) in #t347 in #t345, v == null);
+  self::expect(n0, let final self::IntClass? #t349 = v in #t349 == null ?{core::int?} null : self::IntClassExtension|get#property(#t349{self::IntClass}), v == null);
+  self::expect(n0, let final self::IntClass? #t350 = v in #t350 == null ?{core::int?} null : self::IntClassExtension|get#property(#t350{self::IntClass}), v == null);
+  let final self::IntClass? #t351 = v in #t351 == null ?{core::int?} null : self::IntClassExtension|set#property(#t351{self::IntClass}, self::IntClassExtension|get#property(#t351{self::IntClass}).{core::num::+}(n1){(core::num) → core::int});
+  self::expect(n1, let final self::IntClass? #t352 = v in #t352 == null ?{core::int?} null : self::IntClassExtension|get#property(#t352{self::IntClass}), v == null);
+  let final self::IntClass? #t353 = v in #t353 == null ?{core::int?} null : self::IntClassExtension|set#property(#t353{self::IntClass}, self::IntClassExtension|get#property(#t353{self::IntClass}).{core::num::+}(n1){(core::num) → core::int});
+  self::expect(n2, let final self::IntClass? #t354 = v in #t354 == null ?{core::int?} null : self::IntClassExtension|get#property(#t354{self::IntClass}), v == null);
+  let final self::IntClass? #t355 = v in #t355 == null ?{core::int?} null : self::IntClassExtension|set#property(#t355{self::IntClass}, self::IntClassExtension|get#property(#t355{self::IntClass}).{core::num::-}(n2){(core::num) → core::int});
+  self::expect(n0, let final self::IntClass? #t356 = v in #t356 == null ?{core::int?} null : self::IntClassExtension|get#property(#t356{self::IntClass}), v == null);
+  let final self::IntClass? #t357 = v in #t357 == null ?{core::int?} null : self::IntClassExtension|set#property(#t357{self::IntClass}, self::IntClassExtension|get#property(#t357{self::IntClass}).{core::num::+}(n1){(core::num) → core::int});
+  self::expect(n1, let final self::IntClass? #t358 = v in #t358 == null ?{core::int?} null : self::IntClassExtension|get#property(#t358{self::IntClass}), v == null);
+  let final self::IntClass? #t359 = v in #t359 == null ?{core::int?} null : self::IntClassExtension|set#property(#t359{self::IntClass}, self::IntClassExtension|get#property(#t359{self::IntClass}).{core::num::-}(n1){(core::num) → core::int});
+  self::expect(n0, let final self::IntClass? #t360 = v in #t360 == null ?{core::int?} null : self::IntClassExtension|get#property(#t360{self::IntClass}), v == null);
+  let final self::IntClass? #t361 = v in #t361 == null ?{core::int?} null : let final core::int #t362 = self::IntClassExtension|get#property(#t361{self::IntClass}).{core::num::+}(1){(core::num) → core::int} in let final void #t363 = self::IntClassExtension|set#property(#t361{self::IntClass}, #t362) in #t362;
+  self::expect(n1, let final self::IntClass? #t364 = v in #t364 == null ?{core::int?} null : self::IntClassExtension|get#property(#t364{self::IntClass}), v == null);
+  let final self::IntClass? #t365 = v in #t365 == null ?{core::int?} null : let final core::int #t366 = self::IntClassExtension|get#property(#t365{self::IntClass}).{core::num::-}(1){(core::num) → core::int} in let final void #t367 = self::IntClassExtension|set#property(#t365{self::IntClass}, #t366) in #t366;
+  self::expect(n0, let final self::IntClass? #t368 = v in #t368 == null ?{core::int?} null : self::IntClassExtension|get#property(#t368{self::IntClass}), v == null);
+  let final self::IntClass? #t369 = v in #t369 == null ?{core::int?} null : self::IntClassExtension|set#property(#t369{self::IntClass}, self::IntClassExtension|get#property(#t369{self::IntClass}).{core::num::+}(1){(core::num) → core::int});
+  self::expect(n1, let final self::IntClass? #t370 = v in #t370 == null ?{core::int?} null : self::IntClassExtension|get#property(#t370{self::IntClass}), v == null);
+  let final self::IntClass? #t371 = v in #t371 == null ?{core::int?} null : self::IntClassExtension|set#property(#t371{self::IntClass}, self::IntClassExtension|get#property(#t371{self::IntClass}).{core::num::-}(1){(core::num) → core::int});
+  self::expect(n0, let final self::IntClass? #t372 = v in #t372 == null ?{core::int?} null : self::IntClassExtension|get#property(#t372{self::IntClass}), v == null);
 }
 static method expect(dynamic expected, dynamic actual, [dynamic expectNull = #C1]) → dynamic {
-  if(expectNull as{TypeError,ForDynamic} core::bool*) {
+  if(expectNull as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool) {
     expected = null;
   }
-  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual)) {
     throw "Mismatch: expected=${expected}, actual=${actual}";
   }
 }
diff --git a/pkg/front_end/testcases/extensions/compounds.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/compounds.dart.weak.modular.expect
index ccd5bd4..d1424bc 100644
--- a/pkg/front_end/testcases/extensions/compounds.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/extensions/compounds.dart.weak.modular.expect
@@ -1,117 +1,90 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Number extends core::Object {
-  final field core::int* value;
-  constructor •(core::int* value) → self::Number*
+  final field core::int value;
+  constructor •(core::int value) → self::Number
     : self::Number::value = value, super core::Object::•()
     ;
-  get hashCode() → core::int*
-    return this.{self::Number::value}{core::int*}.{core::num::hashCode}{core::int*};
-  operator ==(core::Object* other) → core::bool*
-    return other is self::Number* && this.{self::Number::value}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} other{self::Number*}.{self::Number::value}{core::int*};
-  method toString() → core::String*
-    return "Number(${this.{self::Number::value}{core::int*}})";
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  get hashCode() → core::int
+    return this.{self::Number::value}{core::int}.{core::num::hashCode}{core::int};
+  operator ==(core::Object other) → core::bool
+    return other is{ForNonNullableByDefault} self::Number && this.{self::Number::value}{core::int} =={core::num::==}{(core::Object) → core::bool} other{self::Number}.{self::Number::value}{core::int};
+  method toString() → core::String
+    return "Number(${this.{self::Number::value}{core::int}})";
 }
 class Class extends core::Object {
-  field self::Number* field;
-  constructor •(self::Number* field) → self::Class*
+  field self::Number field;
+  constructor •(self::Number field) → self::Class
     : self::Class::field = field, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class IntClass extends core::Object {
-  field core::int* field;
-  constructor •(core::int* field) → self::IntClass*
+  field core::int field;
+  constructor •(core::int field) → self::IntClass
     : self::IntClass::field = field, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension NumberExtension on self::Number* {
+extension NumberExtension on self::Number {
   operator + = self::NumberExtension|+;
   operator - = self::NumberExtension|-;
 }
-extension ClassExtension on self::Class* {
+extension ClassExtension on self::Class {
   get property = self::ClassExtension|get#property;
   method testImplicitProperties = self::ClassExtension|testImplicitProperties;
   tearoff testImplicitProperties = self::ClassExtension|get#testImplicitProperties;
   set property = self::ClassExtension|set#property;
 }
-extension IntClassExtension on self::IntClass* {
+extension IntClassExtension on self::IntClass {
   get property = self::IntClassExtension|get#property;
   method testImplicitProperties = self::IntClassExtension|testImplicitProperties;
   tearoff testImplicitProperties = self::IntClassExtension|get#testImplicitProperties;
   set property = self::IntClassExtension|set#property;
 }
-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::int*}.{core::num::+}(other{core::int*}){(core::num*) →* core::int*});
+static method NumberExtension|+(lowered final self::Number #this, core::Object other) → self::Number {
+  if(other is{ForNonNullableByDefault} core::int) {
+    return new self::Number::•(#this.{self::Number::value}{core::int}.{core::num::+}(other{core::int}){(core::num) → core::int});
   }
   else
-    if(other is self::Number*) {
-      return new self::Number::•(#this.{self::Number::value}{core::int*}.{core::num::+}(other{self::Number*}.{self::Number::value}{core::int*}){(core::num*) →* core::int*});
+    if(other is{ForNonNullableByDefault} self::Number) {
+      return new self::Number::•(#this.{self::Number::value}{core::int}.{core::num::+}(other{self::Number}.{self::Number::value}{core::int}){(core::num) → core::int});
     }
     else {
       throw new core::ArgumentError::•("${other}");
     }
 }
-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::int*}.{core::num::-}(other{core::int*}){(core::num*) →* core::int*});
+static method NumberExtension|-(lowered final self::Number #this, core::Object other) → self::Number {
+  if(other is{ForNonNullableByDefault} core::int) {
+    return new self::Number::•(#this.{self::Number::value}{core::int}.{core::num::-}(other{core::int}){(core::num) → core::int});
   }
   else
-    if(other is self::Number*) {
-      return new self::Number::•(#this.{self::Number::value}{core::int*}.{core::num::-}(other{self::Number*}.{self::Number::value}{core::int*}){(core::num*) →* core::int*});
+    if(other is{ForNonNullableByDefault} self::Number) {
+      return new self::Number::•(#this.{self::Number::value}{core::int}.{core::num::-}(other{self::Number}.{self::Number::value}{core::int}){(core::num) → core::int});
     }
     else {
       throw new core::ArgumentError::•("${other}");
     }
 }
-static method ClassExtension|get#property(lowered final self::Class* #this) → self::Number*
-  return #this.{self::Class::field}{self::Number*};
-static method ClassExtension|set#property(lowered final self::Class* #this, self::Number* value) → void {
+static method ClassExtension|get#property(lowered final self::Class #this) → self::Number
+  return #this.{self::Class::field}{self::Number};
+static method ClassExtension|set#property(lowered final self::Class #this, self::Number value) → void {
   #this.{self::Class::field} = value;
 }
-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);
+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);
   self::expect(n0, self::ClassExtension|get#property(#this));
-  self::expect(n1, let final self::Number* #t1 = self::NumberExtension|+(self::ClassExtension|get#property(#this), n1) in let final void #t2 = self::ClassExtension|set#property(#this, #t1) in #t1);
-  self::expect(n2, let final self::Number* #t3 = self::NumberExtension|+(self::ClassExtension|get#property(#this), n1) in let final void #t4 = self::ClassExtension|set#property(#this, #t3) in #t3);
-  self::expect(n0, let final self::Number* #t5 = self::NumberExtension|-(self::ClassExtension|get#property(#this), n2) in let final void #t6 = self::ClassExtension|set#property(#this, #t5) in #t5);
-  self::expect(n1, let final self::Number* #t7 = self::NumberExtension|+(self::ClassExtension|get#property(#this), n1) in let final void #t8 = self::ClassExtension|set#property(#this, #t7) in #t7);
-  self::expect(n0, let final self::Number* #t9 = self::NumberExtension|-(self::ClassExtension|get#property(#this), n1) in let final void #t10 = self::ClassExtension|set#property(#this, #t9) in #t9);
-  self::expect(n1, let final self::Number* #t11 = self::NumberExtension|+(self::ClassExtension|get#property(#this), 1) in let final void #t12 = self::ClassExtension|set#property(#this, #t11) in #t11);
-  self::expect(n0, let final self::Number* #t13 = self::NumberExtension|-(self::ClassExtension|get#property(#this), 1) in let final void #t14 = self::ClassExtension|set#property(#this, #t13) in #t13);
-  self::expect(n0, let final self::Number* #t15 = self::ClassExtension|get#property(#this) in let final self::Number* #t16 = self::ClassExtension|set#property(#this, self::NumberExtension|+(#t15, 1)) in #t15);
-  self::expect(n1, let final self::Number* #t17 = self::ClassExtension|get#property(#this) in let final self::Number* #t18 = self::ClassExtension|set#property(#this, self::NumberExtension|-(#t17, 1)) in #t17);
+  self::expect(n1, let final self::Number #t1 = self::NumberExtension|+(self::ClassExtension|get#property(#this), n1) in let final void #t2 = self::ClassExtension|set#property(#this, #t1) in #t1);
+  self::expect(n2, let final self::Number #t3 = self::NumberExtension|+(self::ClassExtension|get#property(#this), n1) in let final void #t4 = self::ClassExtension|set#property(#this, #t3) in #t3);
+  self::expect(n0, let final self::Number #t5 = self::NumberExtension|-(self::ClassExtension|get#property(#this), n2) in let final void #t6 = self::ClassExtension|set#property(#this, #t5) in #t5);
+  self::expect(n1, let final self::Number #t7 = self::NumberExtension|+(self::ClassExtension|get#property(#this), n1) in let final void #t8 = self::ClassExtension|set#property(#this, #t7) in #t7);
+  self::expect(n0, let final self::Number #t9 = self::NumberExtension|-(self::ClassExtension|get#property(#this), n1) in let final void #t10 = self::ClassExtension|set#property(#this, #t9) in #t9);
+  self::expect(n1, let final self::Number #t11 = self::NumberExtension|+(self::ClassExtension|get#property(#this), 1) in let final void #t12 = self::ClassExtension|set#property(#this, #t11) in #t11);
+  self::expect(n0, let final self::Number #t13 = self::NumberExtension|-(self::ClassExtension|get#property(#this), 1) in let final void #t14 = self::ClassExtension|set#property(#this, #t13) in #t13);
+  self::expect(n0, let final self::Number #t15 = self::ClassExtension|get#property(#this) in let final self::Number #t16 = self::ClassExtension|set#property(#this, self::NumberExtension|+(#t15, 1)) in #t15);
+  self::expect(n1, let final self::Number #t17 = self::ClassExtension|get#property(#this) in let final self::Number #t18 = self::ClassExtension|set#property(#this, self::NumberExtension|-(#t17, 1)) in #t17);
   self::expect(n0, self::ClassExtension|get#property(#this));
   self::expect(n0, self::ClassExtension|get#property(#this));
   self::ClassExtension|set#property(#this, self::NumberExtension|+(self::ClassExtension|get#property(#this), n1));
@@ -124,58 +97,58 @@
   self::expect(n1, self::ClassExtension|get#property(#this));
   self::ClassExtension|set#property(#this, self::NumberExtension|-(self::ClassExtension|get#property(#this), n1));
   self::expect(n0, self::ClassExtension|get#property(#this));
-  let final self::Number* #t19 = self::NumberExtension|+(self::ClassExtension|get#property(#this), 1) in let final void #t20 = self::ClassExtension|set#property(#this, #t19) in #t19;
+  let final self::Number #t19 = self::NumberExtension|+(self::ClassExtension|get#property(#this), 1) in let final void #t20 = self::ClassExtension|set#property(#this, #t19) in #t19;
   self::expect(n1, self::ClassExtension|get#property(#this));
-  let final self::Number* #t21 = self::NumberExtension|-(self::ClassExtension|get#property(#this), 1) in let final void #t22 = self::ClassExtension|set#property(#this, #t21) in #t21;
+  let final self::Number #t21 = self::NumberExtension|-(self::ClassExtension|get#property(#this), 1) in let final void #t22 = self::ClassExtension|set#property(#this, #t21) in #t21;
   self::expect(n0, self::ClassExtension|get#property(#this));
   self::ClassExtension|set#property(#this, self::NumberExtension|+(self::ClassExtension|get#property(#this), 1));
   self::expect(n1, self::ClassExtension|get#property(#this));
   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(lowered 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(lowered final self::IntClass* #this) → core::int*
-  return #this.{self::IntClass::field}{core::int*};
-static method IntClassExtension|set#property(lowered final self::IntClass* #this, core::int* value) → void {
+static method IntClassExtension|get#property(lowered final self::IntClass #this) → core::int
+  return #this.{self::IntClass::field}{core::int};
+static method IntClassExtension|set#property(lowered final self::IntClass #this, core::int value) → void {
   #this.{self::IntClass::field} = value;
 }
-static method IntClassExtension|testImplicitProperties(lowered final self::IntClass* #this) → dynamic {
-  core::int* n0 = 0;
-  core::int* n1 = 1;
-  core::int* n2 = 2;
+static method IntClassExtension|testImplicitProperties(lowered final self::IntClass #this) → dynamic {
+  core::int n0 = 0;
+  core::int n1 = 1;
+  core::int n2 = 2;
   self::expect(n0, self::IntClassExtension|get#property(#this));
-  self::expect(n1, let final core::int* #t23 = self::IntClassExtension|get#property(#this).{core::num::+}(n1){(core::num*) →* core::int*} in let final void #t24 = self::IntClassExtension|set#property(#this, #t23) in #t23);
-  self::expect(n2, let final core::int* #t25 = self::IntClassExtension|get#property(#this).{core::num::+}(n1){(core::num*) →* core::int*} in let final void #t26 = self::IntClassExtension|set#property(#this, #t25) in #t25);
-  self::expect(n0, let final core::int* #t27 = self::IntClassExtension|get#property(#this).{core::num::-}(n2){(core::num*) →* core::int*} in let final void #t28 = self::IntClassExtension|set#property(#this, #t27) in #t27);
-  self::expect(n1, let final core::int* #t29 = self::IntClassExtension|get#property(#this).{core::num::+}(n1){(core::num*) →* core::int*} in let final void #t30 = self::IntClassExtension|set#property(#this, #t29) in #t29);
-  self::expect(n0, let final core::int* #t31 = self::IntClassExtension|get#property(#this).{core::num::-}(n1){(core::num*) →* core::int*} in let final void #t32 = self::IntClassExtension|set#property(#this, #t31) in #t31);
-  self::expect(n1, let final core::int* #t33 = self::IntClassExtension|get#property(#this).{core::num::+}(1){(core::num*) →* core::int*} in let final void #t34 = self::IntClassExtension|set#property(#this, #t33) in #t33);
-  self::expect(n0, let final core::int* #t35 = self::IntClassExtension|get#property(#this).{core::num::-}(1){(core::num*) →* core::int*} in let final void #t36 = self::IntClassExtension|set#property(#this, #t35) in #t35);
-  self::expect(n0, let final core::int* #t37 = self::IntClassExtension|get#property(#this) in let final core::int* #t38 = self::IntClassExtension|set#property(#this, #t37.{core::num::+}(1){(core::num*) →* core::int*}) in #t37);
-  self::expect(n1, let final core::int* #t39 = self::IntClassExtension|get#property(#this) in let final core::int* #t40 = self::IntClassExtension|set#property(#this, #t39.{core::num::-}(1){(core::num*) →* core::int*}) in #t39);
+  self::expect(n1, let final core::int #t23 = self::IntClassExtension|get#property(#this).{core::num::+}(n1){(core::num) → core::int} in let final void #t24 = self::IntClassExtension|set#property(#this, #t23) in #t23);
+  self::expect(n2, let final core::int #t25 = self::IntClassExtension|get#property(#this).{core::num::+}(n1){(core::num) → core::int} in let final void #t26 = self::IntClassExtension|set#property(#this, #t25) in #t25);
+  self::expect(n0, let final core::int #t27 = self::IntClassExtension|get#property(#this).{core::num::-}(n2){(core::num) → core::int} in let final void #t28 = self::IntClassExtension|set#property(#this, #t27) in #t27);
+  self::expect(n1, let final core::int #t29 = self::IntClassExtension|get#property(#this).{core::num::+}(n1){(core::num) → core::int} in let final void #t30 = self::IntClassExtension|set#property(#this, #t29) in #t29);
+  self::expect(n0, let final core::int #t31 = self::IntClassExtension|get#property(#this).{core::num::-}(n1){(core::num) → core::int} in let final void #t32 = self::IntClassExtension|set#property(#this, #t31) in #t31);
+  self::expect(n1, let final core::int #t33 = self::IntClassExtension|get#property(#this).{core::num::+}(1){(core::num) → core::int} in let final void #t34 = self::IntClassExtension|set#property(#this, #t33) in #t33);
+  self::expect(n0, let final core::int #t35 = self::IntClassExtension|get#property(#this).{core::num::-}(1){(core::num) → core::int} in let final void #t36 = self::IntClassExtension|set#property(#this, #t35) in #t35);
+  self::expect(n0, let final core::int #t37 = self::IntClassExtension|get#property(#this) in let final core::int #t38 = self::IntClassExtension|set#property(#this, #t37.{core::num::+}(1){(core::num) → core::int}) in #t37);
+  self::expect(n1, let final core::int #t39 = self::IntClassExtension|get#property(#this) in let final core::int #t40 = self::IntClassExtension|set#property(#this, #t39.{core::num::-}(1){(core::num) → core::int}) in #t39);
   self::expect(n0, self::IntClassExtension|get#property(#this));
   self::expect(n0, self::IntClassExtension|get#property(#this));
-  self::IntClassExtension|set#property(#this, self::IntClassExtension|get#property(#this).{core::num::+}(n1){(core::num*) →* core::int*});
+  self::IntClassExtension|set#property(#this, self::IntClassExtension|get#property(#this).{core::num::+}(n1){(core::num) → core::int});
   self::expect(n1, self::IntClassExtension|get#property(#this));
-  self::IntClassExtension|set#property(#this, self::IntClassExtension|get#property(#this).{core::num::+}(n1){(core::num*) →* core::int*});
+  self::IntClassExtension|set#property(#this, self::IntClassExtension|get#property(#this).{core::num::+}(n1){(core::num) → core::int});
   self::expect(n2, self::IntClassExtension|get#property(#this));
-  self::IntClassExtension|set#property(#this, self::IntClassExtension|get#property(#this).{core::num::-}(n2){(core::num*) →* core::int*});
+  self::IntClassExtension|set#property(#this, self::IntClassExtension|get#property(#this).{core::num::-}(n2){(core::num) → core::int});
   self::expect(n0, self::IntClassExtension|get#property(#this));
-  self::IntClassExtension|set#property(#this, self::IntClassExtension|get#property(#this).{core::num::+}(n1){(core::num*) →* core::int*});
+  self::IntClassExtension|set#property(#this, self::IntClassExtension|get#property(#this).{core::num::+}(n1){(core::num) → core::int});
   self::expect(n1, self::IntClassExtension|get#property(#this));
-  self::IntClassExtension|set#property(#this, self::IntClassExtension|get#property(#this).{core::num::-}(n1){(core::num*) →* core::int*});
+  self::IntClassExtension|set#property(#this, self::IntClassExtension|get#property(#this).{core::num::-}(n1){(core::num) → core::int});
   self::expect(n0, self::IntClassExtension|get#property(#this));
-  let final core::int* #t41 = self::IntClassExtension|get#property(#this).{core::num::+}(1){(core::num*) →* core::int*} in let final void #t42 = self::IntClassExtension|set#property(#this, #t41) in #t41;
+  let final core::int #t41 = self::IntClassExtension|get#property(#this).{core::num::+}(1){(core::num) → core::int} in let final void #t42 = self::IntClassExtension|set#property(#this, #t41) in #t41;
   self::expect(n1, self::IntClassExtension|get#property(#this));
-  let final core::int* #t43 = self::IntClassExtension|get#property(#this).{core::num::-}(1){(core::num*) →* core::int*} in let final void #t44 = self::IntClassExtension|set#property(#this, #t43) in #t43;
+  let final core::int #t43 = self::IntClassExtension|get#property(#this).{core::num::-}(1){(core::num) → core::int} in let final void #t44 = self::IntClassExtension|set#property(#this, #t43) in #t43;
   self::expect(n0, self::IntClassExtension|get#property(#this));
-  self::IntClassExtension|set#property(#this, self::IntClassExtension|get#property(#this).{core::num::+}(1){(core::num*) →* core::int*});
+  self::IntClassExtension|set#property(#this, self::IntClassExtension|get#property(#this).{core::num::+}(1){(core::num) → core::int});
   self::expect(n1, self::IntClassExtension|get#property(#this));
-  self::IntClassExtension|set#property(#this, self::IntClassExtension|get#property(#this).{core::num::-}(1){(core::num*) →* core::int*});
+  self::IntClassExtension|set#property(#this, self::IntClassExtension|get#property(#this).{core::num::-}(1){(core::num) → core::int});
   self::expect(n0, self::IntClassExtension|get#property(#this));
 }
-static method IntClassExtension|get#testImplicitProperties(lowered 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();
@@ -191,10 +164,10 @@
   self::IntClassExtension|testImplicitProperties(new self::IntClass::•(0));
 }
 static method testLocals() → dynamic {
-  self::Number* n0 = new self::Number::•(0);
-  self::Number* n1 = new self::Number::•(1);
-  self::Number* n2 = new self::Number::•(2);
-  self::Number* v = n0;
+  self::Number n0 = new self::Number::•(0);
+  self::Number n1 = new self::Number::•(1);
+  self::Number n2 = new self::Number::•(2);
+  self::Number v = n0;
   self::expect(n0, v);
   self::expect(n1, v = self::NumberExtension|+(v, n1));
   self::expect(n2, v = self::NumberExtension|+(v, n1));
@@ -203,8 +176,8 @@
   self::expect(n0, v = self::NumberExtension|-(v, n1));
   self::expect(n1, v = self::NumberExtension|+(v, 1));
   self::expect(n0, v = self::NumberExtension|-(v, 1));
-  self::expect(n0, let final self::Number* #t45 = v in let final self::Number* #t46 = v = self::NumberExtension|+(#t45, 1) in #t45);
-  self::expect(n1, let final self::Number* #t47 = v in let final self::Number* #t48 = v = self::NumberExtension|-(#t47, 1) in #t47);
+  self::expect(n0, let final self::Number #t45 = v in let final self::Number #t46 = v = self::NumberExtension|+(#t45, 1) in #t45);
+  self::expect(n1, let final self::Number #t47 = v in let final self::Number #t48 = v = self::NumberExtension|-(#t47, 1) in #t47);
   self::expect(n0, v);
   self::expect(n0, v);
   v = self::NumberExtension|+(v, n1);
@@ -227,284 +200,284 @@
   self::expect(n0, v);
 }
 static method testProperties() → dynamic {
-  self::Number* n0 = new self::Number::•(0);
-  self::Number* n1 = new self::Number::•(1);
-  self::Number* n2 = new self::Number::•(2);
-  self::Class* v = new self::Class::•(n0);
-  self::expect(n0, v.{self::Class::field}{self::Number*});
-  self::expect(n1, let final self::Class* #t49 = v in #t49.{self::Class::field} = self::NumberExtension|+(#t49.{self::Class::field}{self::Number*}, n1));
-  self::expect(n2, let final self::Class* #t50 = v in #t50.{self::Class::field} = self::NumberExtension|+(#t50.{self::Class::field}{self::Number*}, n1));
-  self::expect(n0, let final self::Class* #t51 = v in #t51.{self::Class::field} = self::NumberExtension|-(#t51.{self::Class::field}{self::Number*}, n2));
-  self::expect(n1, let final self::Class* #t52 = v in #t52.{self::Class::field} = self::NumberExtension|+(#t52.{self::Class::field}{self::Number*}, n1));
-  self::expect(n0, let final self::Class* #t53 = v in #t53.{self::Class::field} = self::NumberExtension|-(#t53.{self::Class::field}{self::Number*}, n1));
-  self::expect(n1, let final self::Class* #t54 = v in #t54.{self::Class::field} = self::NumberExtension|+(#t54.{self::Class::field}{self::Number*}, 1));
-  self::expect(n0, let final self::Class* #t55 = v in #t55.{self::Class::field} = self::NumberExtension|-(#t55.{self::Class::field}{self::Number*}, 1));
-  self::expect(n0, let final self::Class* #t56 = v in let final self::Number* #t57 = #t56.{self::Class::field}{self::Number*} in let final self::Number* #t58 = #t56.{self::Class::field} = self::NumberExtension|+(#t57, 1) in #t57);
-  self::expect(n1, let final self::Class* #t59 = v in let final self::Number* #t60 = #t59.{self::Class::field}{self::Number*} in let final self::Number* #t61 = #t59.{self::Class::field} = self::NumberExtension|-(#t60, 1) in #t60);
-  self::expect(n0, v.{self::Class::field}{self::Number*});
-  self::expect(n0, v.{self::Class::field}{self::Number*});
-  let final self::Class* #t62 = v in #t62.{self::Class::field} = self::NumberExtension|+(#t62.{self::Class::field}{self::Number*}, n1);
-  self::expect(n1, v.{self::Class::field}{self::Number*});
-  let final self::Class* #t63 = v in #t63.{self::Class::field} = self::NumberExtension|+(#t63.{self::Class::field}{self::Number*}, n1);
-  self::expect(n2, v.{self::Class::field}{self::Number*});
-  let final self::Class* #t64 = v in #t64.{self::Class::field} = self::NumberExtension|-(#t64.{self::Class::field}{self::Number*}, n2);
-  self::expect(n0, v.{self::Class::field}{self::Number*});
-  let final self::Class* #t65 = v in #t65.{self::Class::field} = self::NumberExtension|+(#t65.{self::Class::field}{self::Number*}, n1);
-  self::expect(n1, v.{self::Class::field}{self::Number*});
-  let final self::Class* #t66 = v in #t66.{self::Class::field} = self::NumberExtension|-(#t66.{self::Class::field}{self::Number*}, n1);
-  self::expect(n0, v.{self::Class::field}{self::Number*});
-  let final self::Class* #t67 = v in #t67.{self::Class::field} = self::NumberExtension|+(#t67.{self::Class::field}{self::Number*}, 1);
-  self::expect(n1, v.{self::Class::field}{self::Number*});
-  let final self::Class* #t68 = v in #t68.{self::Class::field} = self::NumberExtension|-(#t68.{self::Class::field}{self::Number*}, 1);
-  self::expect(n0, v.{self::Class::field}{self::Number*});
-  let final self::Class* #t69 = v in #t69.{self::Class::field} = self::NumberExtension|+(#t69.{self::Class::field}{self::Number*}, 1);
-  self::expect(n1, v.{self::Class::field}{self::Number*});
-  let final self::Class* #t70 = v in #t70.{self::Class::field} = self::NumberExtension|-(#t70.{self::Class::field}{self::Number*}, 1);
-  self::expect(n0, v.{self::Class::field}{self::Number*});
+  self::Number n0 = new self::Number::•(0);
+  self::Number n1 = new self::Number::•(1);
+  self::Number n2 = new self::Number::•(2);
+  self::Class v = new self::Class::•(n0);
+  self::expect(n0, v.{self::Class::field}{self::Number});
+  self::expect(n1, let final self::Class #t49 = v in #t49.{self::Class::field} = self::NumberExtension|+(#t49.{self::Class::field}{self::Number}, n1));
+  self::expect(n2, let final self::Class #t50 = v in #t50.{self::Class::field} = self::NumberExtension|+(#t50.{self::Class::field}{self::Number}, n1));
+  self::expect(n0, let final self::Class #t51 = v in #t51.{self::Class::field} = self::NumberExtension|-(#t51.{self::Class::field}{self::Number}, n2));
+  self::expect(n1, let final self::Class #t52 = v in #t52.{self::Class::field} = self::NumberExtension|+(#t52.{self::Class::field}{self::Number}, n1));
+  self::expect(n0, let final self::Class #t53 = v in #t53.{self::Class::field} = self::NumberExtension|-(#t53.{self::Class::field}{self::Number}, n1));
+  self::expect(n1, let final self::Class #t54 = v in #t54.{self::Class::field} = self::NumberExtension|+(#t54.{self::Class::field}{self::Number}, 1));
+  self::expect(n0, let final self::Class #t55 = v in #t55.{self::Class::field} = self::NumberExtension|-(#t55.{self::Class::field}{self::Number}, 1));
+  self::expect(n0, let final self::Class #t56 = v in let final self::Number #t57 = #t56.{self::Class::field}{self::Number} in let final self::Number #t58 = #t56.{self::Class::field} = self::NumberExtension|+(#t57, 1) in #t57);
+  self::expect(n1, let final self::Class #t59 = v in let final self::Number #t60 = #t59.{self::Class::field}{self::Number} in let final self::Number #t61 = #t59.{self::Class::field} = self::NumberExtension|-(#t60, 1) in #t60);
+  self::expect(n0, v.{self::Class::field}{self::Number});
+  self::expect(n0, v.{self::Class::field}{self::Number});
+  let final self::Class #t62 = v in #t62.{self::Class::field} = self::NumberExtension|+(#t62.{self::Class::field}{self::Number}, n1);
+  self::expect(n1, v.{self::Class::field}{self::Number});
+  let final self::Class #t63 = v in #t63.{self::Class::field} = self::NumberExtension|+(#t63.{self::Class::field}{self::Number}, n1);
+  self::expect(n2, v.{self::Class::field}{self::Number});
+  let final self::Class #t64 = v in #t64.{self::Class::field} = self::NumberExtension|-(#t64.{self::Class::field}{self::Number}, n2);
+  self::expect(n0, v.{self::Class::field}{self::Number});
+  let final self::Class #t65 = v in #t65.{self::Class::field} = self::NumberExtension|+(#t65.{self::Class::field}{self::Number}, n1);
+  self::expect(n1, v.{self::Class::field}{self::Number});
+  let final self::Class #t66 = v in #t66.{self::Class::field} = self::NumberExtension|-(#t66.{self::Class::field}{self::Number}, n1);
+  self::expect(n0, v.{self::Class::field}{self::Number});
+  let final self::Class #t67 = v in #t67.{self::Class::field} = self::NumberExtension|+(#t67.{self::Class::field}{self::Number}, 1);
+  self::expect(n1, v.{self::Class::field}{self::Number});
+  let final self::Class #t68 = v in #t68.{self::Class::field} = self::NumberExtension|-(#t68.{self::Class::field}{self::Number}, 1);
+  self::expect(n0, v.{self::Class::field}{self::Number});
+  let final self::Class #t69 = v in #t69.{self::Class::field} = self::NumberExtension|+(#t69.{self::Class::field}{self::Number}, 1);
+  self::expect(n1, v.{self::Class::field}{self::Number});
+  let final self::Class #t70 = v in #t70.{self::Class::field} = self::NumberExtension|-(#t70.{self::Class::field}{self::Number}, 1);
+  self::expect(n0, v.{self::Class::field}{self::Number});
   self::expect(n0, self::ClassExtension|get#property(v));
-  self::expect(n1, let final self::Class* #t71 = v in let final self::Number* #t72 = self::NumberExtension|+(self::ClassExtension|get#property(#t71), n1) in let final void #t73 = self::ClassExtension|set#property(#t71, #t72) in #t72);
-  self::expect(n2, let final self::Class* #t74 = v in let final self::Number* #t75 = self::NumberExtension|+(self::ClassExtension|get#property(#t74), n1) in let final void #t76 = self::ClassExtension|set#property(#t74, #t75) in #t75);
-  self::expect(n0, let final self::Class* #t77 = v in let final self::Number* #t78 = self::NumberExtension|-(self::ClassExtension|get#property(#t77), n2) in let final void #t79 = self::ClassExtension|set#property(#t77, #t78) in #t78);
-  self::expect(n1, let final self::Class* #t80 = v in let final self::Number* #t81 = self::NumberExtension|+(self::ClassExtension|get#property(#t80), n1) in let final void #t82 = self::ClassExtension|set#property(#t80, #t81) in #t81);
-  self::expect(n0, let final self::Class* #t83 = v in let final self::Number* #t84 = self::NumberExtension|-(self::ClassExtension|get#property(#t83), n1) in let final void #t85 = self::ClassExtension|set#property(#t83, #t84) in #t84);
-  self::expect(n1, let final self::Class* #t86 = v in let final self::Number* #t87 = self::NumberExtension|+(self::ClassExtension|get#property(#t86), 1) in let final void #t88 = self::ClassExtension|set#property(#t86, #t87) in #t87);
-  self::expect(n0, let final self::Class* #t89 = v in let final self::Number* #t90 = self::NumberExtension|-(self::ClassExtension|get#property(#t89), 1) in let final void #t91 = self::ClassExtension|set#property(#t89, #t90) in #t90);
-  self::expect(n0, let final self::Class* #t92 = v in let final self::Number* #t93 = self::ClassExtension|get#property(#t92) in let final self::Number* #t94 = self::ClassExtension|set#property(#t92, self::NumberExtension|+(#t93, 1)) in #t93);
-  self::expect(n1, let final self::Class* #t95 = v in let final self::Number* #t96 = self::ClassExtension|get#property(#t95) in let final self::Number* #t97 = self::ClassExtension|set#property(#t95, self::NumberExtension|-(#t96, 1)) in #t96);
+  self::expect(n1, let final self::Class #t71 = v in let final self::Number #t72 = self::NumberExtension|+(self::ClassExtension|get#property(#t71), n1) in let final void #t73 = self::ClassExtension|set#property(#t71, #t72) in #t72);
+  self::expect(n2, let final self::Class #t74 = v in let final self::Number #t75 = self::NumberExtension|+(self::ClassExtension|get#property(#t74), n1) in let final void #t76 = self::ClassExtension|set#property(#t74, #t75) in #t75);
+  self::expect(n0, let final self::Class #t77 = v in let final self::Number #t78 = self::NumberExtension|-(self::ClassExtension|get#property(#t77), n2) in let final void #t79 = self::ClassExtension|set#property(#t77, #t78) in #t78);
+  self::expect(n1, let final self::Class #t80 = v in let final self::Number #t81 = self::NumberExtension|+(self::ClassExtension|get#property(#t80), n1) in let final void #t82 = self::ClassExtension|set#property(#t80, #t81) in #t81);
+  self::expect(n0, let final self::Class #t83 = v in let final self::Number #t84 = self::NumberExtension|-(self::ClassExtension|get#property(#t83), n1) in let final void #t85 = self::ClassExtension|set#property(#t83, #t84) in #t84);
+  self::expect(n1, let final self::Class #t86 = v in let final self::Number #t87 = self::NumberExtension|+(self::ClassExtension|get#property(#t86), 1) in let final void #t88 = self::ClassExtension|set#property(#t86, #t87) in #t87);
+  self::expect(n0, let final self::Class #t89 = v in let final self::Number #t90 = self::NumberExtension|-(self::ClassExtension|get#property(#t89), 1) in let final void #t91 = self::ClassExtension|set#property(#t89, #t90) in #t90);
+  self::expect(n0, let final self::Class #t92 = v in let final self::Number #t93 = self::ClassExtension|get#property(#t92) in let final self::Number #t94 = self::ClassExtension|set#property(#t92, self::NumberExtension|+(#t93, 1)) in #t93);
+  self::expect(n1, let final self::Class #t95 = v in let final self::Number #t96 = self::ClassExtension|get#property(#t95) in let final self::Number #t97 = self::ClassExtension|set#property(#t95, self::NumberExtension|-(#t96, 1)) in #t96);
   self::expect(n0, self::ClassExtension|get#property(v));
   self::expect(n0, self::ClassExtension|get#property(v));
-  let final self::Class* #t98 = v in self::ClassExtension|set#property(#t98, self::NumberExtension|+(self::ClassExtension|get#property(#t98), n1));
+  let final self::Class #t98 = v in self::ClassExtension|set#property(#t98, self::NumberExtension|+(self::ClassExtension|get#property(#t98), n1));
   self::expect(n1, self::ClassExtension|get#property(v));
-  let final self::Class* #t99 = v in self::ClassExtension|set#property(#t99, self::NumberExtension|+(self::ClassExtension|get#property(#t99), n1));
+  let final self::Class #t99 = v in self::ClassExtension|set#property(#t99, self::NumberExtension|+(self::ClassExtension|get#property(#t99), n1));
   self::expect(n2, self::ClassExtension|get#property(v));
-  let final self::Class* #t100 = v in self::ClassExtension|set#property(#t100, self::NumberExtension|-(self::ClassExtension|get#property(#t100), n2));
+  let final self::Class #t100 = v in self::ClassExtension|set#property(#t100, self::NumberExtension|-(self::ClassExtension|get#property(#t100), n2));
   self::expect(n0, self::ClassExtension|get#property(v));
-  let final self::Class* #t101 = v in self::ClassExtension|set#property(#t101, self::NumberExtension|+(self::ClassExtension|get#property(#t101), n1));
+  let final self::Class #t101 = v in self::ClassExtension|set#property(#t101, self::NumberExtension|+(self::ClassExtension|get#property(#t101), n1));
   self::expect(n1, self::ClassExtension|get#property(v));
-  let final self::Class* #t102 = v in self::ClassExtension|set#property(#t102, self::NumberExtension|-(self::ClassExtension|get#property(#t102), n1));
+  let final self::Class #t102 = v in self::ClassExtension|set#property(#t102, self::NumberExtension|-(self::ClassExtension|get#property(#t102), n1));
   self::expect(n0, self::ClassExtension|get#property(v));
-  let final self::Class* #t103 = v in let final self::Number* #t104 = self::NumberExtension|+(self::ClassExtension|get#property(#t103), 1) in let final void #t105 = self::ClassExtension|set#property(#t103, #t104) in #t104;
+  let final self::Class #t103 = v in let final self::Number #t104 = self::NumberExtension|+(self::ClassExtension|get#property(#t103), 1) in let final void #t105 = self::ClassExtension|set#property(#t103, #t104) in #t104;
   self::expect(n1, self::ClassExtension|get#property(v));
-  let final self::Class* #t106 = v in let final self::Number* #t107 = self::NumberExtension|-(self::ClassExtension|get#property(#t106), 1) in let final void #t108 = self::ClassExtension|set#property(#t106, #t107) in #t107;
+  let final self::Class #t106 = v in let final self::Number #t107 = self::NumberExtension|-(self::ClassExtension|get#property(#t106), 1) in let final void #t108 = self::ClassExtension|set#property(#t106, #t107) in #t107;
   self::expect(n0, self::ClassExtension|get#property(v));
-  let final self::Class* #t109 = v in self::ClassExtension|set#property(#t109, self::NumberExtension|+(self::ClassExtension|get#property(#t109), 1));
+  let final self::Class #t109 = v in self::ClassExtension|set#property(#t109, self::NumberExtension|+(self::ClassExtension|get#property(#t109), 1));
   self::expect(n1, self::ClassExtension|get#property(v));
-  let final self::Class* #t110 = v in self::ClassExtension|set#property(#t110, self::NumberExtension|-(self::ClassExtension|get#property(#t110), 1));
+  let final self::Class #t110 = v in self::ClassExtension|set#property(#t110, self::NumberExtension|-(self::ClassExtension|get#property(#t110), 1));
   self::expect(n0, self::ClassExtension|get#property(v));
 }
 static method testIntProperties() → dynamic {
-  core::int* n0 = 0;
-  core::int* n1 = 1;
-  core::int* n2 = 2;
-  self::IntClass* v = new self::IntClass::•(n0);
-  self::expect(n0, v.{self::IntClass::field}{core::int*});
-  self::expect(n1, let final self::IntClass* #t111 = v in #t111.{self::IntClass::field} = #t111.{self::IntClass::field}{core::int*}.{core::num::+}(n1){(core::num*) →* core::int*});
-  self::expect(n2, let final self::IntClass* #t112 = v in #t112.{self::IntClass::field} = #t112.{self::IntClass::field}{core::int*}.{core::num::+}(n1){(core::num*) →* core::int*});
-  self::expect(n0, let final self::IntClass* #t113 = v in #t113.{self::IntClass::field} = #t113.{self::IntClass::field}{core::int*}.{core::num::-}(n2){(core::num*) →* core::int*});
-  self::expect(n1, let final self::IntClass* #t114 = v in #t114.{self::IntClass::field} = #t114.{self::IntClass::field}{core::int*}.{core::num::+}(n1){(core::num*) →* core::int*});
-  self::expect(n0, let final self::IntClass* #t115 = v in #t115.{self::IntClass::field} = #t115.{self::IntClass::field}{core::int*}.{core::num::-}(n1){(core::num*) →* core::int*});
-  self::expect(n1, let final self::IntClass* #t116 = v in #t116.{self::IntClass::field} = #t116.{self::IntClass::field}{core::int*}.{core::num::+}(1){(core::num*) →* core::int*});
-  self::expect(n0, let final self::IntClass* #t117 = v in #t117.{self::IntClass::field} = #t117.{self::IntClass::field}{core::int*}.{core::num::-}(1){(core::num*) →* core::int*});
-  self::expect(n0, let final self::IntClass* #t118 = v in let final core::int* #t119 = #t118.{self::IntClass::field}{core::int*} in let final core::int* #t120 = #t118.{self::IntClass::field} = #t119.{core::num::+}(1){(core::num*) →* core::int*} in #t119);
-  self::expect(n1, let final self::IntClass* #t121 = v in let final core::int* #t122 = #t121.{self::IntClass::field}{core::int*} in let final core::int* #t123 = #t121.{self::IntClass::field} = #t122.{core::num::-}(1){(core::num*) →* core::int*} in #t122);
-  self::expect(n0, v.{self::IntClass::field}{core::int*});
-  self::expect(n0, v.{self::IntClass::field}{core::int*});
-  let final self::IntClass* #t124 = v in #t124.{self::IntClass::field} = #t124.{self::IntClass::field}{core::int*}.{core::num::+}(n1){(core::num*) →* core::int*};
-  self::expect(n1, v.{self::IntClass::field}{core::int*});
-  let final self::IntClass* #t125 = v in #t125.{self::IntClass::field} = #t125.{self::IntClass::field}{core::int*}.{core::num::+}(n1){(core::num*) →* core::int*};
-  self::expect(n2, v.{self::IntClass::field}{core::int*});
-  let final self::IntClass* #t126 = v in #t126.{self::IntClass::field} = #t126.{self::IntClass::field}{core::int*}.{core::num::-}(n2){(core::num*) →* core::int*};
-  self::expect(n0, v.{self::IntClass::field}{core::int*});
-  let final self::IntClass* #t127 = v in #t127.{self::IntClass::field} = #t127.{self::IntClass::field}{core::int*}.{core::num::+}(n1){(core::num*) →* core::int*};
-  self::expect(n1, v.{self::IntClass::field}{core::int*});
-  let final self::IntClass* #t128 = v in #t128.{self::IntClass::field} = #t128.{self::IntClass::field}{core::int*}.{core::num::-}(n1){(core::num*) →* core::int*};
-  self::expect(n0, v.{self::IntClass::field}{core::int*});
-  let final self::IntClass* #t129 = v in #t129.{self::IntClass::field} = #t129.{self::IntClass::field}{core::int*}.{core::num::+}(1){(core::num*) →* core::int*};
-  self::expect(n1, v.{self::IntClass::field}{core::int*});
-  let final self::IntClass* #t130 = v in #t130.{self::IntClass::field} = #t130.{self::IntClass::field}{core::int*}.{core::num::-}(1){(core::num*) →* core::int*};
-  self::expect(n0, v.{self::IntClass::field}{core::int*});
-  let final self::IntClass* #t131 = v in #t131.{self::IntClass::field} = #t131.{self::IntClass::field}{core::int*}.{core::num::+}(1){(core::num*) →* core::int*};
-  self::expect(n1, v.{self::IntClass::field}{core::int*});
-  let final self::IntClass* #t132 = v in #t132.{self::IntClass::field} = #t132.{self::IntClass::field}{core::int*}.{core::num::-}(1){(core::num*) →* core::int*};
-  self::expect(n0, v.{self::IntClass::field}{core::int*});
+  core::int n0 = 0;
+  core::int n1 = 1;
+  core::int n2 = 2;
+  self::IntClass v = new self::IntClass::•(n0);
+  self::expect(n0, v.{self::IntClass::field}{core::int});
+  self::expect(n1, let final self::IntClass #t111 = v in #t111.{self::IntClass::field} = #t111.{self::IntClass::field}{core::int}.{core::num::+}(n1){(core::num) → core::int});
+  self::expect(n2, let final self::IntClass #t112 = v in #t112.{self::IntClass::field} = #t112.{self::IntClass::field}{core::int}.{core::num::+}(n1){(core::num) → core::int});
+  self::expect(n0, let final self::IntClass #t113 = v in #t113.{self::IntClass::field} = #t113.{self::IntClass::field}{core::int}.{core::num::-}(n2){(core::num) → core::int});
+  self::expect(n1, let final self::IntClass #t114 = v in #t114.{self::IntClass::field} = #t114.{self::IntClass::field}{core::int}.{core::num::+}(n1){(core::num) → core::int});
+  self::expect(n0, let final self::IntClass #t115 = v in #t115.{self::IntClass::field} = #t115.{self::IntClass::field}{core::int}.{core::num::-}(n1){(core::num) → core::int});
+  self::expect(n1, let final self::IntClass #t116 = v in #t116.{self::IntClass::field} = #t116.{self::IntClass::field}{core::int}.{core::num::+}(1){(core::num) → core::int});
+  self::expect(n0, let final self::IntClass #t117 = v in #t117.{self::IntClass::field} = #t117.{self::IntClass::field}{core::int}.{core::num::-}(1){(core::num) → core::int});
+  self::expect(n0, let final self::IntClass #t118 = v in let final core::int #t119 = #t118.{self::IntClass::field}{core::int} in let final core::int #t120 = #t118.{self::IntClass::field} = #t119.{core::num::+}(1){(core::num) → core::int} in #t119);
+  self::expect(n1, let final self::IntClass #t121 = v in let final core::int #t122 = #t121.{self::IntClass::field}{core::int} in let final core::int #t123 = #t121.{self::IntClass::field} = #t122.{core::num::-}(1){(core::num) → core::int} in #t122);
+  self::expect(n0, v.{self::IntClass::field}{core::int});
+  self::expect(n0, v.{self::IntClass::field}{core::int});
+  let final self::IntClass #t124 = v in #t124.{self::IntClass::field} = #t124.{self::IntClass::field}{core::int}.{core::num::+}(n1){(core::num) → core::int};
+  self::expect(n1, v.{self::IntClass::field}{core::int});
+  let final self::IntClass #t125 = v in #t125.{self::IntClass::field} = #t125.{self::IntClass::field}{core::int}.{core::num::+}(n1){(core::num) → core::int};
+  self::expect(n2, v.{self::IntClass::field}{core::int});
+  let final self::IntClass #t126 = v in #t126.{self::IntClass::field} = #t126.{self::IntClass::field}{core::int}.{core::num::-}(n2){(core::num) → core::int};
+  self::expect(n0, v.{self::IntClass::field}{core::int});
+  let final self::IntClass #t127 = v in #t127.{self::IntClass::field} = #t127.{self::IntClass::field}{core::int}.{core::num::+}(n1){(core::num) → core::int};
+  self::expect(n1, v.{self::IntClass::field}{core::int});
+  let final self::IntClass #t128 = v in #t128.{self::IntClass::field} = #t128.{self::IntClass::field}{core::int}.{core::num::-}(n1){(core::num) → core::int};
+  self::expect(n0, v.{self::IntClass::field}{core::int});
+  let final self::IntClass #t129 = v in #t129.{self::IntClass::field} = #t129.{self::IntClass::field}{core::int}.{core::num::+}(1){(core::num) → core::int};
+  self::expect(n1, v.{self::IntClass::field}{core::int});
+  let final self::IntClass #t130 = v in #t130.{self::IntClass::field} = #t130.{self::IntClass::field}{core::int}.{core::num::-}(1){(core::num) → core::int};
+  self::expect(n0, v.{self::IntClass::field}{core::int});
+  let final self::IntClass #t131 = v in #t131.{self::IntClass::field} = #t131.{self::IntClass::field}{core::int}.{core::num::+}(1){(core::num) → core::int};
+  self::expect(n1, v.{self::IntClass::field}{core::int});
+  let final self::IntClass #t132 = v in #t132.{self::IntClass::field} = #t132.{self::IntClass::field}{core::int}.{core::num::-}(1){(core::num) → core::int};
+  self::expect(n0, v.{self::IntClass::field}{core::int});
   self::expect(n0, self::IntClassExtension|get#property(v));
-  self::expect(n1, let final self::IntClass* #t133 = v in let final core::int* #t134 = self::IntClassExtension|get#property(#t133).{core::num::+}(n1){(core::num*) →* core::int*} in let final void #t135 = self::IntClassExtension|set#property(#t133, #t134) in #t134);
-  self::expect(n2, let final self::IntClass* #t136 = v in let final core::int* #t137 = self::IntClassExtension|get#property(#t136).{core::num::+}(n1){(core::num*) →* core::int*} in let final void #t138 = self::IntClassExtension|set#property(#t136, #t137) in #t137);
-  self::expect(n0, let final self::IntClass* #t139 = v in let final core::int* #t140 = self::IntClassExtension|get#property(#t139).{core::num::-}(n2){(core::num*) →* core::int*} in let final void #t141 = self::IntClassExtension|set#property(#t139, #t140) in #t140);
-  self::expect(n1, let final self::IntClass* #t142 = v in let final core::int* #t143 = self::IntClassExtension|get#property(#t142).{core::num::+}(n1){(core::num*) →* core::int*} in let final void #t144 = self::IntClassExtension|set#property(#t142, #t143) in #t143);
-  self::expect(n0, let final self::IntClass* #t145 = v in let final core::int* #t146 = self::IntClassExtension|get#property(#t145).{core::num::-}(n1){(core::num*) →* core::int*} in let final void #t147 = self::IntClassExtension|set#property(#t145, #t146) in #t146);
-  self::expect(n1, let final self::IntClass* #t148 = v in let final core::int* #t149 = self::IntClassExtension|get#property(#t148).{core::num::+}(1){(core::num*) →* core::int*} in let final void #t150 = self::IntClassExtension|set#property(#t148, #t149) in #t149);
-  self::expect(n0, let final self::IntClass* #t151 = v in let final core::int* #t152 = self::IntClassExtension|get#property(#t151).{core::num::-}(1){(core::num*) →* core::int*} in let final void #t153 = self::IntClassExtension|set#property(#t151, #t152) in #t152);
-  self::expect(n0, let final self::IntClass* #t154 = v in let final core::int* #t155 = self::IntClassExtension|get#property(#t154) in let final core::int* #t156 = self::IntClassExtension|set#property(#t154, #t155.{core::num::+}(1){(core::num*) →* core::int*}) in #t155);
-  self::expect(n1, let final self::IntClass* #t157 = v in let final core::int* #t158 = self::IntClassExtension|get#property(#t157) in let final core::int* #t159 = self::IntClassExtension|set#property(#t157, #t158.{core::num::-}(1){(core::num*) →* core::int*}) in #t158);
+  self::expect(n1, let final self::IntClass #t133 = v in let final core::int #t134 = self::IntClassExtension|get#property(#t133).{core::num::+}(n1){(core::num) → core::int} in let final void #t135 = self::IntClassExtension|set#property(#t133, #t134) in #t134);
+  self::expect(n2, let final self::IntClass #t136 = v in let final core::int #t137 = self::IntClassExtension|get#property(#t136).{core::num::+}(n1){(core::num) → core::int} in let final void #t138 = self::IntClassExtension|set#property(#t136, #t137) in #t137);
+  self::expect(n0, let final self::IntClass #t139 = v in let final core::int #t140 = self::IntClassExtension|get#property(#t139).{core::num::-}(n2){(core::num) → core::int} in let final void #t141 = self::IntClassExtension|set#property(#t139, #t140) in #t140);
+  self::expect(n1, let final self::IntClass #t142 = v in let final core::int #t143 = self::IntClassExtension|get#property(#t142).{core::num::+}(n1){(core::num) → core::int} in let final void #t144 = self::IntClassExtension|set#property(#t142, #t143) in #t143);
+  self::expect(n0, let final self::IntClass #t145 = v in let final core::int #t146 = self::IntClassExtension|get#property(#t145).{core::num::-}(n1){(core::num) → core::int} in let final void #t147 = self::IntClassExtension|set#property(#t145, #t146) in #t146);
+  self::expect(n1, let final self::IntClass #t148 = v in let final core::int #t149 = self::IntClassExtension|get#property(#t148).{core::num::+}(1){(core::num) → core::int} in let final void #t150 = self::IntClassExtension|set#property(#t148, #t149) in #t149);
+  self::expect(n0, let final self::IntClass #t151 = v in let final core::int #t152 = self::IntClassExtension|get#property(#t151).{core::num::-}(1){(core::num) → core::int} in let final void #t153 = self::IntClassExtension|set#property(#t151, #t152) in #t152);
+  self::expect(n0, let final self::IntClass #t154 = v in let final core::int #t155 = self::IntClassExtension|get#property(#t154) in let final core::int #t156 = self::IntClassExtension|set#property(#t154, #t155.{core::num::+}(1){(core::num) → core::int}) in #t155);
+  self::expect(n1, let final self::IntClass #t157 = v in let final core::int #t158 = self::IntClassExtension|get#property(#t157) in let final core::int #t159 = self::IntClassExtension|set#property(#t157, #t158.{core::num::-}(1){(core::num) → core::int}) in #t158);
   self::expect(n0, self::IntClassExtension|get#property(v));
   self::expect(n0, self::IntClassExtension|get#property(v));
-  let final self::IntClass* #t160 = v in self::IntClassExtension|set#property(#t160, self::IntClassExtension|get#property(#t160).{core::num::+}(n1){(core::num*) →* core::int*});
+  let final self::IntClass #t160 = v in self::IntClassExtension|set#property(#t160, self::IntClassExtension|get#property(#t160).{core::num::+}(n1){(core::num) → core::int});
   self::expect(n1, self::IntClassExtension|get#property(v));
-  let final self::IntClass* #t161 = v in self::IntClassExtension|set#property(#t161, self::IntClassExtension|get#property(#t161).{core::num::+}(n1){(core::num*) →* core::int*});
+  let final self::IntClass #t161 = v in self::IntClassExtension|set#property(#t161, self::IntClassExtension|get#property(#t161).{core::num::+}(n1){(core::num) → core::int});
   self::expect(n2, self::IntClassExtension|get#property(v));
-  let final self::IntClass* #t162 = v in self::IntClassExtension|set#property(#t162, self::IntClassExtension|get#property(#t162).{core::num::-}(n2){(core::num*) →* core::int*});
+  let final self::IntClass #t162 = v in self::IntClassExtension|set#property(#t162, self::IntClassExtension|get#property(#t162).{core::num::-}(n2){(core::num) → core::int});
   self::expect(n0, self::IntClassExtension|get#property(v));
-  let final self::IntClass* #t163 = v in self::IntClassExtension|set#property(#t163, self::IntClassExtension|get#property(#t163).{core::num::+}(n1){(core::num*) →* core::int*});
+  let final self::IntClass #t163 = v in self::IntClassExtension|set#property(#t163, self::IntClassExtension|get#property(#t163).{core::num::+}(n1){(core::num) → core::int});
   self::expect(n1, self::IntClassExtension|get#property(v));
-  let final self::IntClass* #t164 = v in self::IntClassExtension|set#property(#t164, self::IntClassExtension|get#property(#t164).{core::num::-}(n1){(core::num*) →* core::int*});
+  let final self::IntClass #t164 = v in self::IntClassExtension|set#property(#t164, self::IntClassExtension|get#property(#t164).{core::num::-}(n1){(core::num) → core::int});
   self::expect(n0, self::IntClassExtension|get#property(v));
-  let final self::IntClass* #t165 = v in let final core::int* #t166 = self::IntClassExtension|get#property(#t165).{core::num::+}(1){(core::num*) →* core::int*} in let final void #t167 = self::IntClassExtension|set#property(#t165, #t166) in #t166;
+  let final self::IntClass #t165 = v in let final core::int #t166 = self::IntClassExtension|get#property(#t165).{core::num::+}(1){(core::num) → core::int} in let final void #t167 = self::IntClassExtension|set#property(#t165, #t166) in #t166;
   self::expect(n1, self::IntClassExtension|get#property(v));
-  let final self::IntClass* #t168 = v in let final core::int* #t169 = self::IntClassExtension|get#property(#t168).{core::num::-}(1){(core::num*) →* core::int*} in let final void #t170 = self::IntClassExtension|set#property(#t168, #t169) in #t169;
+  let final self::IntClass #t168 = v in let final core::int #t169 = self::IntClassExtension|get#property(#t168).{core::num::-}(1){(core::num) → core::int} in let final void #t170 = self::IntClassExtension|set#property(#t168, #t169) in #t169;
   self::expect(n0, self::IntClassExtension|get#property(v));
-  let final self::IntClass* #t171 = v in self::IntClassExtension|set#property(#t171, self::IntClassExtension|get#property(#t171).{core::num::+}(1){(core::num*) →* core::int*});
+  let final self::IntClass #t171 = v in self::IntClassExtension|set#property(#t171, self::IntClassExtension|get#property(#t171).{core::num::+}(1){(core::num) → core::int});
   self::expect(n1, self::IntClassExtension|get#property(v));
-  let final self::IntClass* #t172 = v in self::IntClassExtension|set#property(#t172, self::IntClassExtension|get#property(#t172).{core::num::-}(1){(core::num*) →* core::int*});
+  let final self::IntClass #t172 = v in self::IntClassExtension|set#property(#t172, self::IntClassExtension|get#property(#t172).{core::num::-}(1){(core::num) → core::int});
   self::expect(n0, self::IntClassExtension|get#property(v));
 }
 static method testExplicitProperties() → dynamic {
-  self::Number* n0 = new self::Number::•(0);
-  self::Number* n1 = new self::Number::•(1);
-  self::Number* n2 = new self::Number::•(2);
-  self::Class* v = new self::Class::•(n0);
+  self::Number n0 = new self::Number::•(0);
+  self::Number n1 = new self::Number::•(1);
+  self::Number n2 = new self::Number::•(2);
+  self::Class v = new self::Class::•(n0);
   self::expect(n0, self::ClassExtension|get#property(v));
-  self::expect(n1, let final self::Class* #t173 = v in let final self::Number* #t174 = self::NumberExtension|+(self::ClassExtension|get#property(#t173), n1) in let final void #t175 = self::ClassExtension|set#property(#t173, #t174) in #t174);
-  self::expect(n2, let final self::Class* #t176 = v in let final self::Number* #t177 = self::NumberExtension|+(self::ClassExtension|get#property(#t176), n1) in let final void #t178 = self::ClassExtension|set#property(#t176, #t177) in #t177);
-  self::expect(n0, let final self::Class* #t179 = v in let final self::Number* #t180 = self::NumberExtension|-(self::ClassExtension|get#property(#t179), n2) in let final void #t181 = self::ClassExtension|set#property(#t179, #t180) in #t180);
-  self::expect(n1, let final self::Class* #t182 = v in let final self::Number* #t183 = self::NumberExtension|+(self::ClassExtension|get#property(#t182), n1) in let final void #t184 = self::ClassExtension|set#property(#t182, #t183) in #t183);
-  self::expect(n0, let final self::Class* #t185 = v in let final self::Number* #t186 = self::NumberExtension|-(self::ClassExtension|get#property(#t185), n1) in let final void #t187 = self::ClassExtension|set#property(#t185, #t186) in #t186);
-  self::expect(n1, let final self::Class* #t188 = v in let final self::Number* #t189 = self::NumberExtension|+(self::ClassExtension|get#property(#t188), 1) in let final void #t190 = self::ClassExtension|set#property(#t188, #t189) in #t189);
-  self::expect(n0, let final self::Class* #t191 = v in let final self::Number* #t192 = self::NumberExtension|-(self::ClassExtension|get#property(#t191), 1) in let final void #t193 = self::ClassExtension|set#property(#t191, #t192) in #t192);
-  self::expect(n0, let final self::Class* #t194 = v in let final self::Number* #t195 = self::ClassExtension|get#property(#t194) in let final self::Number* #t196 = let final self::Number* #t197 = self::NumberExtension|+(#t195, 1) in let final void #t198 = self::ClassExtension|set#property(#t194, #t197) in #t197 in #t195);
-  self::expect(n1, let final self::Class* #t199 = v in let final self::Number* #t200 = self::ClassExtension|get#property(#t199) in let final self::Number* #t201 = let final self::Number* #t202 = self::NumberExtension|-(#t200, 1) in let final void #t203 = self::ClassExtension|set#property(#t199, #t202) in #t202 in #t200);
+  self::expect(n1, let final self::Class #t173 = v in let final self::Number #t174 = self::NumberExtension|+(self::ClassExtension|get#property(#t173), n1) in let final void #t175 = self::ClassExtension|set#property(#t173, #t174) in #t174);
+  self::expect(n2, let final self::Class #t176 = v in let final self::Number #t177 = self::NumberExtension|+(self::ClassExtension|get#property(#t176), n1) in let final void #t178 = self::ClassExtension|set#property(#t176, #t177) in #t177);
+  self::expect(n0, let final self::Class #t179 = v in let final self::Number #t180 = self::NumberExtension|-(self::ClassExtension|get#property(#t179), n2) in let final void #t181 = self::ClassExtension|set#property(#t179, #t180) in #t180);
+  self::expect(n1, let final self::Class #t182 = v in let final self::Number #t183 = self::NumberExtension|+(self::ClassExtension|get#property(#t182), n1) in let final void #t184 = self::ClassExtension|set#property(#t182, #t183) in #t183);
+  self::expect(n0, let final self::Class #t185 = v in let final self::Number #t186 = self::NumberExtension|-(self::ClassExtension|get#property(#t185), n1) in let final void #t187 = self::ClassExtension|set#property(#t185, #t186) in #t186);
+  self::expect(n1, let final self::Class #t188 = v in let final self::Number #t189 = self::NumberExtension|+(self::ClassExtension|get#property(#t188), 1) in let final void #t190 = self::ClassExtension|set#property(#t188, #t189) in #t189);
+  self::expect(n0, let final self::Class #t191 = v in let final self::Number #t192 = self::NumberExtension|-(self::ClassExtension|get#property(#t191), 1) in let final void #t193 = self::ClassExtension|set#property(#t191, #t192) in #t192);
+  self::expect(n0, let final self::Class #t194 = v in let final self::Number #t195 = self::ClassExtension|get#property(#t194) in let final self::Number #t196 = let final self::Number #t197 = self::NumberExtension|+(#t195, 1) in let final void #t198 = self::ClassExtension|set#property(#t194, #t197) in #t197 in #t195);
+  self::expect(n1, let final self::Class #t199 = v in let final self::Number #t200 = self::ClassExtension|get#property(#t199) in let final self::Number #t201 = let final self::Number #t202 = self::NumberExtension|-(#t200, 1) in let final void #t203 = self::ClassExtension|set#property(#t199, #t202) in #t202 in #t200);
   self::expect(n0, self::ClassExtension|get#property(v));
   self::expect(n0, self::ClassExtension|get#property(v));
-  let final self::Class* #t204 = v in self::ClassExtension|set#property(#t204, self::NumberExtension|+(self::ClassExtension|get#property(#t204), n1));
+  let final self::Class #t204 = v in self::ClassExtension|set#property(#t204, self::NumberExtension|+(self::ClassExtension|get#property(#t204), n1));
   self::expect(n1, self::ClassExtension|get#property(v));
-  let final self::Class* #t205 = v in self::ClassExtension|set#property(#t205, self::NumberExtension|+(self::ClassExtension|get#property(#t205), n1));
+  let final self::Class #t205 = v in self::ClassExtension|set#property(#t205, self::NumberExtension|+(self::ClassExtension|get#property(#t205), n1));
   self::expect(n2, self::ClassExtension|get#property(v));
-  let final self::Class* #t206 = v in self::ClassExtension|set#property(#t206, self::NumberExtension|-(self::ClassExtension|get#property(#t206), n2));
+  let final self::Class #t206 = v in self::ClassExtension|set#property(#t206, self::NumberExtension|-(self::ClassExtension|get#property(#t206), n2));
   self::expect(n0, self::ClassExtension|get#property(v));
-  let final self::Class* #t207 = v in self::ClassExtension|set#property(#t207, self::NumberExtension|+(self::ClassExtension|get#property(#t207), n1));
+  let final self::Class #t207 = v in self::ClassExtension|set#property(#t207, self::NumberExtension|+(self::ClassExtension|get#property(#t207), n1));
   self::expect(n1, self::ClassExtension|get#property(v));
-  let final self::Class* #t208 = v in self::ClassExtension|set#property(#t208, self::NumberExtension|-(self::ClassExtension|get#property(#t208), n1));
+  let final self::Class #t208 = v in self::ClassExtension|set#property(#t208, self::NumberExtension|-(self::ClassExtension|get#property(#t208), n1));
   self::expect(n0, self::ClassExtension|get#property(v));
-  let final self::Class* #t209 = v in let final self::Number* #t210 = self::NumberExtension|+(self::ClassExtension|get#property(#t209), 1) in let final void #t211 = self::ClassExtension|set#property(#t209, #t210) in #t210;
+  let final self::Class #t209 = v in let final self::Number #t210 = self::NumberExtension|+(self::ClassExtension|get#property(#t209), 1) in let final void #t211 = self::ClassExtension|set#property(#t209, #t210) in #t210;
   self::expect(n1, self::ClassExtension|get#property(v));
-  let final self::Class* #t212 = v in let final self::Number* #t213 = self::NumberExtension|-(self::ClassExtension|get#property(#t212), 1) in let final void #t214 = self::ClassExtension|set#property(#t212, #t213) in #t213;
+  let final self::Class #t212 = v in let final self::Number #t213 = self::NumberExtension|-(self::ClassExtension|get#property(#t212), 1) in let final void #t214 = self::ClassExtension|set#property(#t212, #t213) in #t213;
   self::expect(n0, self::ClassExtension|get#property(v));
-  let final self::Class* #t215 = v in self::ClassExtension|set#property(#t215, self::NumberExtension|+(self::ClassExtension|get#property(#t215), 1));
+  let final self::Class #t215 = v in self::ClassExtension|set#property(#t215, self::NumberExtension|+(self::ClassExtension|get#property(#t215), 1));
   self::expect(n1, self::ClassExtension|get#property(v));
-  let final self::Class* #t216 = v in self::ClassExtension|set#property(#t216, self::NumberExtension|-(self::ClassExtension|get#property(#t216), 1));
+  let final self::Class #t216 = v in self::ClassExtension|set#property(#t216, self::NumberExtension|-(self::ClassExtension|get#property(#t216), 1));
   self::expect(n0, self::ClassExtension|get#property(v));
 }
 static method testExplicitIntProperties() → dynamic {
-  core::int* n0 = 0;
-  core::int* n1 = 1;
-  core::int* n2 = 2;
-  self::IntClass* v = new self::IntClass::•(n0);
+  core::int n0 = 0;
+  core::int n1 = 1;
+  core::int n2 = 2;
+  self::IntClass v = new self::IntClass::•(n0);
   self::expect(n0, self::IntClassExtension|get#property(v));
-  self::expect(n1, let final self::IntClass* #t217 = v in let final core::int* #t218 = self::IntClassExtension|get#property(#t217).{core::num::+}(n1){(core::num*) →* core::int*} in let final void #t219 = self::IntClassExtension|set#property(#t217, #t218) in #t218);
-  self::expect(n2, let final self::IntClass* #t220 = v in let final core::int* #t221 = self::IntClassExtension|get#property(#t220).{core::num::+}(n1){(core::num*) →* core::int*} in let final void #t222 = self::IntClassExtension|set#property(#t220, #t221) in #t221);
-  self::expect(n0, let final self::IntClass* #t223 = v in let final core::int* #t224 = self::IntClassExtension|get#property(#t223).{core::num::-}(n2){(core::num*) →* core::int*} in let final void #t225 = self::IntClassExtension|set#property(#t223, #t224) in #t224);
-  self::expect(n1, let final self::IntClass* #t226 = v in let final core::int* #t227 = self::IntClassExtension|get#property(#t226).{core::num::+}(n1){(core::num*) →* core::int*} in let final void #t228 = self::IntClassExtension|set#property(#t226, #t227) in #t227);
-  self::expect(n0, let final self::IntClass* #t229 = v in let final core::int* #t230 = self::IntClassExtension|get#property(#t229).{core::num::-}(n1){(core::num*) →* core::int*} in let final void #t231 = self::IntClassExtension|set#property(#t229, #t230) in #t230);
-  self::expect(n1, let final self::IntClass* #t232 = v in let final core::int* #t233 = self::IntClassExtension|get#property(#t232).{core::num::+}(1){(core::num*) →* core::int*} in let final void #t234 = self::IntClassExtension|set#property(#t232, #t233) in #t233);
-  self::expect(n0, let final self::IntClass* #t235 = v in let final core::int* #t236 = self::IntClassExtension|get#property(#t235).{core::num::-}(1){(core::num*) →* core::int*} in let final void #t237 = self::IntClassExtension|set#property(#t235, #t236) in #t236);
-  self::expect(n0, let final self::IntClass* #t238 = v in let final core::int* #t239 = self::IntClassExtension|get#property(#t238) in let final core::int* #t240 = let final core::int* #t241 = #t239.{core::num::+}(1){(core::num*) →* core::int*} in let final void #t242 = self::IntClassExtension|set#property(#t238, #t241) in #t241 in #t239);
-  self::expect(n1, let final self::IntClass* #t243 = v in let final core::int* #t244 = self::IntClassExtension|get#property(#t243) in let final core::int* #t245 = let final core::int* #t246 = #t244.{core::num::-}(1){(core::num*) →* core::int*} in let final void #t247 = self::IntClassExtension|set#property(#t243, #t246) in #t246 in #t244);
+  self::expect(n1, let final self::IntClass #t217 = v in let final core::int #t218 = self::IntClassExtension|get#property(#t217).{core::num::+}(n1){(core::num) → core::int} in let final void #t219 = self::IntClassExtension|set#property(#t217, #t218) in #t218);
+  self::expect(n2, let final self::IntClass #t220 = v in let final core::int #t221 = self::IntClassExtension|get#property(#t220).{core::num::+}(n1){(core::num) → core::int} in let final void #t222 = self::IntClassExtension|set#property(#t220, #t221) in #t221);
+  self::expect(n0, let final self::IntClass #t223 = v in let final core::int #t224 = self::IntClassExtension|get#property(#t223).{core::num::-}(n2){(core::num) → core::int} in let final void #t225 = self::IntClassExtension|set#property(#t223, #t224) in #t224);
+  self::expect(n1, let final self::IntClass #t226 = v in let final core::int #t227 = self::IntClassExtension|get#property(#t226).{core::num::+}(n1){(core::num) → core::int} in let final void #t228 = self::IntClassExtension|set#property(#t226, #t227) in #t227);
+  self::expect(n0, let final self::IntClass #t229 = v in let final core::int #t230 = self::IntClassExtension|get#property(#t229).{core::num::-}(n1){(core::num) → core::int} in let final void #t231 = self::IntClassExtension|set#property(#t229, #t230) in #t230);
+  self::expect(n1, let final self::IntClass #t232 = v in let final core::int #t233 = self::IntClassExtension|get#property(#t232).{core::num::+}(1){(core::num) → core::int} in let final void #t234 = self::IntClassExtension|set#property(#t232, #t233) in #t233);
+  self::expect(n0, let final self::IntClass #t235 = v in let final core::int #t236 = self::IntClassExtension|get#property(#t235).{core::num::-}(1){(core::num) → core::int} in let final void #t237 = self::IntClassExtension|set#property(#t235, #t236) in #t236);
+  self::expect(n0, let final self::IntClass #t238 = v in let final core::int #t239 = self::IntClassExtension|get#property(#t238) in let final core::int #t240 = let final core::int #t241 = #t239.{core::num::+}(1){(core::num) → core::int} in let final void #t242 = self::IntClassExtension|set#property(#t238, #t241) in #t241 in #t239);
+  self::expect(n1, let final self::IntClass #t243 = v in let final core::int #t244 = self::IntClassExtension|get#property(#t243) in let final core::int #t245 = let final core::int #t246 = #t244.{core::num::-}(1){(core::num) → core::int} in let final void #t247 = self::IntClassExtension|set#property(#t243, #t246) in #t246 in #t244);
   self::expect(n0, self::IntClassExtension|get#property(v));
   self::expect(n0, self::IntClassExtension|get#property(v));
-  let final self::IntClass* #t248 = v in self::IntClassExtension|set#property(#t248, self::IntClassExtension|get#property(#t248).{core::num::+}(n1){(core::num*) →* core::int*});
+  let final self::IntClass #t248 = v in self::IntClassExtension|set#property(#t248, self::IntClassExtension|get#property(#t248).{core::num::+}(n1){(core::num) → core::int});
   self::expect(n1, self::IntClassExtension|get#property(v));
-  let final self::IntClass* #t249 = v in self::IntClassExtension|set#property(#t249, self::IntClassExtension|get#property(#t249).{core::num::+}(n1){(core::num*) →* core::int*});
+  let final self::IntClass #t249 = v in self::IntClassExtension|set#property(#t249, self::IntClassExtension|get#property(#t249).{core::num::+}(n1){(core::num) → core::int});
   self::expect(n2, self::IntClassExtension|get#property(v));
-  let final self::IntClass* #t250 = v in self::IntClassExtension|set#property(#t250, self::IntClassExtension|get#property(#t250).{core::num::-}(n2){(core::num*) →* core::int*});
+  let final self::IntClass #t250 = v in self::IntClassExtension|set#property(#t250, self::IntClassExtension|get#property(#t250).{core::num::-}(n2){(core::num) → core::int});
   self::expect(n0, self::IntClassExtension|get#property(v));
-  let final self::IntClass* #t251 = v in self::IntClassExtension|set#property(#t251, self::IntClassExtension|get#property(#t251).{core::num::+}(n1){(core::num*) →* core::int*});
+  let final self::IntClass #t251 = v in self::IntClassExtension|set#property(#t251, self::IntClassExtension|get#property(#t251).{core::num::+}(n1){(core::num) → core::int});
   self::expect(n1, self::IntClassExtension|get#property(v));
-  let final self::IntClass* #t252 = v in self::IntClassExtension|set#property(#t252, self::IntClassExtension|get#property(#t252).{core::num::-}(n1){(core::num*) →* core::int*});
+  let final self::IntClass #t252 = v in self::IntClassExtension|set#property(#t252, self::IntClassExtension|get#property(#t252).{core::num::-}(n1){(core::num) → core::int});
   self::expect(n0, self::IntClassExtension|get#property(v));
-  let final self::IntClass* #t253 = v in let final core::int* #t254 = self::IntClassExtension|get#property(#t253).{core::num::+}(1){(core::num*) →* core::int*} in let final void #t255 = self::IntClassExtension|set#property(#t253, #t254) in #t254;
+  let final self::IntClass #t253 = v in let final core::int #t254 = self::IntClassExtension|get#property(#t253).{core::num::+}(1){(core::num) → core::int} in let final void #t255 = self::IntClassExtension|set#property(#t253, #t254) in #t254;
   self::expect(n1, self::IntClassExtension|get#property(v));
-  let final self::IntClass* #t256 = v in let final core::int* #t257 = self::IntClassExtension|get#property(#t256).{core::num::-}(1){(core::num*) →* core::int*} in let final void #t258 = self::IntClassExtension|set#property(#t256, #t257) in #t257;
+  let final self::IntClass #t256 = v in let final core::int #t257 = self::IntClassExtension|get#property(#t256).{core::num::-}(1){(core::num) → core::int} in let final void #t258 = self::IntClassExtension|set#property(#t256, #t257) in #t257;
   self::expect(n0, self::IntClassExtension|get#property(v));
-  let final self::IntClass* #t259 = v in self::IntClassExtension|set#property(#t259, self::IntClassExtension|get#property(#t259).{core::num::+}(1){(core::num*) →* core::int*});
+  let final self::IntClass #t259 = v in self::IntClassExtension|set#property(#t259, self::IntClassExtension|get#property(#t259).{core::num::+}(1){(core::num) → core::int});
   self::expect(n1, self::IntClassExtension|get#property(v));
-  let final self::IntClass* #t260 = v in self::IntClassExtension|set#property(#t260, self::IntClassExtension|get#property(#t260).{core::num::-}(1){(core::num*) →* core::int*});
+  let final self::IntClass #t260 = v in self::IntClassExtension|set#property(#t260, self::IntClassExtension|get#property(#t260).{core::num::-}(1){(core::num) → core::int});
   self::expect(n0, self::IntClassExtension|get#property(v));
 }
-static method testExplicitNullAwareProperties(self::Class* v) → dynamic {
-  self::Number* n0 = new self::Number::•(0);
-  self::Number* n1 = new self::Number::•(1);
-  self::Number* n2 = new self::Number::•(2);
-  self::expect(n0, let final self::Class* #t261 = v in #t261 == null ?{self::Number*} null : self::ClassExtension|get#property(#t261), v == null);
-  self::expect(n1, let final self::Class* #t262 = v in #t262 == null ?{self::Number*} null : let final self::Number* #t263 = self::NumberExtension|+(self::ClassExtension|get#property(#t262), n1) in let final void #t264 = self::ClassExtension|set#property(#t262, #t263) in #t263, v == null);
-  self::expect(n2, let final self::Class* #t265 = v in #t265 == null ?{self::Number*} null : let final self::Number* #t266 = self::NumberExtension|+(self::ClassExtension|get#property(#t265), n1) in let final void #t267 = self::ClassExtension|set#property(#t265, #t266) in #t266, v == null);
-  self::expect(n0, let final self::Class* #t268 = v in #t268 == null ?{self::Number*} null : let final self::Number* #t269 = self::NumberExtension|-(self::ClassExtension|get#property(#t268), n2) in let final void #t270 = self::ClassExtension|set#property(#t268, #t269) in #t269, v == null);
-  self::expect(n1, let final self::Class* #t271 = v in #t271 == null ?{self::Number*} null : let final self::Number* #t272 = self::NumberExtension|+(self::ClassExtension|get#property(#t271), n1) in let final void #t273 = self::ClassExtension|set#property(#t271, #t272) in #t272, v == null);
-  self::expect(n0, let final self::Class* #t274 = v in #t274 == null ?{self::Number*} null : let final self::Number* #t275 = self::NumberExtension|-(self::ClassExtension|get#property(#t274), n1) in let final void #t276 = self::ClassExtension|set#property(#t274, #t275) in #t275, v == null);
-  self::expect(n1, let final self::Class* #t277 = v in #t277 == null ?{self::Number*} null : let final self::Number* #t278 = self::NumberExtension|+(self::ClassExtension|get#property(#t277), 1) in let final void #t279 = self::ClassExtension|set#property(#t277, #t278) in #t278, v == null);
-  self::expect(n0, let final self::Class* #t280 = v in #t280 == null ?{self::Number*} null : let final self::Number* #t281 = self::NumberExtension|-(self::ClassExtension|get#property(#t280), 1) in let final void #t282 = self::ClassExtension|set#property(#t280, #t281) in #t281, v == null);
-  self::expect(n0, let final self::Class* #t283 = v in #t283 == null ?{self::Number*} null : let final self::Number* #t284 = self::ClassExtension|get#property(#t283) in let final self::Number* #t285 = let final self::Number* #t286 = self::NumberExtension|+(#t284, 1) in let final void #t287 = self::ClassExtension|set#property(#t283, #t286) in #t286 in #t284, v == null);
-  self::expect(n1, let final self::Class* #t288 = v in #t288 == null ?{self::Number*} null : let final self::Number* #t289 = self::ClassExtension|get#property(#t288) in let final self::Number* #t290 = let final self::Number* #t291 = self::NumberExtension|-(#t289, 1) in let final void #t292 = self::ClassExtension|set#property(#t288, #t291) in #t291 in #t289, v == null);
-  self::expect(n0, let final self::Class* #t293 = v in #t293 == null ?{self::Number*} null : self::ClassExtension|get#property(#t293), v == null);
-  self::expect(n0, let final self::Class* #t294 = v in #t294 == null ?{self::Number*} null : self::ClassExtension|get#property(#t294), v == null);
-  let final self::Class* #t295 = v in #t295 == null ?{self::Number*} null : self::ClassExtension|set#property(#t295, self::NumberExtension|+(self::ClassExtension|get#property(#t295), n1));
-  self::expect(n1, let final self::Class* #t296 = v in #t296 == null ?{self::Number*} null : self::ClassExtension|get#property(#t296), v == null);
-  let final self::Class* #t297 = v in #t297 == null ?{self::Number*} null : self::ClassExtension|set#property(#t297, self::NumberExtension|+(self::ClassExtension|get#property(#t297), n1));
-  self::expect(n2, let final self::Class* #t298 = v in #t298 == null ?{self::Number*} null : self::ClassExtension|get#property(#t298), v == null);
-  let final self::Class* #t299 = v in #t299 == null ?{self::Number*} null : self::ClassExtension|set#property(#t299, self::NumberExtension|-(self::ClassExtension|get#property(#t299), n2));
-  self::expect(n0, let final self::Class* #t300 = v in #t300 == null ?{self::Number*} null : self::ClassExtension|get#property(#t300), v == null);
-  let final self::Class* #t301 = v in #t301 == null ?{self::Number*} null : self::ClassExtension|set#property(#t301, self::NumberExtension|+(self::ClassExtension|get#property(#t301), n1));
-  self::expect(n1, let final self::Class* #t302 = v in #t302 == null ?{self::Number*} null : self::ClassExtension|get#property(#t302), v == null);
-  let final self::Class* #t303 = v in #t303 == null ?{self::Number*} null : self::ClassExtension|set#property(#t303, self::NumberExtension|-(self::ClassExtension|get#property(#t303), n1));
-  self::expect(n0, let final self::Class* #t304 = v in #t304 == null ?{self::Number*} null : self::ClassExtension|get#property(#t304), v == null);
-  let final self::Class* #t305 = v in #t305 == null ?{self::Number*} null : let final self::Number* #t306 = self::NumberExtension|+(self::ClassExtension|get#property(#t305), 1) in let final void #t307 = self::ClassExtension|set#property(#t305, #t306) in #t306;
-  self::expect(n1, let final self::Class* #t308 = v in #t308 == null ?{self::Number*} null : self::ClassExtension|get#property(#t308), v == null);
-  let final self::Class* #t309 = v in #t309 == null ?{self::Number*} null : let final self::Number* #t310 = self::NumberExtension|-(self::ClassExtension|get#property(#t309), 1) in let final void #t311 = self::ClassExtension|set#property(#t309, #t310) in #t310;
-  self::expect(n0, let final self::Class* #t312 = v in #t312 == null ?{self::Number*} null : self::ClassExtension|get#property(#t312), v == null);
-  let final self::Class* #t313 = v in #t313 == null ?{self::Number*} null : self::ClassExtension|set#property(#t313, self::NumberExtension|+(self::ClassExtension|get#property(#t313), 1));
-  self::expect(n1, let final self::Class* #t314 = v in #t314 == null ?{self::Number*} null : self::ClassExtension|get#property(#t314), v == null);
-  let final self::Class* #t315 = v in #t315 == null ?{self::Number*} null : self::ClassExtension|set#property(#t315, self::NumberExtension|-(self::ClassExtension|get#property(#t315), 1));
-  self::expect(n0, let final self::Class* #t316 = v in #t316 == null ?{self::Number*} null : self::ClassExtension|get#property(#t316), v == null);
+static method testExplicitNullAwareProperties(self::Class? v) → dynamic {
+  self::Number n0 = new self::Number::•(0);
+  self::Number n1 = new self::Number::•(1);
+  self::Number n2 = new self::Number::•(2);
+  self::expect(n0, let final self::Class? #t261 = v in #t261 == null ?{self::Number?} null : self::ClassExtension|get#property(#t261{self::Class}), v == null);
+  self::expect(n1, let final self::Class? #t262 = v in #t262 == null ?{self::Number?} null : let final self::Number #t263 = self::NumberExtension|+(self::ClassExtension|get#property(#t262{self::Class}), n1) in let final void #t264 = self::ClassExtension|set#property(#t262{self::Class}, #t263) in #t263, v == null);
+  self::expect(n2, let final self::Class? #t265 = v in #t265 == null ?{self::Number?} null : let final self::Number #t266 = self::NumberExtension|+(self::ClassExtension|get#property(#t265{self::Class}), n1) in let final void #t267 = self::ClassExtension|set#property(#t265{self::Class}, #t266) in #t266, v == null);
+  self::expect(n0, let final self::Class? #t268 = v in #t268 == null ?{self::Number?} null : let final self::Number #t269 = self::NumberExtension|-(self::ClassExtension|get#property(#t268{self::Class}), n2) in let final void #t270 = self::ClassExtension|set#property(#t268{self::Class}, #t269) in #t269, v == null);
+  self::expect(n1, let final self::Class? #t271 = v in #t271 == null ?{self::Number?} null : let final self::Number #t272 = self::NumberExtension|+(self::ClassExtension|get#property(#t271{self::Class}), n1) in let final void #t273 = self::ClassExtension|set#property(#t271{self::Class}, #t272) in #t272, v == null);
+  self::expect(n0, let final self::Class? #t274 = v in #t274 == null ?{self::Number?} null : let final self::Number #t275 = self::NumberExtension|-(self::ClassExtension|get#property(#t274{self::Class}), n1) in let final void #t276 = self::ClassExtension|set#property(#t274{self::Class}, #t275) in #t275, v == null);
+  self::expect(n1, let final self::Class? #t277 = v in #t277 == null ?{self::Number?} null : let final self::Number #t278 = self::NumberExtension|+(self::ClassExtension|get#property(#t277{self::Class}), 1) in let final void #t279 = self::ClassExtension|set#property(#t277{self::Class}, #t278) in #t278, v == null);
+  self::expect(n0, let final self::Class? #t280 = v in #t280 == null ?{self::Number?} null : let final self::Number #t281 = self::NumberExtension|-(self::ClassExtension|get#property(#t280{self::Class}), 1) in let final void #t282 = self::ClassExtension|set#property(#t280{self::Class}, #t281) in #t281, v == null);
+  self::expect(n0, let final self::Class? #t283 = v in #t283 == null ?{self::Number?} null : let final self::Number #t284 = self::ClassExtension|get#property(#t283{self::Class}) in let final self::Number #t285 = let final self::Number #t286 = self::NumberExtension|+(#t284, 1) in let final void #t287 = self::ClassExtension|set#property(#t283{self::Class}, #t286) in #t286 in #t284, v == null);
+  self::expect(n1, let final self::Class? #t288 = v in #t288 == null ?{self::Number?} null : let final self::Number #t289 = self::ClassExtension|get#property(#t288{self::Class}) in let final self::Number #t290 = let final self::Number #t291 = self::NumberExtension|-(#t289, 1) in let final void #t292 = self::ClassExtension|set#property(#t288{self::Class}, #t291) in #t291 in #t289, v == null);
+  self::expect(n0, let final self::Class? #t293 = v in #t293 == null ?{self::Number?} null : self::ClassExtension|get#property(#t293{self::Class}), v == null);
+  self::expect(n0, let final self::Class? #t294 = v in #t294 == null ?{self::Number?} null : self::ClassExtension|get#property(#t294{self::Class}), v == null);
+  let final self::Class? #t295 = v in #t295 == null ?{self::Number?} null : self::ClassExtension|set#property(#t295{self::Class}, self::NumberExtension|+(self::ClassExtension|get#property(#t295{self::Class}), n1));
+  self::expect(n1, let final self::Class? #t296 = v in #t296 == null ?{self::Number?} null : self::ClassExtension|get#property(#t296{self::Class}), v == null);
+  let final self::Class? #t297 = v in #t297 == null ?{self::Number?} null : self::ClassExtension|set#property(#t297{self::Class}, self::NumberExtension|+(self::ClassExtension|get#property(#t297{self::Class}), n1));
+  self::expect(n2, let final self::Class? #t298 = v in #t298 == null ?{self::Number?} null : self::ClassExtension|get#property(#t298{self::Class}), v == null);
+  let final self::Class? #t299 = v in #t299 == null ?{self::Number?} null : self::ClassExtension|set#property(#t299{self::Class}, self::NumberExtension|-(self::ClassExtension|get#property(#t299{self::Class}), n2));
+  self::expect(n0, let final self::Class? #t300 = v in #t300 == null ?{self::Number?} null : self::ClassExtension|get#property(#t300{self::Class}), v == null);
+  let final self::Class? #t301 = v in #t301 == null ?{self::Number?} null : self::ClassExtension|set#property(#t301{self::Class}, self::NumberExtension|+(self::ClassExtension|get#property(#t301{self::Class}), n1));
+  self::expect(n1, let final self::Class? #t302 = v in #t302 == null ?{self::Number?} null : self::ClassExtension|get#property(#t302{self::Class}), v == null);
+  let final self::Class? #t303 = v in #t303 == null ?{self::Number?} null : self::ClassExtension|set#property(#t303{self::Class}, self::NumberExtension|-(self::ClassExtension|get#property(#t303{self::Class}), n1));
+  self::expect(n0, let final self::Class? #t304 = v in #t304 == null ?{self::Number?} null : self::ClassExtension|get#property(#t304{self::Class}), v == null);
+  let final self::Class? #t305 = v in #t305 == null ?{self::Number?} null : let final self::Number #t306 = self::NumberExtension|+(self::ClassExtension|get#property(#t305{self::Class}), 1) in let final void #t307 = self::ClassExtension|set#property(#t305{self::Class}, #t306) in #t306;
+  self::expect(n1, let final self::Class? #t308 = v in #t308 == null ?{self::Number?} null : self::ClassExtension|get#property(#t308{self::Class}), v == null);
+  let final self::Class? #t309 = v in #t309 == null ?{self::Number?} null : let final self::Number #t310 = self::NumberExtension|-(self::ClassExtension|get#property(#t309{self::Class}), 1) in let final void #t311 = self::ClassExtension|set#property(#t309{self::Class}, #t310) in #t310;
+  self::expect(n0, let final self::Class? #t312 = v in #t312 == null ?{self::Number?} null : self::ClassExtension|get#property(#t312{self::Class}), v == null);
+  let final self::Class? #t313 = v in #t313 == null ?{self::Number?} null : self::ClassExtension|set#property(#t313{self::Class}, self::NumberExtension|+(self::ClassExtension|get#property(#t313{self::Class}), 1));
+  self::expect(n1, let final self::Class? #t314 = v in #t314 == null ?{self::Number?} null : self::ClassExtension|get#property(#t314{self::Class}), v == null);
+  let final self::Class? #t315 = v in #t315 == null ?{self::Number?} null : self::ClassExtension|set#property(#t315{self::Class}, self::NumberExtension|-(self::ClassExtension|get#property(#t315{self::Class}), 1));
+  self::expect(n0, let final self::Class? #t316 = v in #t316 == null ?{self::Number?} null : self::ClassExtension|get#property(#t316{self::Class}), v == null);
 }
-static method testExplicitNullAwareIntProperties(self::IntClass* v) → dynamic {
-  core::int* n0 = 0;
-  core::int* n1 = 1;
-  core::int* n2 = 2;
-  self::expect(n0, let final self::IntClass* #t317 = v in #t317 == null ?{core::int*} null : self::IntClassExtension|get#property(#t317), v == null);
-  self::expect(n1, let final self::IntClass* #t318 = v in #t318 == null ?{core::int*} null : let final core::int* #t319 = self::IntClassExtension|get#property(#t318).{core::num::+}(n1){(core::num*) →* core::int*} in let final void #t320 = self::IntClassExtension|set#property(#t318, #t319) in #t319, v == null);
-  self::expect(n2, let final self::IntClass* #t321 = v in #t321 == null ?{core::int*} null : let final core::int* #t322 = self::IntClassExtension|get#property(#t321).{core::num::+}(n1){(core::num*) →* core::int*} in let final void #t323 = self::IntClassExtension|set#property(#t321, #t322) in #t322, v == null);
-  self::expect(n0, let final self::IntClass* #t324 = v in #t324 == null ?{core::int*} null : let final core::int* #t325 = self::IntClassExtension|get#property(#t324).{core::num::-}(n2){(core::num*) →* core::int*} in let final void #t326 = self::IntClassExtension|set#property(#t324, #t325) in #t325, v == null);
-  self::expect(n1, let final self::IntClass* #t327 = v in #t327 == null ?{core::int*} null : let final core::int* #t328 = self::IntClassExtension|get#property(#t327).{core::num::+}(n1){(core::num*) →* core::int*} in let final void #t329 = self::IntClassExtension|set#property(#t327, #t328) in #t328, v == null);
-  self::expect(n0, let final self::IntClass* #t330 = v in #t330 == null ?{core::int*} null : let final core::int* #t331 = self::IntClassExtension|get#property(#t330).{core::num::-}(n1){(core::num*) →* core::int*} in let final void #t332 = self::IntClassExtension|set#property(#t330, #t331) in #t331, v == null);
-  self::expect(n1, let final self::IntClass* #t333 = v in #t333 == null ?{core::int*} null : let final core::int* #t334 = self::IntClassExtension|get#property(#t333).{core::num::+}(1){(core::num*) →* core::int*} in let final void #t335 = self::IntClassExtension|set#property(#t333, #t334) in #t334, v == null);
-  self::expect(n0, let final self::IntClass* #t336 = v in #t336 == null ?{core::int*} null : let final core::int* #t337 = self::IntClassExtension|get#property(#t336).{core::num::-}(1){(core::num*) →* core::int*} in let final void #t338 = self::IntClassExtension|set#property(#t336, #t337) in #t337, v == null);
-  self::expect(n0, let final self::IntClass* #t339 = v in #t339 == null ?{core::int*} null : let final core::int* #t340 = self::IntClassExtension|get#property(#t339) in let final core::int* #t341 = let final core::int* #t342 = #t340.{core::num::+}(1){(core::num*) →* core::int*} in let final void #t343 = self::IntClassExtension|set#property(#t339, #t342) in #t342 in #t340, v == null);
-  self::expect(n1, let final self::IntClass* #t344 = v in #t344 == null ?{core::int*} null : let final core::int* #t345 = self::IntClassExtension|get#property(#t344) in let final core::int* #t346 = let final core::int* #t347 = #t345.{core::num::-}(1){(core::num*) →* core::int*} in let final void #t348 = self::IntClassExtension|set#property(#t344, #t347) in #t347 in #t345, v == null);
-  self::expect(n0, let final self::IntClass* #t349 = v in #t349 == null ?{core::int*} null : self::IntClassExtension|get#property(#t349), v == null);
-  self::expect(n0, let final self::IntClass* #t350 = v in #t350 == null ?{core::int*} null : self::IntClassExtension|get#property(#t350), v == null);
-  let final self::IntClass* #t351 = v in #t351 == null ?{core::int*} null : self::IntClassExtension|set#property(#t351, self::IntClassExtension|get#property(#t351).{core::num::+}(n1){(core::num*) →* core::int*});
-  self::expect(n1, let final self::IntClass* #t352 = v in #t352 == null ?{core::int*} null : self::IntClassExtension|get#property(#t352), v == null);
-  let final self::IntClass* #t353 = v in #t353 == null ?{core::int*} null : self::IntClassExtension|set#property(#t353, self::IntClassExtension|get#property(#t353).{core::num::+}(n1){(core::num*) →* core::int*});
-  self::expect(n2, let final self::IntClass* #t354 = v in #t354 == null ?{core::int*} null : self::IntClassExtension|get#property(#t354), v == null);
-  let final self::IntClass* #t355 = v in #t355 == null ?{core::int*} null : self::IntClassExtension|set#property(#t355, self::IntClassExtension|get#property(#t355).{core::num::-}(n2){(core::num*) →* core::int*});
-  self::expect(n0, let final self::IntClass* #t356 = v in #t356 == null ?{core::int*} null : self::IntClassExtension|get#property(#t356), v == null);
-  let final self::IntClass* #t357 = v in #t357 == null ?{core::int*} null : self::IntClassExtension|set#property(#t357, self::IntClassExtension|get#property(#t357).{core::num::+}(n1){(core::num*) →* core::int*});
-  self::expect(n1, let final self::IntClass* #t358 = v in #t358 == null ?{core::int*} null : self::IntClassExtension|get#property(#t358), v == null);
-  let final self::IntClass* #t359 = v in #t359 == null ?{core::int*} null : self::IntClassExtension|set#property(#t359, self::IntClassExtension|get#property(#t359).{core::num::-}(n1){(core::num*) →* core::int*});
-  self::expect(n0, let final self::IntClass* #t360 = v in #t360 == null ?{core::int*} null : self::IntClassExtension|get#property(#t360), v == null);
-  let final self::IntClass* #t361 = v in #t361 == null ?{core::int*} null : let final core::int* #t362 = self::IntClassExtension|get#property(#t361).{core::num::+}(1){(core::num*) →* core::int*} in let final void #t363 = self::IntClassExtension|set#property(#t361, #t362) in #t362;
-  self::expect(n1, let final self::IntClass* #t364 = v in #t364 == null ?{core::int*} null : self::IntClassExtension|get#property(#t364), v == null);
-  let final self::IntClass* #t365 = v in #t365 == null ?{core::int*} null : let final core::int* #t366 = self::IntClassExtension|get#property(#t365).{core::num::-}(1){(core::num*) →* core::int*} in let final void #t367 = self::IntClassExtension|set#property(#t365, #t366) in #t366;
-  self::expect(n0, let final self::IntClass* #t368 = v in #t368 == null ?{core::int*} null : self::IntClassExtension|get#property(#t368), v == null);
-  let final self::IntClass* #t369 = v in #t369 == null ?{core::int*} null : self::IntClassExtension|set#property(#t369, self::IntClassExtension|get#property(#t369).{core::num::+}(1){(core::num*) →* core::int*});
-  self::expect(n1, let final self::IntClass* #t370 = v in #t370 == null ?{core::int*} null : self::IntClassExtension|get#property(#t370), v == null);
-  let final self::IntClass* #t371 = v in #t371 == null ?{core::int*} null : self::IntClassExtension|set#property(#t371, self::IntClassExtension|get#property(#t371).{core::num::-}(1){(core::num*) →* core::int*});
-  self::expect(n0, let final self::IntClass* #t372 = v in #t372 == null ?{core::int*} null : self::IntClassExtension|get#property(#t372), v == null);
+static method testExplicitNullAwareIntProperties(self::IntClass? v) → dynamic {
+  core::int n0 = 0;
+  core::int n1 = 1;
+  core::int n2 = 2;
+  self::expect(n0, let final self::IntClass? #t317 = v in #t317 == null ?{core::int?} null : self::IntClassExtension|get#property(#t317{self::IntClass}), v == null);
+  self::expect(n1, let final self::IntClass? #t318 = v in #t318 == null ?{core::int?} null : let final core::int #t319 = self::IntClassExtension|get#property(#t318{self::IntClass}).{core::num::+}(n1){(core::num) → core::int} in let final void #t320 = self::IntClassExtension|set#property(#t318{self::IntClass}, #t319) in #t319, v == null);
+  self::expect(n2, let final self::IntClass? #t321 = v in #t321 == null ?{core::int?} null : let final core::int #t322 = self::IntClassExtension|get#property(#t321{self::IntClass}).{core::num::+}(n1){(core::num) → core::int} in let final void #t323 = self::IntClassExtension|set#property(#t321{self::IntClass}, #t322) in #t322, v == null);
+  self::expect(n0, let final self::IntClass? #t324 = v in #t324 == null ?{core::int?} null : let final core::int #t325 = self::IntClassExtension|get#property(#t324{self::IntClass}).{core::num::-}(n2){(core::num) → core::int} in let final void #t326 = self::IntClassExtension|set#property(#t324{self::IntClass}, #t325) in #t325, v == null);
+  self::expect(n1, let final self::IntClass? #t327 = v in #t327 == null ?{core::int?} null : let final core::int #t328 = self::IntClassExtension|get#property(#t327{self::IntClass}).{core::num::+}(n1){(core::num) → core::int} in let final void #t329 = self::IntClassExtension|set#property(#t327{self::IntClass}, #t328) in #t328, v == null);
+  self::expect(n0, let final self::IntClass? #t330 = v in #t330 == null ?{core::int?} null : let final core::int #t331 = self::IntClassExtension|get#property(#t330{self::IntClass}).{core::num::-}(n1){(core::num) → core::int} in let final void #t332 = self::IntClassExtension|set#property(#t330{self::IntClass}, #t331) in #t331, v == null);
+  self::expect(n1, let final self::IntClass? #t333 = v in #t333 == null ?{core::int?} null : let final core::int #t334 = self::IntClassExtension|get#property(#t333{self::IntClass}).{core::num::+}(1){(core::num) → core::int} in let final void #t335 = self::IntClassExtension|set#property(#t333{self::IntClass}, #t334) in #t334, v == null);
+  self::expect(n0, let final self::IntClass? #t336 = v in #t336 == null ?{core::int?} null : let final core::int #t337 = self::IntClassExtension|get#property(#t336{self::IntClass}).{core::num::-}(1){(core::num) → core::int} in let final void #t338 = self::IntClassExtension|set#property(#t336{self::IntClass}, #t337) in #t337, v == null);
+  self::expect(n0, let final self::IntClass? #t339 = v in #t339 == null ?{core::int?} null : let final core::int #t340 = self::IntClassExtension|get#property(#t339{self::IntClass}) in let final core::int #t341 = let final core::int #t342 = #t340.{core::num::+}(1){(core::num) → core::int} in let final void #t343 = self::IntClassExtension|set#property(#t339{self::IntClass}, #t342) in #t342 in #t340, v == null);
+  self::expect(n1, let final self::IntClass? #t344 = v in #t344 == null ?{core::int?} null : let final core::int #t345 = self::IntClassExtension|get#property(#t344{self::IntClass}) in let final core::int #t346 = let final core::int #t347 = #t345.{core::num::-}(1){(core::num) → core::int} in let final void #t348 = self::IntClassExtension|set#property(#t344{self::IntClass}, #t347) in #t347 in #t345, v == null);
+  self::expect(n0, let final self::IntClass? #t349 = v in #t349 == null ?{core::int?} null : self::IntClassExtension|get#property(#t349{self::IntClass}), v == null);
+  self::expect(n0, let final self::IntClass? #t350 = v in #t350 == null ?{core::int?} null : self::IntClassExtension|get#property(#t350{self::IntClass}), v == null);
+  let final self::IntClass? #t351 = v in #t351 == null ?{core::int?} null : self::IntClassExtension|set#property(#t351{self::IntClass}, self::IntClassExtension|get#property(#t351{self::IntClass}).{core::num::+}(n1){(core::num) → core::int});
+  self::expect(n1, let final self::IntClass? #t352 = v in #t352 == null ?{core::int?} null : self::IntClassExtension|get#property(#t352{self::IntClass}), v == null);
+  let final self::IntClass? #t353 = v in #t353 == null ?{core::int?} null : self::IntClassExtension|set#property(#t353{self::IntClass}, self::IntClassExtension|get#property(#t353{self::IntClass}).{core::num::+}(n1){(core::num) → core::int});
+  self::expect(n2, let final self::IntClass? #t354 = v in #t354 == null ?{core::int?} null : self::IntClassExtension|get#property(#t354{self::IntClass}), v == null);
+  let final self::IntClass? #t355 = v in #t355 == null ?{core::int?} null : self::IntClassExtension|set#property(#t355{self::IntClass}, self::IntClassExtension|get#property(#t355{self::IntClass}).{core::num::-}(n2){(core::num) → core::int});
+  self::expect(n0, let final self::IntClass? #t356 = v in #t356 == null ?{core::int?} null : self::IntClassExtension|get#property(#t356{self::IntClass}), v == null);
+  let final self::IntClass? #t357 = v in #t357 == null ?{core::int?} null : self::IntClassExtension|set#property(#t357{self::IntClass}, self::IntClassExtension|get#property(#t357{self::IntClass}).{core::num::+}(n1){(core::num) → core::int});
+  self::expect(n1, let final self::IntClass? #t358 = v in #t358 == null ?{core::int?} null : self::IntClassExtension|get#property(#t358{self::IntClass}), v == null);
+  let final self::IntClass? #t359 = v in #t359 == null ?{core::int?} null : self::IntClassExtension|set#property(#t359{self::IntClass}, self::IntClassExtension|get#property(#t359{self::IntClass}).{core::num::-}(n1){(core::num) → core::int});
+  self::expect(n0, let final self::IntClass? #t360 = v in #t360 == null ?{core::int?} null : self::IntClassExtension|get#property(#t360{self::IntClass}), v == null);
+  let final self::IntClass? #t361 = v in #t361 == null ?{core::int?} null : let final core::int #t362 = self::IntClassExtension|get#property(#t361{self::IntClass}).{core::num::+}(1){(core::num) → core::int} in let final void #t363 = self::IntClassExtension|set#property(#t361{self::IntClass}, #t362) in #t362;
+  self::expect(n1, let final self::IntClass? #t364 = v in #t364 == null ?{core::int?} null : self::IntClassExtension|get#property(#t364{self::IntClass}), v == null);
+  let final self::IntClass? #t365 = v in #t365 == null ?{core::int?} null : let final core::int #t366 = self::IntClassExtension|get#property(#t365{self::IntClass}).{core::num::-}(1){(core::num) → core::int} in let final void #t367 = self::IntClassExtension|set#property(#t365{self::IntClass}, #t366) in #t366;
+  self::expect(n0, let final self::IntClass? #t368 = v in #t368 == null ?{core::int?} null : self::IntClassExtension|get#property(#t368{self::IntClass}), v == null);
+  let final self::IntClass? #t369 = v in #t369 == null ?{core::int?} null : self::IntClassExtension|set#property(#t369{self::IntClass}, self::IntClassExtension|get#property(#t369{self::IntClass}).{core::num::+}(1){(core::num) → core::int});
+  self::expect(n1, let final self::IntClass? #t370 = v in #t370 == null ?{core::int?} null : self::IntClassExtension|get#property(#t370{self::IntClass}), v == null);
+  let final self::IntClass? #t371 = v in #t371 == null ?{core::int?} null : self::IntClassExtension|set#property(#t371{self::IntClass}, self::IntClassExtension|get#property(#t371{self::IntClass}).{core::num::-}(1){(core::num) → core::int});
+  self::expect(n0, let final self::IntClass? #t372 = v in #t372 == null ?{core::int?} null : self::IntClassExtension|get#property(#t372{self::IntClass}), v == null);
 }
 static method expect(dynamic expected, dynamic actual, [dynamic expectNull = #C1]) → dynamic {
-  if(expectNull as{TypeError,ForDynamic} core::bool*) {
+  if(expectNull as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool) {
     expected = null;
   }
-  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual)) {
     throw "Mismatch: expected=${expected}, actual=${actual}";
   }
 }
diff --git a/pkg/front_end/testcases/extensions/compounds.dart.weak.outline.expect b/pkg/front_end/testcases/extensions/compounds.dart.weak.outline.expect
index dfddc05..aafd3ce 100644
--- a/pkg/front_end/testcases/extensions/compounds.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extensions/compounds.dart.weak.outline.expect
@@ -1,90 +1,63 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Number extends core::Object {
-  final field core::int* value;
-  constructor •(core::int* value) → self::Number*
+  final field core::int value;
+  constructor •(core::int value) → self::Number
     ;
-  get hashCode() → core::int*
+  get hashCode() → core::int
     ;
-  operator ==(core::Object* other) → core::bool*
+  operator ==(core::Object other) → core::bool
     ;
-  method toString() → core::String*
+  method toString() → core::String
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Class extends core::Object {
-  field self::Number* field;
-  constructor •(self::Number* field) → self::Class*
+  field self::Number field;
+  constructor •(self::Number field) → self::Class
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class IntClass extends core::Object {
-  field core::int* field;
-  constructor •(core::int* field) → self::IntClass*
+  field core::int field;
+  constructor •(core::int field) → self::IntClass
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension NumberExtension on self::Number* {
+extension NumberExtension on self::Number {
   operator + = self::NumberExtension|+;
   operator - = self::NumberExtension|-;
 }
-extension ClassExtension on self::Class* {
+extension ClassExtension on self::Class {
   get property = self::ClassExtension|get#property;
   method testImplicitProperties = self::ClassExtension|testImplicitProperties;
   tearoff testImplicitProperties = self::ClassExtension|get#testImplicitProperties;
   set property = self::ClassExtension|set#property;
 }
-extension IntClassExtension on self::IntClass* {
+extension IntClassExtension on self::IntClass {
   get property = self::IntClassExtension|get#property;
   method testImplicitProperties = self::IntClassExtension|testImplicitProperties;
   tearoff testImplicitProperties = self::IntClassExtension|get#testImplicitProperties;
   set property = self::IntClassExtension|set#property;
 }
-static method NumberExtension|+(lowered 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|-(lowered 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(lowered final self::Class* #this) → self::Number*
+static method ClassExtension|get#property(lowered final self::Class #this) → self::Number
   ;
-static method ClassExtension|set#property(lowered 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(lowered final self::Class* #this) → dynamic
+static method ClassExtension|testImplicitProperties(lowered final self::Class #this) → dynamic
   ;
-static method ClassExtension|get#testImplicitProperties(lowered 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(lowered final self::IntClass* #this) → core::int*
+static method IntClassExtension|get#property(lowered final self::IntClass #this) → core::int
   ;
-static method IntClassExtension|set#property(lowered 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(lowered final self::IntClass* #this) → dynamic
+static method IntClassExtension|testImplicitProperties(lowered final self::IntClass #this) → dynamic
   ;
-static method IntClassExtension|get#testImplicitProperties(lowered 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
   ;
@@ -98,9 +71,9 @@
   ;
 static method testExplicitIntProperties() → dynamic
   ;
-static method testExplicitNullAwareProperties(self::Class* v) → dynamic
+static method testExplicitNullAwareProperties(self::Class? v) → dynamic
   ;
-static method testExplicitNullAwareIntProperties(self::IntClass* v) → dynamic
+static method testExplicitNullAwareIntProperties(self::IntClass? v) → dynamic
   ;
 static method expect(dynamic expected, dynamic actual, [has-declared-initializer dynamic expectNull]) → dynamic
   ;
diff --git a/pkg/front_end/testcases/extensions/compounds.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/compounds.dart.weak.transformed.expect
index ccd5bd4..d1424bc 100644
--- a/pkg/front_end/testcases/extensions/compounds.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/compounds.dart.weak.transformed.expect
@@ -1,117 +1,90 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Number extends core::Object {
-  final field core::int* value;
-  constructor •(core::int* value) → self::Number*
+  final field core::int value;
+  constructor •(core::int value) → self::Number
     : self::Number::value = value, super core::Object::•()
     ;
-  get hashCode() → core::int*
-    return this.{self::Number::value}{core::int*}.{core::num::hashCode}{core::int*};
-  operator ==(core::Object* other) → core::bool*
-    return other is self::Number* && this.{self::Number::value}{core::int*} =={core::num::==}{(core::Object*) →* core::bool*} other{self::Number*}.{self::Number::value}{core::int*};
-  method toString() → core::String*
-    return "Number(${this.{self::Number::value}{core::int*}})";
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  get hashCode() → core::int
+    return this.{self::Number::value}{core::int}.{core::num::hashCode}{core::int};
+  operator ==(core::Object other) → core::bool
+    return other is{ForNonNullableByDefault} self::Number && this.{self::Number::value}{core::int} =={core::num::==}{(core::Object) → core::bool} other{self::Number}.{self::Number::value}{core::int};
+  method toString() → core::String
+    return "Number(${this.{self::Number::value}{core::int}})";
 }
 class Class extends core::Object {
-  field self::Number* field;
-  constructor •(self::Number* field) → self::Class*
+  field self::Number field;
+  constructor •(self::Number field) → self::Class
     : self::Class::field = field, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class IntClass extends core::Object {
-  field core::int* field;
-  constructor •(core::int* field) → self::IntClass*
+  field core::int field;
+  constructor •(core::int field) → self::IntClass
     : self::IntClass::field = field, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension NumberExtension on self::Number* {
+extension NumberExtension on self::Number {
   operator + = self::NumberExtension|+;
   operator - = self::NumberExtension|-;
 }
-extension ClassExtension on self::Class* {
+extension ClassExtension on self::Class {
   get property = self::ClassExtension|get#property;
   method testImplicitProperties = self::ClassExtension|testImplicitProperties;
   tearoff testImplicitProperties = self::ClassExtension|get#testImplicitProperties;
   set property = self::ClassExtension|set#property;
 }
-extension IntClassExtension on self::IntClass* {
+extension IntClassExtension on self::IntClass {
   get property = self::IntClassExtension|get#property;
   method testImplicitProperties = self::IntClassExtension|testImplicitProperties;
   tearoff testImplicitProperties = self::IntClassExtension|get#testImplicitProperties;
   set property = self::IntClassExtension|set#property;
 }
-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::int*}.{core::num::+}(other{core::int*}){(core::num*) →* core::int*});
+static method NumberExtension|+(lowered final self::Number #this, core::Object other) → self::Number {
+  if(other is{ForNonNullableByDefault} core::int) {
+    return new self::Number::•(#this.{self::Number::value}{core::int}.{core::num::+}(other{core::int}){(core::num) → core::int});
   }
   else
-    if(other is self::Number*) {
-      return new self::Number::•(#this.{self::Number::value}{core::int*}.{core::num::+}(other{self::Number*}.{self::Number::value}{core::int*}){(core::num*) →* core::int*});
+    if(other is{ForNonNullableByDefault} self::Number) {
+      return new self::Number::•(#this.{self::Number::value}{core::int}.{core::num::+}(other{self::Number}.{self::Number::value}{core::int}){(core::num) → core::int});
     }
     else {
       throw new core::ArgumentError::•("${other}");
     }
 }
-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::int*}.{core::num::-}(other{core::int*}){(core::num*) →* core::int*});
+static method NumberExtension|-(lowered final self::Number #this, core::Object other) → self::Number {
+  if(other is{ForNonNullableByDefault} core::int) {
+    return new self::Number::•(#this.{self::Number::value}{core::int}.{core::num::-}(other{core::int}){(core::num) → core::int});
   }
   else
-    if(other is self::Number*) {
-      return new self::Number::•(#this.{self::Number::value}{core::int*}.{core::num::-}(other{self::Number*}.{self::Number::value}{core::int*}){(core::num*) →* core::int*});
+    if(other is{ForNonNullableByDefault} self::Number) {
+      return new self::Number::•(#this.{self::Number::value}{core::int}.{core::num::-}(other{self::Number}.{self::Number::value}{core::int}){(core::num) → core::int});
     }
     else {
       throw new core::ArgumentError::•("${other}");
     }
 }
-static method ClassExtension|get#property(lowered final self::Class* #this) → self::Number*
-  return #this.{self::Class::field}{self::Number*};
-static method ClassExtension|set#property(lowered final self::Class* #this, self::Number* value) → void {
+static method ClassExtension|get#property(lowered final self::Class #this) → self::Number
+  return #this.{self::Class::field}{self::Number};
+static method ClassExtension|set#property(lowered final self::Class #this, self::Number value) → void {
   #this.{self::Class::field} = value;
 }
-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);
+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);
   self::expect(n0, self::ClassExtension|get#property(#this));
-  self::expect(n1, let final self::Number* #t1 = self::NumberExtension|+(self::ClassExtension|get#property(#this), n1) in let final void #t2 = self::ClassExtension|set#property(#this, #t1) in #t1);
-  self::expect(n2, let final self::Number* #t3 = self::NumberExtension|+(self::ClassExtension|get#property(#this), n1) in let final void #t4 = self::ClassExtension|set#property(#this, #t3) in #t3);
-  self::expect(n0, let final self::Number* #t5 = self::NumberExtension|-(self::ClassExtension|get#property(#this), n2) in let final void #t6 = self::ClassExtension|set#property(#this, #t5) in #t5);
-  self::expect(n1, let final self::Number* #t7 = self::NumberExtension|+(self::ClassExtension|get#property(#this), n1) in let final void #t8 = self::ClassExtension|set#property(#this, #t7) in #t7);
-  self::expect(n0, let final self::Number* #t9 = self::NumberExtension|-(self::ClassExtension|get#property(#this), n1) in let final void #t10 = self::ClassExtension|set#property(#this, #t9) in #t9);
-  self::expect(n1, let final self::Number* #t11 = self::NumberExtension|+(self::ClassExtension|get#property(#this), 1) in let final void #t12 = self::ClassExtension|set#property(#this, #t11) in #t11);
-  self::expect(n0, let final self::Number* #t13 = self::NumberExtension|-(self::ClassExtension|get#property(#this), 1) in let final void #t14 = self::ClassExtension|set#property(#this, #t13) in #t13);
-  self::expect(n0, let final self::Number* #t15 = self::ClassExtension|get#property(#this) in let final self::Number* #t16 = self::ClassExtension|set#property(#this, self::NumberExtension|+(#t15, 1)) in #t15);
-  self::expect(n1, let final self::Number* #t17 = self::ClassExtension|get#property(#this) in let final self::Number* #t18 = self::ClassExtension|set#property(#this, self::NumberExtension|-(#t17, 1)) in #t17);
+  self::expect(n1, let final self::Number #t1 = self::NumberExtension|+(self::ClassExtension|get#property(#this), n1) in let final void #t2 = self::ClassExtension|set#property(#this, #t1) in #t1);
+  self::expect(n2, let final self::Number #t3 = self::NumberExtension|+(self::ClassExtension|get#property(#this), n1) in let final void #t4 = self::ClassExtension|set#property(#this, #t3) in #t3);
+  self::expect(n0, let final self::Number #t5 = self::NumberExtension|-(self::ClassExtension|get#property(#this), n2) in let final void #t6 = self::ClassExtension|set#property(#this, #t5) in #t5);
+  self::expect(n1, let final self::Number #t7 = self::NumberExtension|+(self::ClassExtension|get#property(#this), n1) in let final void #t8 = self::ClassExtension|set#property(#this, #t7) in #t7);
+  self::expect(n0, let final self::Number #t9 = self::NumberExtension|-(self::ClassExtension|get#property(#this), n1) in let final void #t10 = self::ClassExtension|set#property(#this, #t9) in #t9);
+  self::expect(n1, let final self::Number #t11 = self::NumberExtension|+(self::ClassExtension|get#property(#this), 1) in let final void #t12 = self::ClassExtension|set#property(#this, #t11) in #t11);
+  self::expect(n0, let final self::Number #t13 = self::NumberExtension|-(self::ClassExtension|get#property(#this), 1) in let final void #t14 = self::ClassExtension|set#property(#this, #t13) in #t13);
+  self::expect(n0, let final self::Number #t15 = self::ClassExtension|get#property(#this) in let final self::Number #t16 = self::ClassExtension|set#property(#this, self::NumberExtension|+(#t15, 1)) in #t15);
+  self::expect(n1, let final self::Number #t17 = self::ClassExtension|get#property(#this) in let final self::Number #t18 = self::ClassExtension|set#property(#this, self::NumberExtension|-(#t17, 1)) in #t17);
   self::expect(n0, self::ClassExtension|get#property(#this));
   self::expect(n0, self::ClassExtension|get#property(#this));
   self::ClassExtension|set#property(#this, self::NumberExtension|+(self::ClassExtension|get#property(#this), n1));
@@ -124,58 +97,58 @@
   self::expect(n1, self::ClassExtension|get#property(#this));
   self::ClassExtension|set#property(#this, self::NumberExtension|-(self::ClassExtension|get#property(#this), n1));
   self::expect(n0, self::ClassExtension|get#property(#this));
-  let final self::Number* #t19 = self::NumberExtension|+(self::ClassExtension|get#property(#this), 1) in let final void #t20 = self::ClassExtension|set#property(#this, #t19) in #t19;
+  let final self::Number #t19 = self::NumberExtension|+(self::ClassExtension|get#property(#this), 1) in let final void #t20 = self::ClassExtension|set#property(#this, #t19) in #t19;
   self::expect(n1, self::ClassExtension|get#property(#this));
-  let final self::Number* #t21 = self::NumberExtension|-(self::ClassExtension|get#property(#this), 1) in let final void #t22 = self::ClassExtension|set#property(#this, #t21) in #t21;
+  let final self::Number #t21 = self::NumberExtension|-(self::ClassExtension|get#property(#this), 1) in let final void #t22 = self::ClassExtension|set#property(#this, #t21) in #t21;
   self::expect(n0, self::ClassExtension|get#property(#this));
   self::ClassExtension|set#property(#this, self::NumberExtension|+(self::ClassExtension|get#property(#this), 1));
   self::expect(n1, self::ClassExtension|get#property(#this));
   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(lowered 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(lowered final self::IntClass* #this) → core::int*
-  return #this.{self::IntClass::field}{core::int*};
-static method IntClassExtension|set#property(lowered final self::IntClass* #this, core::int* value) → void {
+static method IntClassExtension|get#property(lowered final self::IntClass #this) → core::int
+  return #this.{self::IntClass::field}{core::int};
+static method IntClassExtension|set#property(lowered final self::IntClass #this, core::int value) → void {
   #this.{self::IntClass::field} = value;
 }
-static method IntClassExtension|testImplicitProperties(lowered final self::IntClass* #this) → dynamic {
-  core::int* n0 = 0;
-  core::int* n1 = 1;
-  core::int* n2 = 2;
+static method IntClassExtension|testImplicitProperties(lowered final self::IntClass #this) → dynamic {
+  core::int n0 = 0;
+  core::int n1 = 1;
+  core::int n2 = 2;
   self::expect(n0, self::IntClassExtension|get#property(#this));
-  self::expect(n1, let final core::int* #t23 = self::IntClassExtension|get#property(#this).{core::num::+}(n1){(core::num*) →* core::int*} in let final void #t24 = self::IntClassExtension|set#property(#this, #t23) in #t23);
-  self::expect(n2, let final core::int* #t25 = self::IntClassExtension|get#property(#this).{core::num::+}(n1){(core::num*) →* core::int*} in let final void #t26 = self::IntClassExtension|set#property(#this, #t25) in #t25);
-  self::expect(n0, let final core::int* #t27 = self::IntClassExtension|get#property(#this).{core::num::-}(n2){(core::num*) →* core::int*} in let final void #t28 = self::IntClassExtension|set#property(#this, #t27) in #t27);
-  self::expect(n1, let final core::int* #t29 = self::IntClassExtension|get#property(#this).{core::num::+}(n1){(core::num*) →* core::int*} in let final void #t30 = self::IntClassExtension|set#property(#this, #t29) in #t29);
-  self::expect(n0, let final core::int* #t31 = self::IntClassExtension|get#property(#this).{core::num::-}(n1){(core::num*) →* core::int*} in let final void #t32 = self::IntClassExtension|set#property(#this, #t31) in #t31);
-  self::expect(n1, let final core::int* #t33 = self::IntClassExtension|get#property(#this).{core::num::+}(1){(core::num*) →* core::int*} in let final void #t34 = self::IntClassExtension|set#property(#this, #t33) in #t33);
-  self::expect(n0, let final core::int* #t35 = self::IntClassExtension|get#property(#this).{core::num::-}(1){(core::num*) →* core::int*} in let final void #t36 = self::IntClassExtension|set#property(#this, #t35) in #t35);
-  self::expect(n0, let final core::int* #t37 = self::IntClassExtension|get#property(#this) in let final core::int* #t38 = self::IntClassExtension|set#property(#this, #t37.{core::num::+}(1){(core::num*) →* core::int*}) in #t37);
-  self::expect(n1, let final core::int* #t39 = self::IntClassExtension|get#property(#this) in let final core::int* #t40 = self::IntClassExtension|set#property(#this, #t39.{core::num::-}(1){(core::num*) →* core::int*}) in #t39);
+  self::expect(n1, let final core::int #t23 = self::IntClassExtension|get#property(#this).{core::num::+}(n1){(core::num) → core::int} in let final void #t24 = self::IntClassExtension|set#property(#this, #t23) in #t23);
+  self::expect(n2, let final core::int #t25 = self::IntClassExtension|get#property(#this).{core::num::+}(n1){(core::num) → core::int} in let final void #t26 = self::IntClassExtension|set#property(#this, #t25) in #t25);
+  self::expect(n0, let final core::int #t27 = self::IntClassExtension|get#property(#this).{core::num::-}(n2){(core::num) → core::int} in let final void #t28 = self::IntClassExtension|set#property(#this, #t27) in #t27);
+  self::expect(n1, let final core::int #t29 = self::IntClassExtension|get#property(#this).{core::num::+}(n1){(core::num) → core::int} in let final void #t30 = self::IntClassExtension|set#property(#this, #t29) in #t29);
+  self::expect(n0, let final core::int #t31 = self::IntClassExtension|get#property(#this).{core::num::-}(n1){(core::num) → core::int} in let final void #t32 = self::IntClassExtension|set#property(#this, #t31) in #t31);
+  self::expect(n1, let final core::int #t33 = self::IntClassExtension|get#property(#this).{core::num::+}(1){(core::num) → core::int} in let final void #t34 = self::IntClassExtension|set#property(#this, #t33) in #t33);
+  self::expect(n0, let final core::int #t35 = self::IntClassExtension|get#property(#this).{core::num::-}(1){(core::num) → core::int} in let final void #t36 = self::IntClassExtension|set#property(#this, #t35) in #t35);
+  self::expect(n0, let final core::int #t37 = self::IntClassExtension|get#property(#this) in let final core::int #t38 = self::IntClassExtension|set#property(#this, #t37.{core::num::+}(1){(core::num) → core::int}) in #t37);
+  self::expect(n1, let final core::int #t39 = self::IntClassExtension|get#property(#this) in let final core::int #t40 = self::IntClassExtension|set#property(#this, #t39.{core::num::-}(1){(core::num) → core::int}) in #t39);
   self::expect(n0, self::IntClassExtension|get#property(#this));
   self::expect(n0, self::IntClassExtension|get#property(#this));
-  self::IntClassExtension|set#property(#this, self::IntClassExtension|get#property(#this).{core::num::+}(n1){(core::num*) →* core::int*});
+  self::IntClassExtension|set#property(#this, self::IntClassExtension|get#property(#this).{core::num::+}(n1){(core::num) → core::int});
   self::expect(n1, self::IntClassExtension|get#property(#this));
-  self::IntClassExtension|set#property(#this, self::IntClassExtension|get#property(#this).{core::num::+}(n1){(core::num*) →* core::int*});
+  self::IntClassExtension|set#property(#this, self::IntClassExtension|get#property(#this).{core::num::+}(n1){(core::num) → core::int});
   self::expect(n2, self::IntClassExtension|get#property(#this));
-  self::IntClassExtension|set#property(#this, self::IntClassExtension|get#property(#this).{core::num::-}(n2){(core::num*) →* core::int*});
+  self::IntClassExtension|set#property(#this, self::IntClassExtension|get#property(#this).{core::num::-}(n2){(core::num) → core::int});
   self::expect(n0, self::IntClassExtension|get#property(#this));
-  self::IntClassExtension|set#property(#this, self::IntClassExtension|get#property(#this).{core::num::+}(n1){(core::num*) →* core::int*});
+  self::IntClassExtension|set#property(#this, self::IntClassExtension|get#property(#this).{core::num::+}(n1){(core::num) → core::int});
   self::expect(n1, self::IntClassExtension|get#property(#this));
-  self::IntClassExtension|set#property(#this, self::IntClassExtension|get#property(#this).{core::num::-}(n1){(core::num*) →* core::int*});
+  self::IntClassExtension|set#property(#this, self::IntClassExtension|get#property(#this).{core::num::-}(n1){(core::num) → core::int});
   self::expect(n0, self::IntClassExtension|get#property(#this));
-  let final core::int* #t41 = self::IntClassExtension|get#property(#this).{core::num::+}(1){(core::num*) →* core::int*} in let final void #t42 = self::IntClassExtension|set#property(#this, #t41) in #t41;
+  let final core::int #t41 = self::IntClassExtension|get#property(#this).{core::num::+}(1){(core::num) → core::int} in let final void #t42 = self::IntClassExtension|set#property(#this, #t41) in #t41;
   self::expect(n1, self::IntClassExtension|get#property(#this));
-  let final core::int* #t43 = self::IntClassExtension|get#property(#this).{core::num::-}(1){(core::num*) →* core::int*} in let final void #t44 = self::IntClassExtension|set#property(#this, #t43) in #t43;
+  let final core::int #t43 = self::IntClassExtension|get#property(#this).{core::num::-}(1){(core::num) → core::int} in let final void #t44 = self::IntClassExtension|set#property(#this, #t43) in #t43;
   self::expect(n0, self::IntClassExtension|get#property(#this));
-  self::IntClassExtension|set#property(#this, self::IntClassExtension|get#property(#this).{core::num::+}(1){(core::num*) →* core::int*});
+  self::IntClassExtension|set#property(#this, self::IntClassExtension|get#property(#this).{core::num::+}(1){(core::num) → core::int});
   self::expect(n1, self::IntClassExtension|get#property(#this));
-  self::IntClassExtension|set#property(#this, self::IntClassExtension|get#property(#this).{core::num::-}(1){(core::num*) →* core::int*});
+  self::IntClassExtension|set#property(#this, self::IntClassExtension|get#property(#this).{core::num::-}(1){(core::num) → core::int});
   self::expect(n0, self::IntClassExtension|get#property(#this));
 }
-static method IntClassExtension|get#testImplicitProperties(lowered 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();
@@ -191,10 +164,10 @@
   self::IntClassExtension|testImplicitProperties(new self::IntClass::•(0));
 }
 static method testLocals() → dynamic {
-  self::Number* n0 = new self::Number::•(0);
-  self::Number* n1 = new self::Number::•(1);
-  self::Number* n2 = new self::Number::•(2);
-  self::Number* v = n0;
+  self::Number n0 = new self::Number::•(0);
+  self::Number n1 = new self::Number::•(1);
+  self::Number n2 = new self::Number::•(2);
+  self::Number v = n0;
   self::expect(n0, v);
   self::expect(n1, v = self::NumberExtension|+(v, n1));
   self::expect(n2, v = self::NumberExtension|+(v, n1));
@@ -203,8 +176,8 @@
   self::expect(n0, v = self::NumberExtension|-(v, n1));
   self::expect(n1, v = self::NumberExtension|+(v, 1));
   self::expect(n0, v = self::NumberExtension|-(v, 1));
-  self::expect(n0, let final self::Number* #t45 = v in let final self::Number* #t46 = v = self::NumberExtension|+(#t45, 1) in #t45);
-  self::expect(n1, let final self::Number* #t47 = v in let final self::Number* #t48 = v = self::NumberExtension|-(#t47, 1) in #t47);
+  self::expect(n0, let final self::Number #t45 = v in let final self::Number #t46 = v = self::NumberExtension|+(#t45, 1) in #t45);
+  self::expect(n1, let final self::Number #t47 = v in let final self::Number #t48 = v = self::NumberExtension|-(#t47, 1) in #t47);
   self::expect(n0, v);
   self::expect(n0, v);
   v = self::NumberExtension|+(v, n1);
@@ -227,284 +200,284 @@
   self::expect(n0, v);
 }
 static method testProperties() → dynamic {
-  self::Number* n0 = new self::Number::•(0);
-  self::Number* n1 = new self::Number::•(1);
-  self::Number* n2 = new self::Number::•(2);
-  self::Class* v = new self::Class::•(n0);
-  self::expect(n0, v.{self::Class::field}{self::Number*});
-  self::expect(n1, let final self::Class* #t49 = v in #t49.{self::Class::field} = self::NumberExtension|+(#t49.{self::Class::field}{self::Number*}, n1));
-  self::expect(n2, let final self::Class* #t50 = v in #t50.{self::Class::field} = self::NumberExtension|+(#t50.{self::Class::field}{self::Number*}, n1));
-  self::expect(n0, let final self::Class* #t51 = v in #t51.{self::Class::field} = self::NumberExtension|-(#t51.{self::Class::field}{self::Number*}, n2));
-  self::expect(n1, let final self::Class* #t52 = v in #t52.{self::Class::field} = self::NumberExtension|+(#t52.{self::Class::field}{self::Number*}, n1));
-  self::expect(n0, let final self::Class* #t53 = v in #t53.{self::Class::field} = self::NumberExtension|-(#t53.{self::Class::field}{self::Number*}, n1));
-  self::expect(n1, let final self::Class* #t54 = v in #t54.{self::Class::field} = self::NumberExtension|+(#t54.{self::Class::field}{self::Number*}, 1));
-  self::expect(n0, let final self::Class* #t55 = v in #t55.{self::Class::field} = self::NumberExtension|-(#t55.{self::Class::field}{self::Number*}, 1));
-  self::expect(n0, let final self::Class* #t56 = v in let final self::Number* #t57 = #t56.{self::Class::field}{self::Number*} in let final self::Number* #t58 = #t56.{self::Class::field} = self::NumberExtension|+(#t57, 1) in #t57);
-  self::expect(n1, let final self::Class* #t59 = v in let final self::Number* #t60 = #t59.{self::Class::field}{self::Number*} in let final self::Number* #t61 = #t59.{self::Class::field} = self::NumberExtension|-(#t60, 1) in #t60);
-  self::expect(n0, v.{self::Class::field}{self::Number*});
-  self::expect(n0, v.{self::Class::field}{self::Number*});
-  let final self::Class* #t62 = v in #t62.{self::Class::field} = self::NumberExtension|+(#t62.{self::Class::field}{self::Number*}, n1);
-  self::expect(n1, v.{self::Class::field}{self::Number*});
-  let final self::Class* #t63 = v in #t63.{self::Class::field} = self::NumberExtension|+(#t63.{self::Class::field}{self::Number*}, n1);
-  self::expect(n2, v.{self::Class::field}{self::Number*});
-  let final self::Class* #t64 = v in #t64.{self::Class::field} = self::NumberExtension|-(#t64.{self::Class::field}{self::Number*}, n2);
-  self::expect(n0, v.{self::Class::field}{self::Number*});
-  let final self::Class* #t65 = v in #t65.{self::Class::field} = self::NumberExtension|+(#t65.{self::Class::field}{self::Number*}, n1);
-  self::expect(n1, v.{self::Class::field}{self::Number*});
-  let final self::Class* #t66 = v in #t66.{self::Class::field} = self::NumberExtension|-(#t66.{self::Class::field}{self::Number*}, n1);
-  self::expect(n0, v.{self::Class::field}{self::Number*});
-  let final self::Class* #t67 = v in #t67.{self::Class::field} = self::NumberExtension|+(#t67.{self::Class::field}{self::Number*}, 1);
-  self::expect(n1, v.{self::Class::field}{self::Number*});
-  let final self::Class* #t68 = v in #t68.{self::Class::field} = self::NumberExtension|-(#t68.{self::Class::field}{self::Number*}, 1);
-  self::expect(n0, v.{self::Class::field}{self::Number*});
-  let final self::Class* #t69 = v in #t69.{self::Class::field} = self::NumberExtension|+(#t69.{self::Class::field}{self::Number*}, 1);
-  self::expect(n1, v.{self::Class::field}{self::Number*});
-  let final self::Class* #t70 = v in #t70.{self::Class::field} = self::NumberExtension|-(#t70.{self::Class::field}{self::Number*}, 1);
-  self::expect(n0, v.{self::Class::field}{self::Number*});
+  self::Number n0 = new self::Number::•(0);
+  self::Number n1 = new self::Number::•(1);
+  self::Number n2 = new self::Number::•(2);
+  self::Class v = new self::Class::•(n0);
+  self::expect(n0, v.{self::Class::field}{self::Number});
+  self::expect(n1, let final self::Class #t49 = v in #t49.{self::Class::field} = self::NumberExtension|+(#t49.{self::Class::field}{self::Number}, n1));
+  self::expect(n2, let final self::Class #t50 = v in #t50.{self::Class::field} = self::NumberExtension|+(#t50.{self::Class::field}{self::Number}, n1));
+  self::expect(n0, let final self::Class #t51 = v in #t51.{self::Class::field} = self::NumberExtension|-(#t51.{self::Class::field}{self::Number}, n2));
+  self::expect(n1, let final self::Class #t52 = v in #t52.{self::Class::field} = self::NumberExtension|+(#t52.{self::Class::field}{self::Number}, n1));
+  self::expect(n0, let final self::Class #t53 = v in #t53.{self::Class::field} = self::NumberExtension|-(#t53.{self::Class::field}{self::Number}, n1));
+  self::expect(n1, let final self::Class #t54 = v in #t54.{self::Class::field} = self::NumberExtension|+(#t54.{self::Class::field}{self::Number}, 1));
+  self::expect(n0, let final self::Class #t55 = v in #t55.{self::Class::field} = self::NumberExtension|-(#t55.{self::Class::field}{self::Number}, 1));
+  self::expect(n0, let final self::Class #t56 = v in let final self::Number #t57 = #t56.{self::Class::field}{self::Number} in let final self::Number #t58 = #t56.{self::Class::field} = self::NumberExtension|+(#t57, 1) in #t57);
+  self::expect(n1, let final self::Class #t59 = v in let final self::Number #t60 = #t59.{self::Class::field}{self::Number} in let final self::Number #t61 = #t59.{self::Class::field} = self::NumberExtension|-(#t60, 1) in #t60);
+  self::expect(n0, v.{self::Class::field}{self::Number});
+  self::expect(n0, v.{self::Class::field}{self::Number});
+  let final self::Class #t62 = v in #t62.{self::Class::field} = self::NumberExtension|+(#t62.{self::Class::field}{self::Number}, n1);
+  self::expect(n1, v.{self::Class::field}{self::Number});
+  let final self::Class #t63 = v in #t63.{self::Class::field} = self::NumberExtension|+(#t63.{self::Class::field}{self::Number}, n1);
+  self::expect(n2, v.{self::Class::field}{self::Number});
+  let final self::Class #t64 = v in #t64.{self::Class::field} = self::NumberExtension|-(#t64.{self::Class::field}{self::Number}, n2);
+  self::expect(n0, v.{self::Class::field}{self::Number});
+  let final self::Class #t65 = v in #t65.{self::Class::field} = self::NumberExtension|+(#t65.{self::Class::field}{self::Number}, n1);
+  self::expect(n1, v.{self::Class::field}{self::Number});
+  let final self::Class #t66 = v in #t66.{self::Class::field} = self::NumberExtension|-(#t66.{self::Class::field}{self::Number}, n1);
+  self::expect(n0, v.{self::Class::field}{self::Number});
+  let final self::Class #t67 = v in #t67.{self::Class::field} = self::NumberExtension|+(#t67.{self::Class::field}{self::Number}, 1);
+  self::expect(n1, v.{self::Class::field}{self::Number});
+  let final self::Class #t68 = v in #t68.{self::Class::field} = self::NumberExtension|-(#t68.{self::Class::field}{self::Number}, 1);
+  self::expect(n0, v.{self::Class::field}{self::Number});
+  let final self::Class #t69 = v in #t69.{self::Class::field} = self::NumberExtension|+(#t69.{self::Class::field}{self::Number}, 1);
+  self::expect(n1, v.{self::Class::field}{self::Number});
+  let final self::Class #t70 = v in #t70.{self::Class::field} = self::NumberExtension|-(#t70.{self::Class::field}{self::Number}, 1);
+  self::expect(n0, v.{self::Class::field}{self::Number});
   self::expect(n0, self::ClassExtension|get#property(v));
-  self::expect(n1, let final self::Class* #t71 = v in let final self::Number* #t72 = self::NumberExtension|+(self::ClassExtension|get#property(#t71), n1) in let final void #t73 = self::ClassExtension|set#property(#t71, #t72) in #t72);
-  self::expect(n2, let final self::Class* #t74 = v in let final self::Number* #t75 = self::NumberExtension|+(self::ClassExtension|get#property(#t74), n1) in let final void #t76 = self::ClassExtension|set#property(#t74, #t75) in #t75);
-  self::expect(n0, let final self::Class* #t77 = v in let final self::Number* #t78 = self::NumberExtension|-(self::ClassExtension|get#property(#t77), n2) in let final void #t79 = self::ClassExtension|set#property(#t77, #t78) in #t78);
-  self::expect(n1, let final self::Class* #t80 = v in let final self::Number* #t81 = self::NumberExtension|+(self::ClassExtension|get#property(#t80), n1) in let final void #t82 = self::ClassExtension|set#property(#t80, #t81) in #t81);
-  self::expect(n0, let final self::Class* #t83 = v in let final self::Number* #t84 = self::NumberExtension|-(self::ClassExtension|get#property(#t83), n1) in let final void #t85 = self::ClassExtension|set#property(#t83, #t84) in #t84);
-  self::expect(n1, let final self::Class* #t86 = v in let final self::Number* #t87 = self::NumberExtension|+(self::ClassExtension|get#property(#t86), 1) in let final void #t88 = self::ClassExtension|set#property(#t86, #t87) in #t87);
-  self::expect(n0, let final self::Class* #t89 = v in let final self::Number* #t90 = self::NumberExtension|-(self::ClassExtension|get#property(#t89), 1) in let final void #t91 = self::ClassExtension|set#property(#t89, #t90) in #t90);
-  self::expect(n0, let final self::Class* #t92 = v in let final self::Number* #t93 = self::ClassExtension|get#property(#t92) in let final self::Number* #t94 = self::ClassExtension|set#property(#t92, self::NumberExtension|+(#t93, 1)) in #t93);
-  self::expect(n1, let final self::Class* #t95 = v in let final self::Number* #t96 = self::ClassExtension|get#property(#t95) in let final self::Number* #t97 = self::ClassExtension|set#property(#t95, self::NumberExtension|-(#t96, 1)) in #t96);
+  self::expect(n1, let final self::Class #t71 = v in let final self::Number #t72 = self::NumberExtension|+(self::ClassExtension|get#property(#t71), n1) in let final void #t73 = self::ClassExtension|set#property(#t71, #t72) in #t72);
+  self::expect(n2, let final self::Class #t74 = v in let final self::Number #t75 = self::NumberExtension|+(self::ClassExtension|get#property(#t74), n1) in let final void #t76 = self::ClassExtension|set#property(#t74, #t75) in #t75);
+  self::expect(n0, let final self::Class #t77 = v in let final self::Number #t78 = self::NumberExtension|-(self::ClassExtension|get#property(#t77), n2) in let final void #t79 = self::ClassExtension|set#property(#t77, #t78) in #t78);
+  self::expect(n1, let final self::Class #t80 = v in let final self::Number #t81 = self::NumberExtension|+(self::ClassExtension|get#property(#t80), n1) in let final void #t82 = self::ClassExtension|set#property(#t80, #t81) in #t81);
+  self::expect(n0, let final self::Class #t83 = v in let final self::Number #t84 = self::NumberExtension|-(self::ClassExtension|get#property(#t83), n1) in let final void #t85 = self::ClassExtension|set#property(#t83, #t84) in #t84);
+  self::expect(n1, let final self::Class #t86 = v in let final self::Number #t87 = self::NumberExtension|+(self::ClassExtension|get#property(#t86), 1) in let final void #t88 = self::ClassExtension|set#property(#t86, #t87) in #t87);
+  self::expect(n0, let final self::Class #t89 = v in let final self::Number #t90 = self::NumberExtension|-(self::ClassExtension|get#property(#t89), 1) in let final void #t91 = self::ClassExtension|set#property(#t89, #t90) in #t90);
+  self::expect(n0, let final self::Class #t92 = v in let final self::Number #t93 = self::ClassExtension|get#property(#t92) in let final self::Number #t94 = self::ClassExtension|set#property(#t92, self::NumberExtension|+(#t93, 1)) in #t93);
+  self::expect(n1, let final self::Class #t95 = v in let final self::Number #t96 = self::ClassExtension|get#property(#t95) in let final self::Number #t97 = self::ClassExtension|set#property(#t95, self::NumberExtension|-(#t96, 1)) in #t96);
   self::expect(n0, self::ClassExtension|get#property(v));
   self::expect(n0, self::ClassExtension|get#property(v));
-  let final self::Class* #t98 = v in self::ClassExtension|set#property(#t98, self::NumberExtension|+(self::ClassExtension|get#property(#t98), n1));
+  let final self::Class #t98 = v in self::ClassExtension|set#property(#t98, self::NumberExtension|+(self::ClassExtension|get#property(#t98), n1));
   self::expect(n1, self::ClassExtension|get#property(v));
-  let final self::Class* #t99 = v in self::ClassExtension|set#property(#t99, self::NumberExtension|+(self::ClassExtension|get#property(#t99), n1));
+  let final self::Class #t99 = v in self::ClassExtension|set#property(#t99, self::NumberExtension|+(self::ClassExtension|get#property(#t99), n1));
   self::expect(n2, self::ClassExtension|get#property(v));
-  let final self::Class* #t100 = v in self::ClassExtension|set#property(#t100, self::NumberExtension|-(self::ClassExtension|get#property(#t100), n2));
+  let final self::Class #t100 = v in self::ClassExtension|set#property(#t100, self::NumberExtension|-(self::ClassExtension|get#property(#t100), n2));
   self::expect(n0, self::ClassExtension|get#property(v));
-  let final self::Class* #t101 = v in self::ClassExtension|set#property(#t101, self::NumberExtension|+(self::ClassExtension|get#property(#t101), n1));
+  let final self::Class #t101 = v in self::ClassExtension|set#property(#t101, self::NumberExtension|+(self::ClassExtension|get#property(#t101), n1));
   self::expect(n1, self::ClassExtension|get#property(v));
-  let final self::Class* #t102 = v in self::ClassExtension|set#property(#t102, self::NumberExtension|-(self::ClassExtension|get#property(#t102), n1));
+  let final self::Class #t102 = v in self::ClassExtension|set#property(#t102, self::NumberExtension|-(self::ClassExtension|get#property(#t102), n1));
   self::expect(n0, self::ClassExtension|get#property(v));
-  let final self::Class* #t103 = v in let final self::Number* #t104 = self::NumberExtension|+(self::ClassExtension|get#property(#t103), 1) in let final void #t105 = self::ClassExtension|set#property(#t103, #t104) in #t104;
+  let final self::Class #t103 = v in let final self::Number #t104 = self::NumberExtension|+(self::ClassExtension|get#property(#t103), 1) in let final void #t105 = self::ClassExtension|set#property(#t103, #t104) in #t104;
   self::expect(n1, self::ClassExtension|get#property(v));
-  let final self::Class* #t106 = v in let final self::Number* #t107 = self::NumberExtension|-(self::ClassExtension|get#property(#t106), 1) in let final void #t108 = self::ClassExtension|set#property(#t106, #t107) in #t107;
+  let final self::Class #t106 = v in let final self::Number #t107 = self::NumberExtension|-(self::ClassExtension|get#property(#t106), 1) in let final void #t108 = self::ClassExtension|set#property(#t106, #t107) in #t107;
   self::expect(n0, self::ClassExtension|get#property(v));
-  let final self::Class* #t109 = v in self::ClassExtension|set#property(#t109, self::NumberExtension|+(self::ClassExtension|get#property(#t109), 1));
+  let final self::Class #t109 = v in self::ClassExtension|set#property(#t109, self::NumberExtension|+(self::ClassExtension|get#property(#t109), 1));
   self::expect(n1, self::ClassExtension|get#property(v));
-  let final self::Class* #t110 = v in self::ClassExtension|set#property(#t110, self::NumberExtension|-(self::ClassExtension|get#property(#t110), 1));
+  let final self::Class #t110 = v in self::ClassExtension|set#property(#t110, self::NumberExtension|-(self::ClassExtension|get#property(#t110), 1));
   self::expect(n0, self::ClassExtension|get#property(v));
 }
 static method testIntProperties() → dynamic {
-  core::int* n0 = 0;
-  core::int* n1 = 1;
-  core::int* n2 = 2;
-  self::IntClass* v = new self::IntClass::•(n0);
-  self::expect(n0, v.{self::IntClass::field}{core::int*});
-  self::expect(n1, let final self::IntClass* #t111 = v in #t111.{self::IntClass::field} = #t111.{self::IntClass::field}{core::int*}.{core::num::+}(n1){(core::num*) →* core::int*});
-  self::expect(n2, let final self::IntClass* #t112 = v in #t112.{self::IntClass::field} = #t112.{self::IntClass::field}{core::int*}.{core::num::+}(n1){(core::num*) →* core::int*});
-  self::expect(n0, let final self::IntClass* #t113 = v in #t113.{self::IntClass::field} = #t113.{self::IntClass::field}{core::int*}.{core::num::-}(n2){(core::num*) →* core::int*});
-  self::expect(n1, let final self::IntClass* #t114 = v in #t114.{self::IntClass::field} = #t114.{self::IntClass::field}{core::int*}.{core::num::+}(n1){(core::num*) →* core::int*});
-  self::expect(n0, let final self::IntClass* #t115 = v in #t115.{self::IntClass::field} = #t115.{self::IntClass::field}{core::int*}.{core::num::-}(n1){(core::num*) →* core::int*});
-  self::expect(n1, let final self::IntClass* #t116 = v in #t116.{self::IntClass::field} = #t116.{self::IntClass::field}{core::int*}.{core::num::+}(1){(core::num*) →* core::int*});
-  self::expect(n0, let final self::IntClass* #t117 = v in #t117.{self::IntClass::field} = #t117.{self::IntClass::field}{core::int*}.{core::num::-}(1){(core::num*) →* core::int*});
-  self::expect(n0, let final self::IntClass* #t118 = v in let final core::int* #t119 = #t118.{self::IntClass::field}{core::int*} in let final core::int* #t120 = #t118.{self::IntClass::field} = #t119.{core::num::+}(1){(core::num*) →* core::int*} in #t119);
-  self::expect(n1, let final self::IntClass* #t121 = v in let final core::int* #t122 = #t121.{self::IntClass::field}{core::int*} in let final core::int* #t123 = #t121.{self::IntClass::field} = #t122.{core::num::-}(1){(core::num*) →* core::int*} in #t122);
-  self::expect(n0, v.{self::IntClass::field}{core::int*});
-  self::expect(n0, v.{self::IntClass::field}{core::int*});
-  let final self::IntClass* #t124 = v in #t124.{self::IntClass::field} = #t124.{self::IntClass::field}{core::int*}.{core::num::+}(n1){(core::num*) →* core::int*};
-  self::expect(n1, v.{self::IntClass::field}{core::int*});
-  let final self::IntClass* #t125 = v in #t125.{self::IntClass::field} = #t125.{self::IntClass::field}{core::int*}.{core::num::+}(n1){(core::num*) →* core::int*};
-  self::expect(n2, v.{self::IntClass::field}{core::int*});
-  let final self::IntClass* #t126 = v in #t126.{self::IntClass::field} = #t126.{self::IntClass::field}{core::int*}.{core::num::-}(n2){(core::num*) →* core::int*};
-  self::expect(n0, v.{self::IntClass::field}{core::int*});
-  let final self::IntClass* #t127 = v in #t127.{self::IntClass::field} = #t127.{self::IntClass::field}{core::int*}.{core::num::+}(n1){(core::num*) →* core::int*};
-  self::expect(n1, v.{self::IntClass::field}{core::int*});
-  let final self::IntClass* #t128 = v in #t128.{self::IntClass::field} = #t128.{self::IntClass::field}{core::int*}.{core::num::-}(n1){(core::num*) →* core::int*};
-  self::expect(n0, v.{self::IntClass::field}{core::int*});
-  let final self::IntClass* #t129 = v in #t129.{self::IntClass::field} = #t129.{self::IntClass::field}{core::int*}.{core::num::+}(1){(core::num*) →* core::int*};
-  self::expect(n1, v.{self::IntClass::field}{core::int*});
-  let final self::IntClass* #t130 = v in #t130.{self::IntClass::field} = #t130.{self::IntClass::field}{core::int*}.{core::num::-}(1){(core::num*) →* core::int*};
-  self::expect(n0, v.{self::IntClass::field}{core::int*});
-  let final self::IntClass* #t131 = v in #t131.{self::IntClass::field} = #t131.{self::IntClass::field}{core::int*}.{core::num::+}(1){(core::num*) →* core::int*};
-  self::expect(n1, v.{self::IntClass::field}{core::int*});
-  let final self::IntClass* #t132 = v in #t132.{self::IntClass::field} = #t132.{self::IntClass::field}{core::int*}.{core::num::-}(1){(core::num*) →* core::int*};
-  self::expect(n0, v.{self::IntClass::field}{core::int*});
+  core::int n0 = 0;
+  core::int n1 = 1;
+  core::int n2 = 2;
+  self::IntClass v = new self::IntClass::•(n0);
+  self::expect(n0, v.{self::IntClass::field}{core::int});
+  self::expect(n1, let final self::IntClass #t111 = v in #t111.{self::IntClass::field} = #t111.{self::IntClass::field}{core::int}.{core::num::+}(n1){(core::num) → core::int});
+  self::expect(n2, let final self::IntClass #t112 = v in #t112.{self::IntClass::field} = #t112.{self::IntClass::field}{core::int}.{core::num::+}(n1){(core::num) → core::int});
+  self::expect(n0, let final self::IntClass #t113 = v in #t113.{self::IntClass::field} = #t113.{self::IntClass::field}{core::int}.{core::num::-}(n2){(core::num) → core::int});
+  self::expect(n1, let final self::IntClass #t114 = v in #t114.{self::IntClass::field} = #t114.{self::IntClass::field}{core::int}.{core::num::+}(n1){(core::num) → core::int});
+  self::expect(n0, let final self::IntClass #t115 = v in #t115.{self::IntClass::field} = #t115.{self::IntClass::field}{core::int}.{core::num::-}(n1){(core::num) → core::int});
+  self::expect(n1, let final self::IntClass #t116 = v in #t116.{self::IntClass::field} = #t116.{self::IntClass::field}{core::int}.{core::num::+}(1){(core::num) → core::int});
+  self::expect(n0, let final self::IntClass #t117 = v in #t117.{self::IntClass::field} = #t117.{self::IntClass::field}{core::int}.{core::num::-}(1){(core::num) → core::int});
+  self::expect(n0, let final self::IntClass #t118 = v in let final core::int #t119 = #t118.{self::IntClass::field}{core::int} in let final core::int #t120 = #t118.{self::IntClass::field} = #t119.{core::num::+}(1){(core::num) → core::int} in #t119);
+  self::expect(n1, let final self::IntClass #t121 = v in let final core::int #t122 = #t121.{self::IntClass::field}{core::int} in let final core::int #t123 = #t121.{self::IntClass::field} = #t122.{core::num::-}(1){(core::num) → core::int} in #t122);
+  self::expect(n0, v.{self::IntClass::field}{core::int});
+  self::expect(n0, v.{self::IntClass::field}{core::int});
+  let final self::IntClass #t124 = v in #t124.{self::IntClass::field} = #t124.{self::IntClass::field}{core::int}.{core::num::+}(n1){(core::num) → core::int};
+  self::expect(n1, v.{self::IntClass::field}{core::int});
+  let final self::IntClass #t125 = v in #t125.{self::IntClass::field} = #t125.{self::IntClass::field}{core::int}.{core::num::+}(n1){(core::num) → core::int};
+  self::expect(n2, v.{self::IntClass::field}{core::int});
+  let final self::IntClass #t126 = v in #t126.{self::IntClass::field} = #t126.{self::IntClass::field}{core::int}.{core::num::-}(n2){(core::num) → core::int};
+  self::expect(n0, v.{self::IntClass::field}{core::int});
+  let final self::IntClass #t127 = v in #t127.{self::IntClass::field} = #t127.{self::IntClass::field}{core::int}.{core::num::+}(n1){(core::num) → core::int};
+  self::expect(n1, v.{self::IntClass::field}{core::int});
+  let final self::IntClass #t128 = v in #t128.{self::IntClass::field} = #t128.{self::IntClass::field}{core::int}.{core::num::-}(n1){(core::num) → core::int};
+  self::expect(n0, v.{self::IntClass::field}{core::int});
+  let final self::IntClass #t129 = v in #t129.{self::IntClass::field} = #t129.{self::IntClass::field}{core::int}.{core::num::+}(1){(core::num) → core::int};
+  self::expect(n1, v.{self::IntClass::field}{core::int});
+  let final self::IntClass #t130 = v in #t130.{self::IntClass::field} = #t130.{self::IntClass::field}{core::int}.{core::num::-}(1){(core::num) → core::int};
+  self::expect(n0, v.{self::IntClass::field}{core::int});
+  let final self::IntClass #t131 = v in #t131.{self::IntClass::field} = #t131.{self::IntClass::field}{core::int}.{core::num::+}(1){(core::num) → core::int};
+  self::expect(n1, v.{self::IntClass::field}{core::int});
+  let final self::IntClass #t132 = v in #t132.{self::IntClass::field} = #t132.{self::IntClass::field}{core::int}.{core::num::-}(1){(core::num) → core::int};
+  self::expect(n0, v.{self::IntClass::field}{core::int});
   self::expect(n0, self::IntClassExtension|get#property(v));
-  self::expect(n1, let final self::IntClass* #t133 = v in let final core::int* #t134 = self::IntClassExtension|get#property(#t133).{core::num::+}(n1){(core::num*) →* core::int*} in let final void #t135 = self::IntClassExtension|set#property(#t133, #t134) in #t134);
-  self::expect(n2, let final self::IntClass* #t136 = v in let final core::int* #t137 = self::IntClassExtension|get#property(#t136).{core::num::+}(n1){(core::num*) →* core::int*} in let final void #t138 = self::IntClassExtension|set#property(#t136, #t137) in #t137);
-  self::expect(n0, let final self::IntClass* #t139 = v in let final core::int* #t140 = self::IntClassExtension|get#property(#t139).{core::num::-}(n2){(core::num*) →* core::int*} in let final void #t141 = self::IntClassExtension|set#property(#t139, #t140) in #t140);
-  self::expect(n1, let final self::IntClass* #t142 = v in let final core::int* #t143 = self::IntClassExtension|get#property(#t142).{core::num::+}(n1){(core::num*) →* core::int*} in let final void #t144 = self::IntClassExtension|set#property(#t142, #t143) in #t143);
-  self::expect(n0, let final self::IntClass* #t145 = v in let final core::int* #t146 = self::IntClassExtension|get#property(#t145).{core::num::-}(n1){(core::num*) →* core::int*} in let final void #t147 = self::IntClassExtension|set#property(#t145, #t146) in #t146);
-  self::expect(n1, let final self::IntClass* #t148 = v in let final core::int* #t149 = self::IntClassExtension|get#property(#t148).{core::num::+}(1){(core::num*) →* core::int*} in let final void #t150 = self::IntClassExtension|set#property(#t148, #t149) in #t149);
-  self::expect(n0, let final self::IntClass* #t151 = v in let final core::int* #t152 = self::IntClassExtension|get#property(#t151).{core::num::-}(1){(core::num*) →* core::int*} in let final void #t153 = self::IntClassExtension|set#property(#t151, #t152) in #t152);
-  self::expect(n0, let final self::IntClass* #t154 = v in let final core::int* #t155 = self::IntClassExtension|get#property(#t154) in let final core::int* #t156 = self::IntClassExtension|set#property(#t154, #t155.{core::num::+}(1){(core::num*) →* core::int*}) in #t155);
-  self::expect(n1, let final self::IntClass* #t157 = v in let final core::int* #t158 = self::IntClassExtension|get#property(#t157) in let final core::int* #t159 = self::IntClassExtension|set#property(#t157, #t158.{core::num::-}(1){(core::num*) →* core::int*}) in #t158);
+  self::expect(n1, let final self::IntClass #t133 = v in let final core::int #t134 = self::IntClassExtension|get#property(#t133).{core::num::+}(n1){(core::num) → core::int} in let final void #t135 = self::IntClassExtension|set#property(#t133, #t134) in #t134);
+  self::expect(n2, let final self::IntClass #t136 = v in let final core::int #t137 = self::IntClassExtension|get#property(#t136).{core::num::+}(n1){(core::num) → core::int} in let final void #t138 = self::IntClassExtension|set#property(#t136, #t137) in #t137);
+  self::expect(n0, let final self::IntClass #t139 = v in let final core::int #t140 = self::IntClassExtension|get#property(#t139).{core::num::-}(n2){(core::num) → core::int} in let final void #t141 = self::IntClassExtension|set#property(#t139, #t140) in #t140);
+  self::expect(n1, let final self::IntClass #t142 = v in let final core::int #t143 = self::IntClassExtension|get#property(#t142).{core::num::+}(n1){(core::num) → core::int} in let final void #t144 = self::IntClassExtension|set#property(#t142, #t143) in #t143);
+  self::expect(n0, let final self::IntClass #t145 = v in let final core::int #t146 = self::IntClassExtension|get#property(#t145).{core::num::-}(n1){(core::num) → core::int} in let final void #t147 = self::IntClassExtension|set#property(#t145, #t146) in #t146);
+  self::expect(n1, let final self::IntClass #t148 = v in let final core::int #t149 = self::IntClassExtension|get#property(#t148).{core::num::+}(1){(core::num) → core::int} in let final void #t150 = self::IntClassExtension|set#property(#t148, #t149) in #t149);
+  self::expect(n0, let final self::IntClass #t151 = v in let final core::int #t152 = self::IntClassExtension|get#property(#t151).{core::num::-}(1){(core::num) → core::int} in let final void #t153 = self::IntClassExtension|set#property(#t151, #t152) in #t152);
+  self::expect(n0, let final self::IntClass #t154 = v in let final core::int #t155 = self::IntClassExtension|get#property(#t154) in let final core::int #t156 = self::IntClassExtension|set#property(#t154, #t155.{core::num::+}(1){(core::num) → core::int}) in #t155);
+  self::expect(n1, let final self::IntClass #t157 = v in let final core::int #t158 = self::IntClassExtension|get#property(#t157) in let final core::int #t159 = self::IntClassExtension|set#property(#t157, #t158.{core::num::-}(1){(core::num) → core::int}) in #t158);
   self::expect(n0, self::IntClassExtension|get#property(v));
   self::expect(n0, self::IntClassExtension|get#property(v));
-  let final self::IntClass* #t160 = v in self::IntClassExtension|set#property(#t160, self::IntClassExtension|get#property(#t160).{core::num::+}(n1){(core::num*) →* core::int*});
+  let final self::IntClass #t160 = v in self::IntClassExtension|set#property(#t160, self::IntClassExtension|get#property(#t160).{core::num::+}(n1){(core::num) → core::int});
   self::expect(n1, self::IntClassExtension|get#property(v));
-  let final self::IntClass* #t161 = v in self::IntClassExtension|set#property(#t161, self::IntClassExtension|get#property(#t161).{core::num::+}(n1){(core::num*) →* core::int*});
+  let final self::IntClass #t161 = v in self::IntClassExtension|set#property(#t161, self::IntClassExtension|get#property(#t161).{core::num::+}(n1){(core::num) → core::int});
   self::expect(n2, self::IntClassExtension|get#property(v));
-  let final self::IntClass* #t162 = v in self::IntClassExtension|set#property(#t162, self::IntClassExtension|get#property(#t162).{core::num::-}(n2){(core::num*) →* core::int*});
+  let final self::IntClass #t162 = v in self::IntClassExtension|set#property(#t162, self::IntClassExtension|get#property(#t162).{core::num::-}(n2){(core::num) → core::int});
   self::expect(n0, self::IntClassExtension|get#property(v));
-  let final self::IntClass* #t163 = v in self::IntClassExtension|set#property(#t163, self::IntClassExtension|get#property(#t163).{core::num::+}(n1){(core::num*) →* core::int*});
+  let final self::IntClass #t163 = v in self::IntClassExtension|set#property(#t163, self::IntClassExtension|get#property(#t163).{core::num::+}(n1){(core::num) → core::int});
   self::expect(n1, self::IntClassExtension|get#property(v));
-  let final self::IntClass* #t164 = v in self::IntClassExtension|set#property(#t164, self::IntClassExtension|get#property(#t164).{core::num::-}(n1){(core::num*) →* core::int*});
+  let final self::IntClass #t164 = v in self::IntClassExtension|set#property(#t164, self::IntClassExtension|get#property(#t164).{core::num::-}(n1){(core::num) → core::int});
   self::expect(n0, self::IntClassExtension|get#property(v));
-  let final self::IntClass* #t165 = v in let final core::int* #t166 = self::IntClassExtension|get#property(#t165).{core::num::+}(1){(core::num*) →* core::int*} in let final void #t167 = self::IntClassExtension|set#property(#t165, #t166) in #t166;
+  let final self::IntClass #t165 = v in let final core::int #t166 = self::IntClassExtension|get#property(#t165).{core::num::+}(1){(core::num) → core::int} in let final void #t167 = self::IntClassExtension|set#property(#t165, #t166) in #t166;
   self::expect(n1, self::IntClassExtension|get#property(v));
-  let final self::IntClass* #t168 = v in let final core::int* #t169 = self::IntClassExtension|get#property(#t168).{core::num::-}(1){(core::num*) →* core::int*} in let final void #t170 = self::IntClassExtension|set#property(#t168, #t169) in #t169;
+  let final self::IntClass #t168 = v in let final core::int #t169 = self::IntClassExtension|get#property(#t168).{core::num::-}(1){(core::num) → core::int} in let final void #t170 = self::IntClassExtension|set#property(#t168, #t169) in #t169;
   self::expect(n0, self::IntClassExtension|get#property(v));
-  let final self::IntClass* #t171 = v in self::IntClassExtension|set#property(#t171, self::IntClassExtension|get#property(#t171).{core::num::+}(1){(core::num*) →* core::int*});
+  let final self::IntClass #t171 = v in self::IntClassExtension|set#property(#t171, self::IntClassExtension|get#property(#t171).{core::num::+}(1){(core::num) → core::int});
   self::expect(n1, self::IntClassExtension|get#property(v));
-  let final self::IntClass* #t172 = v in self::IntClassExtension|set#property(#t172, self::IntClassExtension|get#property(#t172).{core::num::-}(1){(core::num*) →* core::int*});
+  let final self::IntClass #t172 = v in self::IntClassExtension|set#property(#t172, self::IntClassExtension|get#property(#t172).{core::num::-}(1){(core::num) → core::int});
   self::expect(n0, self::IntClassExtension|get#property(v));
 }
 static method testExplicitProperties() → dynamic {
-  self::Number* n0 = new self::Number::•(0);
-  self::Number* n1 = new self::Number::•(1);
-  self::Number* n2 = new self::Number::•(2);
-  self::Class* v = new self::Class::•(n0);
+  self::Number n0 = new self::Number::•(0);
+  self::Number n1 = new self::Number::•(1);
+  self::Number n2 = new self::Number::•(2);
+  self::Class v = new self::Class::•(n0);
   self::expect(n0, self::ClassExtension|get#property(v));
-  self::expect(n1, let final self::Class* #t173 = v in let final self::Number* #t174 = self::NumberExtension|+(self::ClassExtension|get#property(#t173), n1) in let final void #t175 = self::ClassExtension|set#property(#t173, #t174) in #t174);
-  self::expect(n2, let final self::Class* #t176 = v in let final self::Number* #t177 = self::NumberExtension|+(self::ClassExtension|get#property(#t176), n1) in let final void #t178 = self::ClassExtension|set#property(#t176, #t177) in #t177);
-  self::expect(n0, let final self::Class* #t179 = v in let final self::Number* #t180 = self::NumberExtension|-(self::ClassExtension|get#property(#t179), n2) in let final void #t181 = self::ClassExtension|set#property(#t179, #t180) in #t180);
-  self::expect(n1, let final self::Class* #t182 = v in let final self::Number* #t183 = self::NumberExtension|+(self::ClassExtension|get#property(#t182), n1) in let final void #t184 = self::ClassExtension|set#property(#t182, #t183) in #t183);
-  self::expect(n0, let final self::Class* #t185 = v in let final self::Number* #t186 = self::NumberExtension|-(self::ClassExtension|get#property(#t185), n1) in let final void #t187 = self::ClassExtension|set#property(#t185, #t186) in #t186);
-  self::expect(n1, let final self::Class* #t188 = v in let final self::Number* #t189 = self::NumberExtension|+(self::ClassExtension|get#property(#t188), 1) in let final void #t190 = self::ClassExtension|set#property(#t188, #t189) in #t189);
-  self::expect(n0, let final self::Class* #t191 = v in let final self::Number* #t192 = self::NumberExtension|-(self::ClassExtension|get#property(#t191), 1) in let final void #t193 = self::ClassExtension|set#property(#t191, #t192) in #t192);
-  self::expect(n0, let final self::Class* #t194 = v in let final self::Number* #t195 = self::ClassExtension|get#property(#t194) in let final self::Number* #t196 = let final self::Number* #t197 = self::NumberExtension|+(#t195, 1) in let final void #t198 = self::ClassExtension|set#property(#t194, #t197) in #t197 in #t195);
-  self::expect(n1, let final self::Class* #t199 = v in let final self::Number* #t200 = self::ClassExtension|get#property(#t199) in let final self::Number* #t201 = let final self::Number* #t202 = self::NumberExtension|-(#t200, 1) in let final void #t203 = self::ClassExtension|set#property(#t199, #t202) in #t202 in #t200);
+  self::expect(n1, let final self::Class #t173 = v in let final self::Number #t174 = self::NumberExtension|+(self::ClassExtension|get#property(#t173), n1) in let final void #t175 = self::ClassExtension|set#property(#t173, #t174) in #t174);
+  self::expect(n2, let final self::Class #t176 = v in let final self::Number #t177 = self::NumberExtension|+(self::ClassExtension|get#property(#t176), n1) in let final void #t178 = self::ClassExtension|set#property(#t176, #t177) in #t177);
+  self::expect(n0, let final self::Class #t179 = v in let final self::Number #t180 = self::NumberExtension|-(self::ClassExtension|get#property(#t179), n2) in let final void #t181 = self::ClassExtension|set#property(#t179, #t180) in #t180);
+  self::expect(n1, let final self::Class #t182 = v in let final self::Number #t183 = self::NumberExtension|+(self::ClassExtension|get#property(#t182), n1) in let final void #t184 = self::ClassExtension|set#property(#t182, #t183) in #t183);
+  self::expect(n0, let final self::Class #t185 = v in let final self::Number #t186 = self::NumberExtension|-(self::ClassExtension|get#property(#t185), n1) in let final void #t187 = self::ClassExtension|set#property(#t185, #t186) in #t186);
+  self::expect(n1, let final self::Class #t188 = v in let final self::Number #t189 = self::NumberExtension|+(self::ClassExtension|get#property(#t188), 1) in let final void #t190 = self::ClassExtension|set#property(#t188, #t189) in #t189);
+  self::expect(n0, let final self::Class #t191 = v in let final self::Number #t192 = self::NumberExtension|-(self::ClassExtension|get#property(#t191), 1) in let final void #t193 = self::ClassExtension|set#property(#t191, #t192) in #t192);
+  self::expect(n0, let final self::Class #t194 = v in let final self::Number #t195 = self::ClassExtension|get#property(#t194) in let final self::Number #t196 = let final self::Number #t197 = self::NumberExtension|+(#t195, 1) in let final void #t198 = self::ClassExtension|set#property(#t194, #t197) in #t197 in #t195);
+  self::expect(n1, let final self::Class #t199 = v in let final self::Number #t200 = self::ClassExtension|get#property(#t199) in let final self::Number #t201 = let final self::Number #t202 = self::NumberExtension|-(#t200, 1) in let final void #t203 = self::ClassExtension|set#property(#t199, #t202) in #t202 in #t200);
   self::expect(n0, self::ClassExtension|get#property(v));
   self::expect(n0, self::ClassExtension|get#property(v));
-  let final self::Class* #t204 = v in self::ClassExtension|set#property(#t204, self::NumberExtension|+(self::ClassExtension|get#property(#t204), n1));
+  let final self::Class #t204 = v in self::ClassExtension|set#property(#t204, self::NumberExtension|+(self::ClassExtension|get#property(#t204), n1));
   self::expect(n1, self::ClassExtension|get#property(v));
-  let final self::Class* #t205 = v in self::ClassExtension|set#property(#t205, self::NumberExtension|+(self::ClassExtension|get#property(#t205), n1));
+  let final self::Class #t205 = v in self::ClassExtension|set#property(#t205, self::NumberExtension|+(self::ClassExtension|get#property(#t205), n1));
   self::expect(n2, self::ClassExtension|get#property(v));
-  let final self::Class* #t206 = v in self::ClassExtension|set#property(#t206, self::NumberExtension|-(self::ClassExtension|get#property(#t206), n2));
+  let final self::Class #t206 = v in self::ClassExtension|set#property(#t206, self::NumberExtension|-(self::ClassExtension|get#property(#t206), n2));
   self::expect(n0, self::ClassExtension|get#property(v));
-  let final self::Class* #t207 = v in self::ClassExtension|set#property(#t207, self::NumberExtension|+(self::ClassExtension|get#property(#t207), n1));
+  let final self::Class #t207 = v in self::ClassExtension|set#property(#t207, self::NumberExtension|+(self::ClassExtension|get#property(#t207), n1));
   self::expect(n1, self::ClassExtension|get#property(v));
-  let final self::Class* #t208 = v in self::ClassExtension|set#property(#t208, self::NumberExtension|-(self::ClassExtension|get#property(#t208), n1));
+  let final self::Class #t208 = v in self::ClassExtension|set#property(#t208, self::NumberExtension|-(self::ClassExtension|get#property(#t208), n1));
   self::expect(n0, self::ClassExtension|get#property(v));
-  let final self::Class* #t209 = v in let final self::Number* #t210 = self::NumberExtension|+(self::ClassExtension|get#property(#t209), 1) in let final void #t211 = self::ClassExtension|set#property(#t209, #t210) in #t210;
+  let final self::Class #t209 = v in let final self::Number #t210 = self::NumberExtension|+(self::ClassExtension|get#property(#t209), 1) in let final void #t211 = self::ClassExtension|set#property(#t209, #t210) in #t210;
   self::expect(n1, self::ClassExtension|get#property(v));
-  let final self::Class* #t212 = v in let final self::Number* #t213 = self::NumberExtension|-(self::ClassExtension|get#property(#t212), 1) in let final void #t214 = self::ClassExtension|set#property(#t212, #t213) in #t213;
+  let final self::Class #t212 = v in let final self::Number #t213 = self::NumberExtension|-(self::ClassExtension|get#property(#t212), 1) in let final void #t214 = self::ClassExtension|set#property(#t212, #t213) in #t213;
   self::expect(n0, self::ClassExtension|get#property(v));
-  let final self::Class* #t215 = v in self::ClassExtension|set#property(#t215, self::NumberExtension|+(self::ClassExtension|get#property(#t215), 1));
+  let final self::Class #t215 = v in self::ClassExtension|set#property(#t215, self::NumberExtension|+(self::ClassExtension|get#property(#t215), 1));
   self::expect(n1, self::ClassExtension|get#property(v));
-  let final self::Class* #t216 = v in self::ClassExtension|set#property(#t216, self::NumberExtension|-(self::ClassExtension|get#property(#t216), 1));
+  let final self::Class #t216 = v in self::ClassExtension|set#property(#t216, self::NumberExtension|-(self::ClassExtension|get#property(#t216), 1));
   self::expect(n0, self::ClassExtension|get#property(v));
 }
 static method testExplicitIntProperties() → dynamic {
-  core::int* n0 = 0;
-  core::int* n1 = 1;
-  core::int* n2 = 2;
-  self::IntClass* v = new self::IntClass::•(n0);
+  core::int n0 = 0;
+  core::int n1 = 1;
+  core::int n2 = 2;
+  self::IntClass v = new self::IntClass::•(n0);
   self::expect(n0, self::IntClassExtension|get#property(v));
-  self::expect(n1, let final self::IntClass* #t217 = v in let final core::int* #t218 = self::IntClassExtension|get#property(#t217).{core::num::+}(n1){(core::num*) →* core::int*} in let final void #t219 = self::IntClassExtension|set#property(#t217, #t218) in #t218);
-  self::expect(n2, let final self::IntClass* #t220 = v in let final core::int* #t221 = self::IntClassExtension|get#property(#t220).{core::num::+}(n1){(core::num*) →* core::int*} in let final void #t222 = self::IntClassExtension|set#property(#t220, #t221) in #t221);
-  self::expect(n0, let final self::IntClass* #t223 = v in let final core::int* #t224 = self::IntClassExtension|get#property(#t223).{core::num::-}(n2){(core::num*) →* core::int*} in let final void #t225 = self::IntClassExtension|set#property(#t223, #t224) in #t224);
-  self::expect(n1, let final self::IntClass* #t226 = v in let final core::int* #t227 = self::IntClassExtension|get#property(#t226).{core::num::+}(n1){(core::num*) →* core::int*} in let final void #t228 = self::IntClassExtension|set#property(#t226, #t227) in #t227);
-  self::expect(n0, let final self::IntClass* #t229 = v in let final core::int* #t230 = self::IntClassExtension|get#property(#t229).{core::num::-}(n1){(core::num*) →* core::int*} in let final void #t231 = self::IntClassExtension|set#property(#t229, #t230) in #t230);
-  self::expect(n1, let final self::IntClass* #t232 = v in let final core::int* #t233 = self::IntClassExtension|get#property(#t232).{core::num::+}(1){(core::num*) →* core::int*} in let final void #t234 = self::IntClassExtension|set#property(#t232, #t233) in #t233);
-  self::expect(n0, let final self::IntClass* #t235 = v in let final core::int* #t236 = self::IntClassExtension|get#property(#t235).{core::num::-}(1){(core::num*) →* core::int*} in let final void #t237 = self::IntClassExtension|set#property(#t235, #t236) in #t236);
-  self::expect(n0, let final self::IntClass* #t238 = v in let final core::int* #t239 = self::IntClassExtension|get#property(#t238) in let final core::int* #t240 = let final core::int* #t241 = #t239.{core::num::+}(1){(core::num*) →* core::int*} in let final void #t242 = self::IntClassExtension|set#property(#t238, #t241) in #t241 in #t239);
-  self::expect(n1, let final self::IntClass* #t243 = v in let final core::int* #t244 = self::IntClassExtension|get#property(#t243) in let final core::int* #t245 = let final core::int* #t246 = #t244.{core::num::-}(1){(core::num*) →* core::int*} in let final void #t247 = self::IntClassExtension|set#property(#t243, #t246) in #t246 in #t244);
+  self::expect(n1, let final self::IntClass #t217 = v in let final core::int #t218 = self::IntClassExtension|get#property(#t217).{core::num::+}(n1){(core::num) → core::int} in let final void #t219 = self::IntClassExtension|set#property(#t217, #t218) in #t218);
+  self::expect(n2, let final self::IntClass #t220 = v in let final core::int #t221 = self::IntClassExtension|get#property(#t220).{core::num::+}(n1){(core::num) → core::int} in let final void #t222 = self::IntClassExtension|set#property(#t220, #t221) in #t221);
+  self::expect(n0, let final self::IntClass #t223 = v in let final core::int #t224 = self::IntClassExtension|get#property(#t223).{core::num::-}(n2){(core::num) → core::int} in let final void #t225 = self::IntClassExtension|set#property(#t223, #t224) in #t224);
+  self::expect(n1, let final self::IntClass #t226 = v in let final core::int #t227 = self::IntClassExtension|get#property(#t226).{core::num::+}(n1){(core::num) → core::int} in let final void #t228 = self::IntClassExtension|set#property(#t226, #t227) in #t227);
+  self::expect(n0, let final self::IntClass #t229 = v in let final core::int #t230 = self::IntClassExtension|get#property(#t229).{core::num::-}(n1){(core::num) → core::int} in let final void #t231 = self::IntClassExtension|set#property(#t229, #t230) in #t230);
+  self::expect(n1, let final self::IntClass #t232 = v in let final core::int #t233 = self::IntClassExtension|get#property(#t232).{core::num::+}(1){(core::num) → core::int} in let final void #t234 = self::IntClassExtension|set#property(#t232, #t233) in #t233);
+  self::expect(n0, let final self::IntClass #t235 = v in let final core::int #t236 = self::IntClassExtension|get#property(#t235).{core::num::-}(1){(core::num) → core::int} in let final void #t237 = self::IntClassExtension|set#property(#t235, #t236) in #t236);
+  self::expect(n0, let final self::IntClass #t238 = v in let final core::int #t239 = self::IntClassExtension|get#property(#t238) in let final core::int #t240 = let final core::int #t241 = #t239.{core::num::+}(1){(core::num) → core::int} in let final void #t242 = self::IntClassExtension|set#property(#t238, #t241) in #t241 in #t239);
+  self::expect(n1, let final self::IntClass #t243 = v in let final core::int #t244 = self::IntClassExtension|get#property(#t243) in let final core::int #t245 = let final core::int #t246 = #t244.{core::num::-}(1){(core::num) → core::int} in let final void #t247 = self::IntClassExtension|set#property(#t243, #t246) in #t246 in #t244);
   self::expect(n0, self::IntClassExtension|get#property(v));
   self::expect(n0, self::IntClassExtension|get#property(v));
-  let final self::IntClass* #t248 = v in self::IntClassExtension|set#property(#t248, self::IntClassExtension|get#property(#t248).{core::num::+}(n1){(core::num*) →* core::int*});
+  let final self::IntClass #t248 = v in self::IntClassExtension|set#property(#t248, self::IntClassExtension|get#property(#t248).{core::num::+}(n1){(core::num) → core::int});
   self::expect(n1, self::IntClassExtension|get#property(v));
-  let final self::IntClass* #t249 = v in self::IntClassExtension|set#property(#t249, self::IntClassExtension|get#property(#t249).{core::num::+}(n1){(core::num*) →* core::int*});
+  let final self::IntClass #t249 = v in self::IntClassExtension|set#property(#t249, self::IntClassExtension|get#property(#t249).{core::num::+}(n1){(core::num) → core::int});
   self::expect(n2, self::IntClassExtension|get#property(v));
-  let final self::IntClass* #t250 = v in self::IntClassExtension|set#property(#t250, self::IntClassExtension|get#property(#t250).{core::num::-}(n2){(core::num*) →* core::int*});
+  let final self::IntClass #t250 = v in self::IntClassExtension|set#property(#t250, self::IntClassExtension|get#property(#t250).{core::num::-}(n2){(core::num) → core::int});
   self::expect(n0, self::IntClassExtension|get#property(v));
-  let final self::IntClass* #t251 = v in self::IntClassExtension|set#property(#t251, self::IntClassExtension|get#property(#t251).{core::num::+}(n1){(core::num*) →* core::int*});
+  let final self::IntClass #t251 = v in self::IntClassExtension|set#property(#t251, self::IntClassExtension|get#property(#t251).{core::num::+}(n1){(core::num) → core::int});
   self::expect(n1, self::IntClassExtension|get#property(v));
-  let final self::IntClass* #t252 = v in self::IntClassExtension|set#property(#t252, self::IntClassExtension|get#property(#t252).{core::num::-}(n1){(core::num*) →* core::int*});
+  let final self::IntClass #t252 = v in self::IntClassExtension|set#property(#t252, self::IntClassExtension|get#property(#t252).{core::num::-}(n1){(core::num) → core::int});
   self::expect(n0, self::IntClassExtension|get#property(v));
-  let final self::IntClass* #t253 = v in let final core::int* #t254 = self::IntClassExtension|get#property(#t253).{core::num::+}(1){(core::num*) →* core::int*} in let final void #t255 = self::IntClassExtension|set#property(#t253, #t254) in #t254;
+  let final self::IntClass #t253 = v in let final core::int #t254 = self::IntClassExtension|get#property(#t253).{core::num::+}(1){(core::num) → core::int} in let final void #t255 = self::IntClassExtension|set#property(#t253, #t254) in #t254;
   self::expect(n1, self::IntClassExtension|get#property(v));
-  let final self::IntClass* #t256 = v in let final core::int* #t257 = self::IntClassExtension|get#property(#t256).{core::num::-}(1){(core::num*) →* core::int*} in let final void #t258 = self::IntClassExtension|set#property(#t256, #t257) in #t257;
+  let final self::IntClass #t256 = v in let final core::int #t257 = self::IntClassExtension|get#property(#t256).{core::num::-}(1){(core::num) → core::int} in let final void #t258 = self::IntClassExtension|set#property(#t256, #t257) in #t257;
   self::expect(n0, self::IntClassExtension|get#property(v));
-  let final self::IntClass* #t259 = v in self::IntClassExtension|set#property(#t259, self::IntClassExtension|get#property(#t259).{core::num::+}(1){(core::num*) →* core::int*});
+  let final self::IntClass #t259 = v in self::IntClassExtension|set#property(#t259, self::IntClassExtension|get#property(#t259).{core::num::+}(1){(core::num) → core::int});
   self::expect(n1, self::IntClassExtension|get#property(v));
-  let final self::IntClass* #t260 = v in self::IntClassExtension|set#property(#t260, self::IntClassExtension|get#property(#t260).{core::num::-}(1){(core::num*) →* core::int*});
+  let final self::IntClass #t260 = v in self::IntClassExtension|set#property(#t260, self::IntClassExtension|get#property(#t260).{core::num::-}(1){(core::num) → core::int});
   self::expect(n0, self::IntClassExtension|get#property(v));
 }
-static method testExplicitNullAwareProperties(self::Class* v) → dynamic {
-  self::Number* n0 = new self::Number::•(0);
-  self::Number* n1 = new self::Number::•(1);
-  self::Number* n2 = new self::Number::•(2);
-  self::expect(n0, let final self::Class* #t261 = v in #t261 == null ?{self::Number*} null : self::ClassExtension|get#property(#t261), v == null);
-  self::expect(n1, let final self::Class* #t262 = v in #t262 == null ?{self::Number*} null : let final self::Number* #t263 = self::NumberExtension|+(self::ClassExtension|get#property(#t262), n1) in let final void #t264 = self::ClassExtension|set#property(#t262, #t263) in #t263, v == null);
-  self::expect(n2, let final self::Class* #t265 = v in #t265 == null ?{self::Number*} null : let final self::Number* #t266 = self::NumberExtension|+(self::ClassExtension|get#property(#t265), n1) in let final void #t267 = self::ClassExtension|set#property(#t265, #t266) in #t266, v == null);
-  self::expect(n0, let final self::Class* #t268 = v in #t268 == null ?{self::Number*} null : let final self::Number* #t269 = self::NumberExtension|-(self::ClassExtension|get#property(#t268), n2) in let final void #t270 = self::ClassExtension|set#property(#t268, #t269) in #t269, v == null);
-  self::expect(n1, let final self::Class* #t271 = v in #t271 == null ?{self::Number*} null : let final self::Number* #t272 = self::NumberExtension|+(self::ClassExtension|get#property(#t271), n1) in let final void #t273 = self::ClassExtension|set#property(#t271, #t272) in #t272, v == null);
-  self::expect(n0, let final self::Class* #t274 = v in #t274 == null ?{self::Number*} null : let final self::Number* #t275 = self::NumberExtension|-(self::ClassExtension|get#property(#t274), n1) in let final void #t276 = self::ClassExtension|set#property(#t274, #t275) in #t275, v == null);
-  self::expect(n1, let final self::Class* #t277 = v in #t277 == null ?{self::Number*} null : let final self::Number* #t278 = self::NumberExtension|+(self::ClassExtension|get#property(#t277), 1) in let final void #t279 = self::ClassExtension|set#property(#t277, #t278) in #t278, v == null);
-  self::expect(n0, let final self::Class* #t280 = v in #t280 == null ?{self::Number*} null : let final self::Number* #t281 = self::NumberExtension|-(self::ClassExtension|get#property(#t280), 1) in let final void #t282 = self::ClassExtension|set#property(#t280, #t281) in #t281, v == null);
-  self::expect(n0, let final self::Class* #t283 = v in #t283 == null ?{self::Number*} null : let final self::Number* #t284 = self::ClassExtension|get#property(#t283) in let final self::Number* #t285 = let final self::Number* #t286 = self::NumberExtension|+(#t284, 1) in let final void #t287 = self::ClassExtension|set#property(#t283, #t286) in #t286 in #t284, v == null);
-  self::expect(n1, let final self::Class* #t288 = v in #t288 == null ?{self::Number*} null : let final self::Number* #t289 = self::ClassExtension|get#property(#t288) in let final self::Number* #t290 = let final self::Number* #t291 = self::NumberExtension|-(#t289, 1) in let final void #t292 = self::ClassExtension|set#property(#t288, #t291) in #t291 in #t289, v == null);
-  self::expect(n0, let final self::Class* #t293 = v in #t293 == null ?{self::Number*} null : self::ClassExtension|get#property(#t293), v == null);
-  self::expect(n0, let final self::Class* #t294 = v in #t294 == null ?{self::Number*} null : self::ClassExtension|get#property(#t294), v == null);
-  let final self::Class* #t295 = v in #t295 == null ?{self::Number*} null : self::ClassExtension|set#property(#t295, self::NumberExtension|+(self::ClassExtension|get#property(#t295), n1));
-  self::expect(n1, let final self::Class* #t296 = v in #t296 == null ?{self::Number*} null : self::ClassExtension|get#property(#t296), v == null);
-  let final self::Class* #t297 = v in #t297 == null ?{self::Number*} null : self::ClassExtension|set#property(#t297, self::NumberExtension|+(self::ClassExtension|get#property(#t297), n1));
-  self::expect(n2, let final self::Class* #t298 = v in #t298 == null ?{self::Number*} null : self::ClassExtension|get#property(#t298), v == null);
-  let final self::Class* #t299 = v in #t299 == null ?{self::Number*} null : self::ClassExtension|set#property(#t299, self::NumberExtension|-(self::ClassExtension|get#property(#t299), n2));
-  self::expect(n0, let final self::Class* #t300 = v in #t300 == null ?{self::Number*} null : self::ClassExtension|get#property(#t300), v == null);
-  let final self::Class* #t301 = v in #t301 == null ?{self::Number*} null : self::ClassExtension|set#property(#t301, self::NumberExtension|+(self::ClassExtension|get#property(#t301), n1));
-  self::expect(n1, let final self::Class* #t302 = v in #t302 == null ?{self::Number*} null : self::ClassExtension|get#property(#t302), v == null);
-  let final self::Class* #t303 = v in #t303 == null ?{self::Number*} null : self::ClassExtension|set#property(#t303, self::NumberExtension|-(self::ClassExtension|get#property(#t303), n1));
-  self::expect(n0, let final self::Class* #t304 = v in #t304 == null ?{self::Number*} null : self::ClassExtension|get#property(#t304), v == null);
-  let final self::Class* #t305 = v in #t305 == null ?{self::Number*} null : let final self::Number* #t306 = self::NumberExtension|+(self::ClassExtension|get#property(#t305), 1) in let final void #t307 = self::ClassExtension|set#property(#t305, #t306) in #t306;
-  self::expect(n1, let final self::Class* #t308 = v in #t308 == null ?{self::Number*} null : self::ClassExtension|get#property(#t308), v == null);
-  let final self::Class* #t309 = v in #t309 == null ?{self::Number*} null : let final self::Number* #t310 = self::NumberExtension|-(self::ClassExtension|get#property(#t309), 1) in let final void #t311 = self::ClassExtension|set#property(#t309, #t310) in #t310;
-  self::expect(n0, let final self::Class* #t312 = v in #t312 == null ?{self::Number*} null : self::ClassExtension|get#property(#t312), v == null);
-  let final self::Class* #t313 = v in #t313 == null ?{self::Number*} null : self::ClassExtension|set#property(#t313, self::NumberExtension|+(self::ClassExtension|get#property(#t313), 1));
-  self::expect(n1, let final self::Class* #t314 = v in #t314 == null ?{self::Number*} null : self::ClassExtension|get#property(#t314), v == null);
-  let final self::Class* #t315 = v in #t315 == null ?{self::Number*} null : self::ClassExtension|set#property(#t315, self::NumberExtension|-(self::ClassExtension|get#property(#t315), 1));
-  self::expect(n0, let final self::Class* #t316 = v in #t316 == null ?{self::Number*} null : self::ClassExtension|get#property(#t316), v == null);
+static method testExplicitNullAwareProperties(self::Class? v) → dynamic {
+  self::Number n0 = new self::Number::•(0);
+  self::Number n1 = new self::Number::•(1);
+  self::Number n2 = new self::Number::•(2);
+  self::expect(n0, let final self::Class? #t261 = v in #t261 == null ?{self::Number?} null : self::ClassExtension|get#property(#t261{self::Class}), v == null);
+  self::expect(n1, let final self::Class? #t262 = v in #t262 == null ?{self::Number?} null : let final self::Number #t263 = self::NumberExtension|+(self::ClassExtension|get#property(#t262{self::Class}), n1) in let final void #t264 = self::ClassExtension|set#property(#t262{self::Class}, #t263) in #t263, v == null);
+  self::expect(n2, let final self::Class? #t265 = v in #t265 == null ?{self::Number?} null : let final self::Number #t266 = self::NumberExtension|+(self::ClassExtension|get#property(#t265{self::Class}), n1) in let final void #t267 = self::ClassExtension|set#property(#t265{self::Class}, #t266) in #t266, v == null);
+  self::expect(n0, let final self::Class? #t268 = v in #t268 == null ?{self::Number?} null : let final self::Number #t269 = self::NumberExtension|-(self::ClassExtension|get#property(#t268{self::Class}), n2) in let final void #t270 = self::ClassExtension|set#property(#t268{self::Class}, #t269) in #t269, v == null);
+  self::expect(n1, let final self::Class? #t271 = v in #t271 == null ?{self::Number?} null : let final self::Number #t272 = self::NumberExtension|+(self::ClassExtension|get#property(#t271{self::Class}), n1) in let final void #t273 = self::ClassExtension|set#property(#t271{self::Class}, #t272) in #t272, v == null);
+  self::expect(n0, let final self::Class? #t274 = v in #t274 == null ?{self::Number?} null : let final self::Number #t275 = self::NumberExtension|-(self::ClassExtension|get#property(#t274{self::Class}), n1) in let final void #t276 = self::ClassExtension|set#property(#t274{self::Class}, #t275) in #t275, v == null);
+  self::expect(n1, let final self::Class? #t277 = v in #t277 == null ?{self::Number?} null : let final self::Number #t278 = self::NumberExtension|+(self::ClassExtension|get#property(#t277{self::Class}), 1) in let final void #t279 = self::ClassExtension|set#property(#t277{self::Class}, #t278) in #t278, v == null);
+  self::expect(n0, let final self::Class? #t280 = v in #t280 == null ?{self::Number?} null : let final self::Number #t281 = self::NumberExtension|-(self::ClassExtension|get#property(#t280{self::Class}), 1) in let final void #t282 = self::ClassExtension|set#property(#t280{self::Class}, #t281) in #t281, v == null);
+  self::expect(n0, let final self::Class? #t283 = v in #t283 == null ?{self::Number?} null : let final self::Number #t284 = self::ClassExtension|get#property(#t283{self::Class}) in let final self::Number #t285 = let final self::Number #t286 = self::NumberExtension|+(#t284, 1) in let final void #t287 = self::ClassExtension|set#property(#t283{self::Class}, #t286) in #t286 in #t284, v == null);
+  self::expect(n1, let final self::Class? #t288 = v in #t288 == null ?{self::Number?} null : let final self::Number #t289 = self::ClassExtension|get#property(#t288{self::Class}) in let final self::Number #t290 = let final self::Number #t291 = self::NumberExtension|-(#t289, 1) in let final void #t292 = self::ClassExtension|set#property(#t288{self::Class}, #t291) in #t291 in #t289, v == null);
+  self::expect(n0, let final self::Class? #t293 = v in #t293 == null ?{self::Number?} null : self::ClassExtension|get#property(#t293{self::Class}), v == null);
+  self::expect(n0, let final self::Class? #t294 = v in #t294 == null ?{self::Number?} null : self::ClassExtension|get#property(#t294{self::Class}), v == null);
+  let final self::Class? #t295 = v in #t295 == null ?{self::Number?} null : self::ClassExtension|set#property(#t295{self::Class}, self::NumberExtension|+(self::ClassExtension|get#property(#t295{self::Class}), n1));
+  self::expect(n1, let final self::Class? #t296 = v in #t296 == null ?{self::Number?} null : self::ClassExtension|get#property(#t296{self::Class}), v == null);
+  let final self::Class? #t297 = v in #t297 == null ?{self::Number?} null : self::ClassExtension|set#property(#t297{self::Class}, self::NumberExtension|+(self::ClassExtension|get#property(#t297{self::Class}), n1));
+  self::expect(n2, let final self::Class? #t298 = v in #t298 == null ?{self::Number?} null : self::ClassExtension|get#property(#t298{self::Class}), v == null);
+  let final self::Class? #t299 = v in #t299 == null ?{self::Number?} null : self::ClassExtension|set#property(#t299{self::Class}, self::NumberExtension|-(self::ClassExtension|get#property(#t299{self::Class}), n2));
+  self::expect(n0, let final self::Class? #t300 = v in #t300 == null ?{self::Number?} null : self::ClassExtension|get#property(#t300{self::Class}), v == null);
+  let final self::Class? #t301 = v in #t301 == null ?{self::Number?} null : self::ClassExtension|set#property(#t301{self::Class}, self::NumberExtension|+(self::ClassExtension|get#property(#t301{self::Class}), n1));
+  self::expect(n1, let final self::Class? #t302 = v in #t302 == null ?{self::Number?} null : self::ClassExtension|get#property(#t302{self::Class}), v == null);
+  let final self::Class? #t303 = v in #t303 == null ?{self::Number?} null : self::ClassExtension|set#property(#t303{self::Class}, self::NumberExtension|-(self::ClassExtension|get#property(#t303{self::Class}), n1));
+  self::expect(n0, let final self::Class? #t304 = v in #t304 == null ?{self::Number?} null : self::ClassExtension|get#property(#t304{self::Class}), v == null);
+  let final self::Class? #t305 = v in #t305 == null ?{self::Number?} null : let final self::Number #t306 = self::NumberExtension|+(self::ClassExtension|get#property(#t305{self::Class}), 1) in let final void #t307 = self::ClassExtension|set#property(#t305{self::Class}, #t306) in #t306;
+  self::expect(n1, let final self::Class? #t308 = v in #t308 == null ?{self::Number?} null : self::ClassExtension|get#property(#t308{self::Class}), v == null);
+  let final self::Class? #t309 = v in #t309 == null ?{self::Number?} null : let final self::Number #t310 = self::NumberExtension|-(self::ClassExtension|get#property(#t309{self::Class}), 1) in let final void #t311 = self::ClassExtension|set#property(#t309{self::Class}, #t310) in #t310;
+  self::expect(n0, let final self::Class? #t312 = v in #t312 == null ?{self::Number?} null : self::ClassExtension|get#property(#t312{self::Class}), v == null);
+  let final self::Class? #t313 = v in #t313 == null ?{self::Number?} null : self::ClassExtension|set#property(#t313{self::Class}, self::NumberExtension|+(self::ClassExtension|get#property(#t313{self::Class}), 1));
+  self::expect(n1, let final self::Class? #t314 = v in #t314 == null ?{self::Number?} null : self::ClassExtension|get#property(#t314{self::Class}), v == null);
+  let final self::Class? #t315 = v in #t315 == null ?{self::Number?} null : self::ClassExtension|set#property(#t315{self::Class}, self::NumberExtension|-(self::ClassExtension|get#property(#t315{self::Class}), 1));
+  self::expect(n0, let final self::Class? #t316 = v in #t316 == null ?{self::Number?} null : self::ClassExtension|get#property(#t316{self::Class}), v == null);
 }
-static method testExplicitNullAwareIntProperties(self::IntClass* v) → dynamic {
-  core::int* n0 = 0;
-  core::int* n1 = 1;
-  core::int* n2 = 2;
-  self::expect(n0, let final self::IntClass* #t317 = v in #t317 == null ?{core::int*} null : self::IntClassExtension|get#property(#t317), v == null);
-  self::expect(n1, let final self::IntClass* #t318 = v in #t318 == null ?{core::int*} null : let final core::int* #t319 = self::IntClassExtension|get#property(#t318).{core::num::+}(n1){(core::num*) →* core::int*} in let final void #t320 = self::IntClassExtension|set#property(#t318, #t319) in #t319, v == null);
-  self::expect(n2, let final self::IntClass* #t321 = v in #t321 == null ?{core::int*} null : let final core::int* #t322 = self::IntClassExtension|get#property(#t321).{core::num::+}(n1){(core::num*) →* core::int*} in let final void #t323 = self::IntClassExtension|set#property(#t321, #t322) in #t322, v == null);
-  self::expect(n0, let final self::IntClass* #t324 = v in #t324 == null ?{core::int*} null : let final core::int* #t325 = self::IntClassExtension|get#property(#t324).{core::num::-}(n2){(core::num*) →* core::int*} in let final void #t326 = self::IntClassExtension|set#property(#t324, #t325) in #t325, v == null);
-  self::expect(n1, let final self::IntClass* #t327 = v in #t327 == null ?{core::int*} null : let final core::int* #t328 = self::IntClassExtension|get#property(#t327).{core::num::+}(n1){(core::num*) →* core::int*} in let final void #t329 = self::IntClassExtension|set#property(#t327, #t328) in #t328, v == null);
-  self::expect(n0, let final self::IntClass* #t330 = v in #t330 == null ?{core::int*} null : let final core::int* #t331 = self::IntClassExtension|get#property(#t330).{core::num::-}(n1){(core::num*) →* core::int*} in let final void #t332 = self::IntClassExtension|set#property(#t330, #t331) in #t331, v == null);
-  self::expect(n1, let final self::IntClass* #t333 = v in #t333 == null ?{core::int*} null : let final core::int* #t334 = self::IntClassExtension|get#property(#t333).{core::num::+}(1){(core::num*) →* core::int*} in let final void #t335 = self::IntClassExtension|set#property(#t333, #t334) in #t334, v == null);
-  self::expect(n0, let final self::IntClass* #t336 = v in #t336 == null ?{core::int*} null : let final core::int* #t337 = self::IntClassExtension|get#property(#t336).{core::num::-}(1){(core::num*) →* core::int*} in let final void #t338 = self::IntClassExtension|set#property(#t336, #t337) in #t337, v == null);
-  self::expect(n0, let final self::IntClass* #t339 = v in #t339 == null ?{core::int*} null : let final core::int* #t340 = self::IntClassExtension|get#property(#t339) in let final core::int* #t341 = let final core::int* #t342 = #t340.{core::num::+}(1){(core::num*) →* core::int*} in let final void #t343 = self::IntClassExtension|set#property(#t339, #t342) in #t342 in #t340, v == null);
-  self::expect(n1, let final self::IntClass* #t344 = v in #t344 == null ?{core::int*} null : let final core::int* #t345 = self::IntClassExtension|get#property(#t344) in let final core::int* #t346 = let final core::int* #t347 = #t345.{core::num::-}(1){(core::num*) →* core::int*} in let final void #t348 = self::IntClassExtension|set#property(#t344, #t347) in #t347 in #t345, v == null);
-  self::expect(n0, let final self::IntClass* #t349 = v in #t349 == null ?{core::int*} null : self::IntClassExtension|get#property(#t349), v == null);
-  self::expect(n0, let final self::IntClass* #t350 = v in #t350 == null ?{core::int*} null : self::IntClassExtension|get#property(#t350), v == null);
-  let final self::IntClass* #t351 = v in #t351 == null ?{core::int*} null : self::IntClassExtension|set#property(#t351, self::IntClassExtension|get#property(#t351).{core::num::+}(n1){(core::num*) →* core::int*});
-  self::expect(n1, let final self::IntClass* #t352 = v in #t352 == null ?{core::int*} null : self::IntClassExtension|get#property(#t352), v == null);
-  let final self::IntClass* #t353 = v in #t353 == null ?{core::int*} null : self::IntClassExtension|set#property(#t353, self::IntClassExtension|get#property(#t353).{core::num::+}(n1){(core::num*) →* core::int*});
-  self::expect(n2, let final self::IntClass* #t354 = v in #t354 == null ?{core::int*} null : self::IntClassExtension|get#property(#t354), v == null);
-  let final self::IntClass* #t355 = v in #t355 == null ?{core::int*} null : self::IntClassExtension|set#property(#t355, self::IntClassExtension|get#property(#t355).{core::num::-}(n2){(core::num*) →* core::int*});
-  self::expect(n0, let final self::IntClass* #t356 = v in #t356 == null ?{core::int*} null : self::IntClassExtension|get#property(#t356), v == null);
-  let final self::IntClass* #t357 = v in #t357 == null ?{core::int*} null : self::IntClassExtension|set#property(#t357, self::IntClassExtension|get#property(#t357).{core::num::+}(n1){(core::num*) →* core::int*});
-  self::expect(n1, let final self::IntClass* #t358 = v in #t358 == null ?{core::int*} null : self::IntClassExtension|get#property(#t358), v == null);
-  let final self::IntClass* #t359 = v in #t359 == null ?{core::int*} null : self::IntClassExtension|set#property(#t359, self::IntClassExtension|get#property(#t359).{core::num::-}(n1){(core::num*) →* core::int*});
-  self::expect(n0, let final self::IntClass* #t360 = v in #t360 == null ?{core::int*} null : self::IntClassExtension|get#property(#t360), v == null);
-  let final self::IntClass* #t361 = v in #t361 == null ?{core::int*} null : let final core::int* #t362 = self::IntClassExtension|get#property(#t361).{core::num::+}(1){(core::num*) →* core::int*} in let final void #t363 = self::IntClassExtension|set#property(#t361, #t362) in #t362;
-  self::expect(n1, let final self::IntClass* #t364 = v in #t364 == null ?{core::int*} null : self::IntClassExtension|get#property(#t364), v == null);
-  let final self::IntClass* #t365 = v in #t365 == null ?{core::int*} null : let final core::int* #t366 = self::IntClassExtension|get#property(#t365).{core::num::-}(1){(core::num*) →* core::int*} in let final void #t367 = self::IntClassExtension|set#property(#t365, #t366) in #t366;
-  self::expect(n0, let final self::IntClass* #t368 = v in #t368 == null ?{core::int*} null : self::IntClassExtension|get#property(#t368), v == null);
-  let final self::IntClass* #t369 = v in #t369 == null ?{core::int*} null : self::IntClassExtension|set#property(#t369, self::IntClassExtension|get#property(#t369).{core::num::+}(1){(core::num*) →* core::int*});
-  self::expect(n1, let final self::IntClass* #t370 = v in #t370 == null ?{core::int*} null : self::IntClassExtension|get#property(#t370), v == null);
-  let final self::IntClass* #t371 = v in #t371 == null ?{core::int*} null : self::IntClassExtension|set#property(#t371, self::IntClassExtension|get#property(#t371).{core::num::-}(1){(core::num*) →* core::int*});
-  self::expect(n0, let final self::IntClass* #t372 = v in #t372 == null ?{core::int*} null : self::IntClassExtension|get#property(#t372), v == null);
+static method testExplicitNullAwareIntProperties(self::IntClass? v) → dynamic {
+  core::int n0 = 0;
+  core::int n1 = 1;
+  core::int n2 = 2;
+  self::expect(n0, let final self::IntClass? #t317 = v in #t317 == null ?{core::int?} null : self::IntClassExtension|get#property(#t317{self::IntClass}), v == null);
+  self::expect(n1, let final self::IntClass? #t318 = v in #t318 == null ?{core::int?} null : let final core::int #t319 = self::IntClassExtension|get#property(#t318{self::IntClass}).{core::num::+}(n1){(core::num) → core::int} in let final void #t320 = self::IntClassExtension|set#property(#t318{self::IntClass}, #t319) in #t319, v == null);
+  self::expect(n2, let final self::IntClass? #t321 = v in #t321 == null ?{core::int?} null : let final core::int #t322 = self::IntClassExtension|get#property(#t321{self::IntClass}).{core::num::+}(n1){(core::num) → core::int} in let final void #t323 = self::IntClassExtension|set#property(#t321{self::IntClass}, #t322) in #t322, v == null);
+  self::expect(n0, let final self::IntClass? #t324 = v in #t324 == null ?{core::int?} null : let final core::int #t325 = self::IntClassExtension|get#property(#t324{self::IntClass}).{core::num::-}(n2){(core::num) → core::int} in let final void #t326 = self::IntClassExtension|set#property(#t324{self::IntClass}, #t325) in #t325, v == null);
+  self::expect(n1, let final self::IntClass? #t327 = v in #t327 == null ?{core::int?} null : let final core::int #t328 = self::IntClassExtension|get#property(#t327{self::IntClass}).{core::num::+}(n1){(core::num) → core::int} in let final void #t329 = self::IntClassExtension|set#property(#t327{self::IntClass}, #t328) in #t328, v == null);
+  self::expect(n0, let final self::IntClass? #t330 = v in #t330 == null ?{core::int?} null : let final core::int #t331 = self::IntClassExtension|get#property(#t330{self::IntClass}).{core::num::-}(n1){(core::num) → core::int} in let final void #t332 = self::IntClassExtension|set#property(#t330{self::IntClass}, #t331) in #t331, v == null);
+  self::expect(n1, let final self::IntClass? #t333 = v in #t333 == null ?{core::int?} null : let final core::int #t334 = self::IntClassExtension|get#property(#t333{self::IntClass}).{core::num::+}(1){(core::num) → core::int} in let final void #t335 = self::IntClassExtension|set#property(#t333{self::IntClass}, #t334) in #t334, v == null);
+  self::expect(n0, let final self::IntClass? #t336 = v in #t336 == null ?{core::int?} null : let final core::int #t337 = self::IntClassExtension|get#property(#t336{self::IntClass}).{core::num::-}(1){(core::num) → core::int} in let final void #t338 = self::IntClassExtension|set#property(#t336{self::IntClass}, #t337) in #t337, v == null);
+  self::expect(n0, let final self::IntClass? #t339 = v in #t339 == null ?{core::int?} null : let final core::int #t340 = self::IntClassExtension|get#property(#t339{self::IntClass}) in let final core::int #t341 = let final core::int #t342 = #t340.{core::num::+}(1){(core::num) → core::int} in let final void #t343 = self::IntClassExtension|set#property(#t339{self::IntClass}, #t342) in #t342 in #t340, v == null);
+  self::expect(n1, let final self::IntClass? #t344 = v in #t344 == null ?{core::int?} null : let final core::int #t345 = self::IntClassExtension|get#property(#t344{self::IntClass}) in let final core::int #t346 = let final core::int #t347 = #t345.{core::num::-}(1){(core::num) → core::int} in let final void #t348 = self::IntClassExtension|set#property(#t344{self::IntClass}, #t347) in #t347 in #t345, v == null);
+  self::expect(n0, let final self::IntClass? #t349 = v in #t349 == null ?{core::int?} null : self::IntClassExtension|get#property(#t349{self::IntClass}), v == null);
+  self::expect(n0, let final self::IntClass? #t350 = v in #t350 == null ?{core::int?} null : self::IntClassExtension|get#property(#t350{self::IntClass}), v == null);
+  let final self::IntClass? #t351 = v in #t351 == null ?{core::int?} null : self::IntClassExtension|set#property(#t351{self::IntClass}, self::IntClassExtension|get#property(#t351{self::IntClass}).{core::num::+}(n1){(core::num) → core::int});
+  self::expect(n1, let final self::IntClass? #t352 = v in #t352 == null ?{core::int?} null : self::IntClassExtension|get#property(#t352{self::IntClass}), v == null);
+  let final self::IntClass? #t353 = v in #t353 == null ?{core::int?} null : self::IntClassExtension|set#property(#t353{self::IntClass}, self::IntClassExtension|get#property(#t353{self::IntClass}).{core::num::+}(n1){(core::num) → core::int});
+  self::expect(n2, let final self::IntClass? #t354 = v in #t354 == null ?{core::int?} null : self::IntClassExtension|get#property(#t354{self::IntClass}), v == null);
+  let final self::IntClass? #t355 = v in #t355 == null ?{core::int?} null : self::IntClassExtension|set#property(#t355{self::IntClass}, self::IntClassExtension|get#property(#t355{self::IntClass}).{core::num::-}(n2){(core::num) → core::int});
+  self::expect(n0, let final self::IntClass? #t356 = v in #t356 == null ?{core::int?} null : self::IntClassExtension|get#property(#t356{self::IntClass}), v == null);
+  let final self::IntClass? #t357 = v in #t357 == null ?{core::int?} null : self::IntClassExtension|set#property(#t357{self::IntClass}, self::IntClassExtension|get#property(#t357{self::IntClass}).{core::num::+}(n1){(core::num) → core::int});
+  self::expect(n1, let final self::IntClass? #t358 = v in #t358 == null ?{core::int?} null : self::IntClassExtension|get#property(#t358{self::IntClass}), v == null);
+  let final self::IntClass? #t359 = v in #t359 == null ?{core::int?} null : self::IntClassExtension|set#property(#t359{self::IntClass}, self::IntClassExtension|get#property(#t359{self::IntClass}).{core::num::-}(n1){(core::num) → core::int});
+  self::expect(n0, let final self::IntClass? #t360 = v in #t360 == null ?{core::int?} null : self::IntClassExtension|get#property(#t360{self::IntClass}), v == null);
+  let final self::IntClass? #t361 = v in #t361 == null ?{core::int?} null : let final core::int #t362 = self::IntClassExtension|get#property(#t361{self::IntClass}).{core::num::+}(1){(core::num) → core::int} in let final void #t363 = self::IntClassExtension|set#property(#t361{self::IntClass}, #t362) in #t362;
+  self::expect(n1, let final self::IntClass? #t364 = v in #t364 == null ?{core::int?} null : self::IntClassExtension|get#property(#t364{self::IntClass}), v == null);
+  let final self::IntClass? #t365 = v in #t365 == null ?{core::int?} null : let final core::int #t366 = self::IntClassExtension|get#property(#t365{self::IntClass}).{core::num::-}(1){(core::num) → core::int} in let final void #t367 = self::IntClassExtension|set#property(#t365{self::IntClass}, #t366) in #t366;
+  self::expect(n0, let final self::IntClass? #t368 = v in #t368 == null ?{core::int?} null : self::IntClassExtension|get#property(#t368{self::IntClass}), v == null);
+  let final self::IntClass? #t369 = v in #t369 == null ?{core::int?} null : self::IntClassExtension|set#property(#t369{self::IntClass}, self::IntClassExtension|get#property(#t369{self::IntClass}).{core::num::+}(1){(core::num) → core::int});
+  self::expect(n1, let final self::IntClass? #t370 = v in #t370 == null ?{core::int?} null : self::IntClassExtension|get#property(#t370{self::IntClass}), v == null);
+  let final self::IntClass? #t371 = v in #t371 == null ?{core::int?} null : self::IntClassExtension|set#property(#t371{self::IntClass}, self::IntClassExtension|get#property(#t371{self::IntClass}).{core::num::-}(1){(core::num) → core::int});
+  self::expect(n0, let final self::IntClass? #t372 = v in #t372 == null ?{core::int?} null : self::IntClassExtension|get#property(#t372{self::IntClass}), v == null);
 }
 static method expect(dynamic expected, dynamic actual, [dynamic expectNull = #C1]) → dynamic {
-  if(expectNull as{TypeError,ForDynamic} core::bool*) {
+  if(expectNull as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool) {
     expected = null;
   }
-  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual)) {
     throw "Mismatch: expected=${expected}, actual=${actual}";
   }
 }
diff --git a/pkg/front_end/testcases/extensions/conflict_with_object.dart b/pkg/front_end/testcases/extensions/conflict_with_object.dart
index 41b089d..fb9cc65 100644
--- a/pkg/front_end/testcases/extensions/conflict_with_object.dart
+++ b/pkg/front_end/testcases/extensions/conflict_with_object.dart
@@ -1,11 +1,11 @@
 // Copyright (c) 2019, 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.
-// @dart=2.9
+
 extension Extension on String {
   int get noSuchMethod => 42;
   void set hashCode(int value) {}
-  int runtimeType() {}
+  int runtimeType() => 0;
   operator ==(other) => false;
   static String toString() => 'Foo';
 }
diff --git a/pkg/front_end/testcases/extensions/conflict_with_object.dart.textual_outline.expect b/pkg/front_end/testcases/extensions/conflict_with_object.dart.textual_outline.expect
index 2e92f04..2c7a9fa 100644
--- a/pkg/front_end/testcases/extensions/conflict_with_object.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/extensions/conflict_with_object.dart.textual_outline.expect
@@ -1,8 +1,7 @@
-// @dart = 2.9
 extension Extension on String {
   int get noSuchMethod => 42;
   void set hashCode(int value) {}
-  int runtimeType() {}
+  int runtimeType() => 0;
   operator ==(other) => false;
   static String toString() => 'Foo';
 }
diff --git a/pkg/front_end/testcases/extensions/conflict_with_object.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/extensions/conflict_with_object.dart.textual_outline_modelled.expect
index a4cefaa..5ce2bf8 100644
--- a/pkg/front_end/testcases/extensions/conflict_with_object.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/extensions/conflict_with_object.dart.textual_outline_modelled.expect
@@ -1,10 +1,9 @@
-// @dart = 2.9
 errors() {}
 expect(expected, actual) {}
 
 extension Extension on String {
   int get noSuchMethod => 42;
-  int runtimeType() {}
+  int runtimeType() => 0;
   operator ==(other) => false;
   static String toString() => 'Foo';
   void set hashCode(int value) {}
diff --git a/pkg/front_end/testcases/extensions/conflict_with_object.dart.weak.expect b/pkg/front_end/testcases/extensions/conflict_with_object.dart.weak.expect
index 101c651..ec46c28 100644
--- a/pkg/front_end/testcases/extensions/conflict_with_object.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/conflict_with_object.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -7,7 +7,7 @@
 //           ^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/extensions/conflict_with_object.dart:8:7: Error: This extension member conflicts with Object member 'runtimeType'.
-//   int runtimeType() {}
+//   int runtimeType() => 0;
 //       ^^^^^^^^^^^
 //
 // pkg/front_end/testcases/extensions/conflict_with_object.dart:9:12: Error: This extension member conflicts with Object member '=='.
@@ -40,7 +40,7 @@
 import self as self;
 import "dart:core" as core;
 
-extension Extension on core::String* {
+extension Extension on core::String {
   get noSuchMethod = self::Extension|get#noSuchMethod;
   method runtimeType = self::Extension|runtimeType;
   tearoff runtimeType = self::Extension|get#runtimeType;
@@ -48,33 +48,34 @@
   static method toString = self::Extension|toString;
   set hashCode = self::Extension|set#hashCode;
 }
-static method Extension|get#noSuchMethod(lowered 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(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|==(lowered final core::String* #this, dynamic other) → dynamic
+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
+  return 0;
+static method Extension|get#runtimeType(lowered final core::String #this) → () → core::int
+  return () → core::int => self::Extension|runtimeType(#this);
+static method Extension|==(lowered final core::String #this, dynamic other) → dynamic
   return false;
-static method Extension|toString() → core::String*
+static method Extension|toString() → core::String
   return "Foo";
 static method main() → dynamic {
-  core::int* value;
-  self::expect(true, "".{core::Object::noSuchMethod}{(core::Invocation*) →* dynamic} is core::Function*);
+  core::int value;
+  self::expect(true, "".{core::Object::noSuchMethod}{(core::Invocation) → dynamic} is{ForNonNullableByDefault} core::Function);
   value = self::Extension|get#noSuchMethod("");
   self::Extension|set#hashCode("", 42);
-  self::expect(true, "".{core::Object::runtimeType}{core::Type*} is core::Type*);
-  self::expect(true, self::Extension|get#runtimeType("") is core::Function*);
+  self::expect(true, "".{core::Object::runtimeType}{core::Type} is{ForNonNullableByDefault} core::Type);
+  self::expect(true, self::Extension|get#runtimeType("") is{ForNonNullableByDefault} core::Function);
   value = self::Extension|runtimeType("");
-  self::expect(true, "" =={core::String::==}{(core::Object*) →* core::bool*} "");
+  self::expect(true, "" =={core::String::==}{(core::Object) → core::bool} "");
   self::expect("Foo", self::Extension|toString());
 }
 static method errors() → dynamic {
-  core::int* value;
+  core::int value;
   value = invalid-expression "pkg/front_end/testcases/extensions/conflict_with_object.dart:27:14: Error: A value of type 'dynamic Function(Invocation)' can't be assigned to a variable of type 'int'.
  - 'Invocation' is from 'dart:core'.
   value = \"\".noSuchMethod;
-             ^" in "".{core::Object::noSuchMethod}{(core::Invocation*) →* dynamic} as{TypeError} core::int*;
+             ^" in "".{core::Object::noSuchMethod}{(core::Invocation) → dynamic} as{TypeError,ForNonNullableByDefault} core::int;
   invalid-expression "pkg/front_end/testcases/extensions/conflict_with_object.dart:28:6: Error: The setter 'hashCode' isn't defined for the class 'String'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'hashCode'.
   \"\".hashCode = 42;
@@ -82,10 +83,10 @@
   value = invalid-expression "pkg/front_end/testcases/extensions/conflict_with_object.dart:29:14: Error: A value of type 'Type' can't be assigned to a variable of type 'int'.
  - 'Type' is from 'dart:core'.
   value = \"\".runtimeType;
-             ^" in "".{core::Object::runtimeType}{core::Type*} as{TypeError} core::int*;
+             ^" in "".{core::Object::runtimeType}{core::Type} as{TypeError,ForNonNullableByDefault} core::int;
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual)) {
     throw "Mismatch: expected=${expected}, actual=${actual}";
   }
 }
diff --git a/pkg/front_end/testcases/extensions/conflict_with_object.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/conflict_with_object.dart.weak.modular.expect
index 101c651..ec46c28 100644
--- a/pkg/front_end/testcases/extensions/conflict_with_object.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/extensions/conflict_with_object.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -7,7 +7,7 @@
 //           ^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/extensions/conflict_with_object.dart:8:7: Error: This extension member conflicts with Object member 'runtimeType'.
-//   int runtimeType() {}
+//   int runtimeType() => 0;
 //       ^^^^^^^^^^^
 //
 // pkg/front_end/testcases/extensions/conflict_with_object.dart:9:12: Error: This extension member conflicts with Object member '=='.
@@ -40,7 +40,7 @@
 import self as self;
 import "dart:core" as core;
 
-extension Extension on core::String* {
+extension Extension on core::String {
   get noSuchMethod = self::Extension|get#noSuchMethod;
   method runtimeType = self::Extension|runtimeType;
   tearoff runtimeType = self::Extension|get#runtimeType;
@@ -48,33 +48,34 @@
   static method toString = self::Extension|toString;
   set hashCode = self::Extension|set#hashCode;
 }
-static method Extension|get#noSuchMethod(lowered 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(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|==(lowered final core::String* #this, dynamic other) → dynamic
+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
+  return 0;
+static method Extension|get#runtimeType(lowered final core::String #this) → () → core::int
+  return () → core::int => self::Extension|runtimeType(#this);
+static method Extension|==(lowered final core::String #this, dynamic other) → dynamic
   return false;
-static method Extension|toString() → core::String*
+static method Extension|toString() → core::String
   return "Foo";
 static method main() → dynamic {
-  core::int* value;
-  self::expect(true, "".{core::Object::noSuchMethod}{(core::Invocation*) →* dynamic} is core::Function*);
+  core::int value;
+  self::expect(true, "".{core::Object::noSuchMethod}{(core::Invocation) → dynamic} is{ForNonNullableByDefault} core::Function);
   value = self::Extension|get#noSuchMethod("");
   self::Extension|set#hashCode("", 42);
-  self::expect(true, "".{core::Object::runtimeType}{core::Type*} is core::Type*);
-  self::expect(true, self::Extension|get#runtimeType("") is core::Function*);
+  self::expect(true, "".{core::Object::runtimeType}{core::Type} is{ForNonNullableByDefault} core::Type);
+  self::expect(true, self::Extension|get#runtimeType("") is{ForNonNullableByDefault} core::Function);
   value = self::Extension|runtimeType("");
-  self::expect(true, "" =={core::String::==}{(core::Object*) →* core::bool*} "");
+  self::expect(true, "" =={core::String::==}{(core::Object) → core::bool} "");
   self::expect("Foo", self::Extension|toString());
 }
 static method errors() → dynamic {
-  core::int* value;
+  core::int value;
   value = invalid-expression "pkg/front_end/testcases/extensions/conflict_with_object.dart:27:14: Error: A value of type 'dynamic Function(Invocation)' can't be assigned to a variable of type 'int'.
  - 'Invocation' is from 'dart:core'.
   value = \"\".noSuchMethod;
-             ^" in "".{core::Object::noSuchMethod}{(core::Invocation*) →* dynamic} as{TypeError} core::int*;
+             ^" in "".{core::Object::noSuchMethod}{(core::Invocation) → dynamic} as{TypeError,ForNonNullableByDefault} core::int;
   invalid-expression "pkg/front_end/testcases/extensions/conflict_with_object.dart:28:6: Error: The setter 'hashCode' isn't defined for the class 'String'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'hashCode'.
   \"\".hashCode = 42;
@@ -82,10 +83,10 @@
   value = invalid-expression "pkg/front_end/testcases/extensions/conflict_with_object.dart:29:14: Error: A value of type 'Type' can't be assigned to a variable of type 'int'.
  - 'Type' is from 'dart:core'.
   value = \"\".runtimeType;
-             ^" in "".{core::Object::runtimeType}{core::Type*} as{TypeError} core::int*;
+             ^" in "".{core::Object::runtimeType}{core::Type} as{TypeError,ForNonNullableByDefault} core::int;
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual)) {
     throw "Mismatch: expected=${expected}, actual=${actual}";
   }
 }
diff --git a/pkg/front_end/testcases/extensions/conflict_with_object.dart.weak.outline.expect b/pkg/front_end/testcases/extensions/conflict_with_object.dart.weak.outline.expect
index 500096d..1ec3424 100644
--- a/pkg/front_end/testcases/extensions/conflict_with_object.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extensions/conflict_with_object.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -7,7 +7,7 @@
 //           ^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/extensions/conflict_with_object.dart:8:7: Error: This extension member conflicts with Object member 'runtimeType'.
-//   int runtimeType() {}
+//   int runtimeType() => 0;
 //       ^^^^^^^^^^^
 //
 // pkg/front_end/testcases/extensions/conflict_with_object.dart:9:12: Error: This extension member conflicts with Object member '=='.
@@ -25,7 +25,7 @@
 import self as self;
 import "dart:core" as core;
 
-extension Extension on core::String* {
+extension Extension on core::String {
   get noSuchMethod = self::Extension|get#noSuchMethod;
   method runtimeType = self::Extension|runtimeType;
   tearoff runtimeType = self::Extension|get#runtimeType;
@@ -33,17 +33,17 @@
   static method toString = self::Extension|toString;
   set hashCode = self::Extension|set#hashCode;
 }
-static method Extension|get#noSuchMethod(lowered final core::String* #this) → core::int*
+static method Extension|get#noSuchMethod(lowered final core::String #this) → core::int
   ;
-static method Extension|set#hashCode(lowered 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(lowered final core::String* #this) → core::int*
+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|==(lowered final core::String* #this, dynamic other) → dynamic
+static method Extension|get#runtimeType(lowered final core::String #this) → () → core::int
+  return () → core::int => self::Extension|runtimeType(#this);
+static method Extension|==(lowered final core::String #this, dynamic other) → dynamic
   ;
-static method Extension|toString() → core::String*
+static method Extension|toString() → core::String
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/extensions/conflict_with_object.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/conflict_with_object.dart.weak.transformed.expect
index bfce2e3..a49ebae 100644
--- a/pkg/front_end/testcases/extensions/conflict_with_object.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/conflict_with_object.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -7,7 +7,7 @@
 //           ^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/extensions/conflict_with_object.dart:8:7: Error: This extension member conflicts with Object member 'runtimeType'.
-//   int runtimeType() {}
+//   int runtimeType() => 0;
 //       ^^^^^^^^^^^
 //
 // pkg/front_end/testcases/extensions/conflict_with_object.dart:9:12: Error: This extension member conflicts with Object member '=='.
@@ -40,7 +40,7 @@
 import self as self;
 import "dart:core" as core;
 
-extension Extension on core::String* {
+extension Extension on core::String {
   get noSuchMethod = self::Extension|get#noSuchMethod;
   method runtimeType = self::Extension|runtimeType;
   tearoff runtimeType = self::Extension|get#runtimeType;
@@ -48,33 +48,34 @@
   static method toString = self::Extension|toString;
   set hashCode = self::Extension|set#hashCode;
 }
-static method Extension|get#noSuchMethod(lowered 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(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|==(lowered final core::String* #this, dynamic other) → dynamic
+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
+  return 0;
+static method Extension|get#runtimeType(lowered final core::String #this) → () → core::int
+  return () → core::int => self::Extension|runtimeType(#this);
+static method Extension|==(lowered final core::String #this, dynamic other) → dynamic
   return false;
-static method Extension|toString() → core::String*
+static method Extension|toString() → core::String
   return "Foo";
 static method main() → dynamic {
-  core::int* value;
-  self::expect(true, "".{core::Object::noSuchMethod}{(core::Invocation*) →* dynamic} is core::Function*);
+  core::int value;
+  self::expect(true, "".{core::Object::noSuchMethod}{(core::Invocation) → dynamic} is{ForNonNullableByDefault} core::Function);
   value = self::Extension|get#noSuchMethod("");
   self::Extension|set#hashCode("", 42);
-  self::expect(true, "".{core::Object::runtimeType}{core::Type*} is core::Type*);
-  self::expect(true, self::Extension|get#runtimeType("") is core::Function*);
+  self::expect(true, "".{core::Object::runtimeType}{core::Type} is{ForNonNullableByDefault} core::Type);
+  self::expect(true, self::Extension|get#runtimeType("") is{ForNonNullableByDefault} core::Function);
   value = self::Extension|runtimeType("");
-  self::expect(true, "" =={core::String::==}{(core::Object*) →* core::bool*} "");
+  self::expect(true, "" =={core::String::==}{(core::Object) → core::bool} "");
   self::expect("Foo", self::Extension|toString());
 }
 static method errors() → dynamic {
-  core::int* value;
+  core::int value;
   value = invalid-expression "pkg/front_end/testcases/extensions/conflict_with_object.dart:27:14: Error: A value of type 'dynamic Function(Invocation)' can't be assigned to a variable of type 'int'.
  - 'Invocation' is from 'dart:core'.
   value = \"\".noSuchMethod;
-             ^" in "".{core::Object::noSuchMethod}{(core::Invocation*) →* dynamic} as{TypeError} core::int*;
+             ^" in "".{core::Object::noSuchMethod}{(core::Invocation) → dynamic} as{TypeError,ForNonNullableByDefault} core::int;
   invalid-expression "pkg/front_end/testcases/extensions/conflict_with_object.dart:28:6: Error: The setter 'hashCode' isn't defined for the class 'String'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'hashCode'.
   \"\".hashCode = 42;
@@ -82,10 +83,10 @@
   value = invalid-expression "pkg/front_end/testcases/extensions/conflict_with_object.dart:29:14: Error: A value of type 'Type' can't be assigned to a variable of type 'int'.
  - 'Type' is from 'dart:core'.
   value = \"\".runtimeType;
-             ^" in "".{core::Object::runtimeType}{core::Type*} as{TypeError} core::int*;
+             ^" in "".{core::Object::runtimeType}{core::Type} as{TypeError,ForNonNullableByDefault} core::int;
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual)) {
     throw "Mismatch: expected=${expected}, actual=${actual}";
   }
 }
diff --git a/pkg/front_end/testcases/extensions/conflicts.dart b/pkg/front_end/testcases/extensions/conflicts.dart
index 73581ca..b05aa28 100644
--- a/pkg/front_end/testcases/extensions/conflicts.dart
+++ b/pkg/front_end/testcases/extensions/conflicts.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2019, 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.
-// @dart=2.9
+
 class Class1 {
 }
 class Class2 {}
diff --git a/pkg/front_end/testcases/extensions/conflicts.dart.textual_outline.expect b/pkg/front_end/testcases/extensions/conflicts.dart.textual_outline.expect
index 2ecd835..0f53c9b 100644
--- a/pkg/front_end/testcases/extensions/conflicts.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/extensions/conflicts.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Class1 {}
 
 class Class2 {}
diff --git a/pkg/front_end/testcases/extensions/conflicts.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/extensions/conflicts.dart.textual_outline_modelled.expect
index e713b85..481736e 100644
--- a/pkg/front_end/testcases/extensions/conflicts.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/extensions/conflicts.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Class1 {}
 
 class Class2 {}
diff --git a/pkg/front_end/testcases/extensions/conflicts.dart.weak.expect b/pkg/front_end/testcases/extensions/conflicts.dart.weak.expect
index 3373345..e9568ce 100644
--- a/pkg/front_end/testcases/extensions/conflicts.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/conflicts.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -26,62 +26,42 @@
 import "dart:core" as core;
 
 class Class1 extends core::Object {
-  synthetic constructor •() → self::Class1*
+  synthetic constructor •() → self::Class1
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Class2 extends core::Object {
-  synthetic constructor •() → self::Class2*
+  synthetic constructor •() → self::Class2
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension DuplicateExtensionName on self::Class1* {
+extension DuplicateExtensionName on self::Class1 {
   method uniqueMethod1 = self::DuplicateExtensionName|uniqueMethod1;
   tearoff uniqueMethod1 = self::DuplicateExtensionName|get#uniqueMethod1;
   method duplicateMethodName2 = self::DuplicateExtensionName|duplicateMethodName2;
   tearoff duplicateMethodName2 = self::DuplicateExtensionName|get#duplicateMethodName2;
 }
-extension UniqueExtensionName on self::Class1* {
+extension UniqueExtensionName on self::Class1 {
   method duplicateMethodName1 = self::UniqueExtensionName|duplicateMethodName1;
   tearoff duplicateMethodName1 = self::UniqueExtensionName|get#duplicateMethodName1;
 }
-static method DuplicateExtensionName|uniqueMethod1(lowered final self::Class1* #this) → dynamic {}
-static method DuplicateExtensionName|get#uniqueMethod1(lowered 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(lowered final self::Class1* #this) → dynamic
+static method DuplicateExtensionName|duplicateMethodName2(lowered final self::Class1 #this) → dynamic
   return 1;
-static method DuplicateExtensionName|get#duplicateMethodName2(lowered 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(lowered final self::Class1* #this) → dynamic
+static method UniqueExtensionName|duplicateMethodName1(lowered final self::Class1 #this) → dynamic
   return 1;
-static method UniqueExtensionName|get#duplicateMethodName1(lowered 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::•();
+  self::Class1 c1 = new self::Class1::•();
   self::DuplicateExtensionName|uniqueMethod1(c1);
 }
 static method errors() → dynamic {
-  self::Class2* c2 = new self::Class2::•();
+  self::Class2 c2 = new self::Class2::•();
   invalid-expression "pkg/front_end/testcases/extensions/conflicts.dart:31:6: Error: The method 'uniqueMethod2' isn't defined for the class 'Class2'.
  - 'Class2' is from 'pkg/front_end/testcases/extensions/conflicts.dart'.
 Try correcting the name to the name of an existing method, or defining a method named 'uniqueMethod2'.
diff --git a/pkg/front_end/testcases/extensions/conflicts.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/conflicts.dart.weak.modular.expect
index 3373345..e9568ce 100644
--- a/pkg/front_end/testcases/extensions/conflicts.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/extensions/conflicts.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -26,62 +26,42 @@
 import "dart:core" as core;
 
 class Class1 extends core::Object {
-  synthetic constructor •() → self::Class1*
+  synthetic constructor •() → self::Class1
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Class2 extends core::Object {
-  synthetic constructor •() → self::Class2*
+  synthetic constructor •() → self::Class2
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension DuplicateExtensionName on self::Class1* {
+extension DuplicateExtensionName on self::Class1 {
   method uniqueMethod1 = self::DuplicateExtensionName|uniqueMethod1;
   tearoff uniqueMethod1 = self::DuplicateExtensionName|get#uniqueMethod1;
   method duplicateMethodName2 = self::DuplicateExtensionName|duplicateMethodName2;
   tearoff duplicateMethodName2 = self::DuplicateExtensionName|get#duplicateMethodName2;
 }
-extension UniqueExtensionName on self::Class1* {
+extension UniqueExtensionName on self::Class1 {
   method duplicateMethodName1 = self::UniqueExtensionName|duplicateMethodName1;
   tearoff duplicateMethodName1 = self::UniqueExtensionName|get#duplicateMethodName1;
 }
-static method DuplicateExtensionName|uniqueMethod1(lowered final self::Class1* #this) → dynamic {}
-static method DuplicateExtensionName|get#uniqueMethod1(lowered 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(lowered final self::Class1* #this) → dynamic
+static method DuplicateExtensionName|duplicateMethodName2(lowered final self::Class1 #this) → dynamic
   return 1;
-static method DuplicateExtensionName|get#duplicateMethodName2(lowered 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(lowered final self::Class1* #this) → dynamic
+static method UniqueExtensionName|duplicateMethodName1(lowered final self::Class1 #this) → dynamic
   return 1;
-static method UniqueExtensionName|get#duplicateMethodName1(lowered 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::•();
+  self::Class1 c1 = new self::Class1::•();
   self::DuplicateExtensionName|uniqueMethod1(c1);
 }
 static method errors() → dynamic {
-  self::Class2* c2 = new self::Class2::•();
+  self::Class2 c2 = new self::Class2::•();
   invalid-expression "pkg/front_end/testcases/extensions/conflicts.dart:31:6: Error: The method 'uniqueMethod2' isn't defined for the class 'Class2'.
  - 'Class2' is from 'pkg/front_end/testcases/extensions/conflicts.dart'.
 Try correcting the name to the name of an existing method, or defining a method named 'uniqueMethod2'.
diff --git a/pkg/front_end/testcases/extensions/conflicts.dart.weak.outline.expect b/pkg/front_end/testcases/extensions/conflicts.dart.weak.outline.expect
index 4e95f3b..ab3ac2b 100644
--- a/pkg/front_end/testcases/extensions/conflicts.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extensions/conflicts.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -20,54 +20,34 @@
 import "dart:core" as core;
 
 class Class1 extends core::Object {
-  synthetic constructor •() → self::Class1*
+  synthetic constructor •() → self::Class1
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Class2 extends core::Object {
-  synthetic constructor •() → self::Class2*
+  synthetic constructor •() → self::Class2
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension DuplicateExtensionName on self::Class1* {
+extension DuplicateExtensionName on self::Class1 {
   method uniqueMethod1 = self::DuplicateExtensionName|uniqueMethod1;
   tearoff uniqueMethod1 = self::DuplicateExtensionName|get#uniqueMethod1;
   method duplicateMethodName2 = self::DuplicateExtensionName|duplicateMethodName2;
   tearoff duplicateMethodName2 = self::DuplicateExtensionName|get#duplicateMethodName2;
 }
-extension UniqueExtensionName on self::Class1* {
+extension UniqueExtensionName on self::Class1 {
   method duplicateMethodName1 = self::UniqueExtensionName|duplicateMethodName1;
   tearoff duplicateMethodName1 = self::UniqueExtensionName|get#duplicateMethodName1;
 }
-static method DuplicateExtensionName|uniqueMethod1(lowered 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
+static method DuplicateExtensionName|get#uniqueMethod1(lowered final self::Class1 #this) → () → dynamic
   return () → dynamic => self::DuplicateExtensionName|uniqueMethod1(#this);
-static method DuplicateExtensionName|duplicateMethodName2(lowered final self::Class1* #this) → dynamic
+static method DuplicateExtensionName|duplicateMethodName2(lowered final self::Class1 #this) → dynamic
   ;
-static method DuplicateExtensionName|get#duplicateMethodName2(lowered 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(lowered final self::Class1* #this) → dynamic
+static method UniqueExtensionName|duplicateMethodName1(lowered final self::Class1 #this) → dynamic
   ;
-static method UniqueExtensionName|get#duplicateMethodName1(lowered 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.weak.transformed.expect b/pkg/front_end/testcases/extensions/conflicts.dart.weak.transformed.expect
index 3373345..e9568ce 100644
--- a/pkg/front_end/testcases/extensions/conflicts.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/conflicts.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -26,62 +26,42 @@
 import "dart:core" as core;
 
 class Class1 extends core::Object {
-  synthetic constructor •() → self::Class1*
+  synthetic constructor •() → self::Class1
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Class2 extends core::Object {
-  synthetic constructor •() → self::Class2*
+  synthetic constructor •() → self::Class2
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension DuplicateExtensionName on self::Class1* {
+extension DuplicateExtensionName on self::Class1 {
   method uniqueMethod1 = self::DuplicateExtensionName|uniqueMethod1;
   tearoff uniqueMethod1 = self::DuplicateExtensionName|get#uniqueMethod1;
   method duplicateMethodName2 = self::DuplicateExtensionName|duplicateMethodName2;
   tearoff duplicateMethodName2 = self::DuplicateExtensionName|get#duplicateMethodName2;
 }
-extension UniqueExtensionName on self::Class1* {
+extension UniqueExtensionName on self::Class1 {
   method duplicateMethodName1 = self::UniqueExtensionName|duplicateMethodName1;
   tearoff duplicateMethodName1 = self::UniqueExtensionName|get#duplicateMethodName1;
 }
-static method DuplicateExtensionName|uniqueMethod1(lowered final self::Class1* #this) → dynamic {}
-static method DuplicateExtensionName|get#uniqueMethod1(lowered 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(lowered final self::Class1* #this) → dynamic
+static method DuplicateExtensionName|duplicateMethodName2(lowered final self::Class1 #this) → dynamic
   return 1;
-static method DuplicateExtensionName|get#duplicateMethodName2(lowered 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(lowered final self::Class1* #this) → dynamic
+static method UniqueExtensionName|duplicateMethodName1(lowered final self::Class1 #this) → dynamic
   return 1;
-static method UniqueExtensionName|get#duplicateMethodName1(lowered 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::•();
+  self::Class1 c1 = new self::Class1::•();
   self::DuplicateExtensionName|uniqueMethod1(c1);
 }
 static method errors() → dynamic {
-  self::Class2* c2 = new self::Class2::•();
+  self::Class2 c2 = new self::Class2::•();
   invalid-expression "pkg/front_end/testcases/extensions/conflicts.dart:31:6: Error: The method 'uniqueMethod2' isn't defined for the class 'Class2'.
  - 'Class2' is from 'pkg/front_end/testcases/extensions/conflicts.dart'.
 Try correcting the name to the name of an existing method, or defining a method named 'uniqueMethod2'.
diff --git a/pkg/front_end/testcases/extensions/default_values.dart b/pkg/front_end/testcases/extensions/default_values.dart
index cbe9d36..eb948c2 100644
--- a/pkg/front_end/testcases/extensions/default_values.dart
+++ b/pkg/front_end/testcases/extensions/default_values.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2019, 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.
-// @dart=2.9
+
 class Class {}
 
 extension Extension on Class {
diff --git a/pkg/front_end/testcases/extensions/default_values.dart.textual_outline.expect b/pkg/front_end/testcases/extensions/default_values.dart.textual_outline.expect
index 07692f8..76863ce 100644
--- a/pkg/front_end/testcases/extensions/default_values.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/extensions/default_values.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Class {}
 
 extension Extension on Class {
diff --git a/pkg/front_end/testcases/extensions/default_values.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/extensions/default_values.dart.textual_outline_modelled.expect
index 75eaf11..dac2c87e 100644
--- a/pkg/front_end/testcases/extensions/default_values.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/extensions/default_values.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Class {}
 
 expect(expected, actual) {}
diff --git a/pkg/front_end/testcases/extensions/default_values.dart.weak.expect b/pkg/front_end/testcases/extensions/default_values.dart.weak.expect
index 99dd7ec..06ce1d1 100644
--- a/pkg/front_end/testcases/extensions/default_values.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/default_values.dart.weak.expect
@@ -1,23 +1,13 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Class extends core::Object {
-  synthetic constructor •() → self::Class*
+  synthetic constructor •() → self::Class
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension Extension on self::Class* {
+extension Extension on self::Class {
   method method0 = self::Extension|method0;
   tearoff method0 = self::Extension|get#method0;
   method method1 = self::Extension|method1;
@@ -28,41 +18,41 @@
   tearoff method3 = self::Extension|get#method3;
   static method staticMethod = self::Extension|staticMethod;
 }
-static method Extension|method0(lowered 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(lowered 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(lowered 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(lowered 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(lowered 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(lowered 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(lowered final self::Class* #this, {dynamic c = #C4}) → dynamic
+static method Extension|method3(lowered final self::Class #this, {dynamic c = #C4}) → dynamic
   return c{dynamic}.call();
-static method Extension|get#method3(lowered 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;
 static method main() → dynamic {
-  self::Class* c = new self::Class::•();
-  ([dynamic]) →* dynamic tearOff0 = self::Extension|get#method0(c);
-  self::expect(0, tearOff0(0){([dynamic]) →* dynamic});
-  self::expect(null, tearOff0(){([dynamic]) →* dynamic});
-  ([dynamic]) →* dynamic tearOff1 = self::Extension|get#method1(c);
-  self::expect(0, tearOff1(0){([dynamic]) →* dynamic});
-  self::expect(42, tearOff1(){([dynamic]) →* dynamic});
-  ({b: dynamic}) →* dynamic tearOff2 = self::Extension|get#method2(c);
-  self::expect(0, tearOff2(b: 0){({b: dynamic}) →* dynamic});
-  self::expect(87, tearOff2(){({b: dynamic}) →* dynamic});
-  ({c: dynamic}) →* dynamic tearOff3 = self::Extension|get#method3(c);
-  self::expect(0, tearOff3(c: () → core::int* => 0){({c: dynamic}) →* dynamic});
-  self::expect(123, tearOff3(){({c: dynamic}) →* dynamic});
+  self::Class c = new self::Class::•();
+  ([dynamic]) → dynamic tearOff0 = self::Extension|get#method0(c);
+  self::expect(0, tearOff0(0){([dynamic]) → dynamic});
+  self::expect(null, tearOff0(){([dynamic]) → dynamic});
+  ([dynamic]) → dynamic tearOff1 = self::Extension|get#method1(c);
+  self::expect(0, tearOff1(0){([dynamic]) → dynamic});
+  self::expect(42, tearOff1(){([dynamic]) → dynamic});
+  ({b: dynamic}) → dynamic tearOff2 = self::Extension|get#method2(c);
+  self::expect(0, tearOff2(b: 0){({b: dynamic}) → dynamic});
+  self::expect(87, tearOff2(){({b: dynamic}) → dynamic});
+  ({c: dynamic}) → dynamic tearOff3 = self::Extension|get#method3(c);
+  self::expect(0, tearOff3(c: () → core::int => 0){({c: dynamic}) → dynamic});
+  self::expect(123, tearOff3(){({c: dynamic}) → dynamic});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual)) {
     throw "Mismatch: expected=${expected}, actual=${actual}";
   }
 }
diff --git a/pkg/front_end/testcases/extensions/default_values.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/default_values.dart.weak.modular.expect
index 99dd7ec..06ce1d1 100644
--- a/pkg/front_end/testcases/extensions/default_values.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/extensions/default_values.dart.weak.modular.expect
@@ -1,23 +1,13 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Class extends core::Object {
-  synthetic constructor •() → self::Class*
+  synthetic constructor •() → self::Class
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension Extension on self::Class* {
+extension Extension on self::Class {
   method method0 = self::Extension|method0;
   tearoff method0 = self::Extension|get#method0;
   method method1 = self::Extension|method1;
@@ -28,41 +18,41 @@
   tearoff method3 = self::Extension|get#method3;
   static method staticMethod = self::Extension|staticMethod;
 }
-static method Extension|method0(lowered 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(lowered 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(lowered 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(lowered 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(lowered 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(lowered 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(lowered final self::Class* #this, {dynamic c = #C4}) → dynamic
+static method Extension|method3(lowered final self::Class #this, {dynamic c = #C4}) → dynamic
   return c{dynamic}.call();
-static method Extension|get#method3(lowered 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;
 static method main() → dynamic {
-  self::Class* c = new self::Class::•();
-  ([dynamic]) →* dynamic tearOff0 = self::Extension|get#method0(c);
-  self::expect(0, tearOff0(0){([dynamic]) →* dynamic});
-  self::expect(null, tearOff0(){([dynamic]) →* dynamic});
-  ([dynamic]) →* dynamic tearOff1 = self::Extension|get#method1(c);
-  self::expect(0, tearOff1(0){([dynamic]) →* dynamic});
-  self::expect(42, tearOff1(){([dynamic]) →* dynamic});
-  ({b: dynamic}) →* dynamic tearOff2 = self::Extension|get#method2(c);
-  self::expect(0, tearOff2(b: 0){({b: dynamic}) →* dynamic});
-  self::expect(87, tearOff2(){({b: dynamic}) →* dynamic});
-  ({c: dynamic}) →* dynamic tearOff3 = self::Extension|get#method3(c);
-  self::expect(0, tearOff3(c: () → core::int* => 0){({c: dynamic}) →* dynamic});
-  self::expect(123, tearOff3(){({c: dynamic}) →* dynamic});
+  self::Class c = new self::Class::•();
+  ([dynamic]) → dynamic tearOff0 = self::Extension|get#method0(c);
+  self::expect(0, tearOff0(0){([dynamic]) → dynamic});
+  self::expect(null, tearOff0(){([dynamic]) → dynamic});
+  ([dynamic]) → dynamic tearOff1 = self::Extension|get#method1(c);
+  self::expect(0, tearOff1(0){([dynamic]) → dynamic});
+  self::expect(42, tearOff1(){([dynamic]) → dynamic});
+  ({b: dynamic}) → dynamic tearOff2 = self::Extension|get#method2(c);
+  self::expect(0, tearOff2(b: 0){({b: dynamic}) → dynamic});
+  self::expect(87, tearOff2(){({b: dynamic}) → dynamic});
+  ({c: dynamic}) → dynamic tearOff3 = self::Extension|get#method3(c);
+  self::expect(0, tearOff3(c: () → core::int => 0){({c: dynamic}) → dynamic});
+  self::expect(123, tearOff3(){({c: dynamic}) → dynamic});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual)) {
     throw "Mismatch: expected=${expected}, actual=${actual}";
   }
 }
diff --git a/pkg/front_end/testcases/extensions/default_values.dart.weak.outline.expect b/pkg/front_end/testcases/extensions/default_values.dart.weak.outline.expect
index a200896..b728e1a 100644
--- a/pkg/front_end/testcases/extensions/default_values.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extensions/default_values.dart.weak.outline.expect
@@ -1,22 +1,12 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Class extends core::Object {
-  synthetic constructor •() → self::Class*
+  synthetic constructor •() → self::Class
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension Extension on self::Class* {
+extension Extension on self::Class {
   method method0 = self::Extension|method0;
   tearoff method0 = self::Extension|get#method0;
   method method1 = self::Extension|method1;
@@ -27,21 +17,21 @@
   tearoff method3 = self::Extension|get#method3;
   static method staticMethod = self::Extension|staticMethod;
 }
-static method Extension|method0(lowered final self::Class* #this, [dynamic a]) → dynamic
+static method Extension|method0(lowered final self::Class #this, [dynamic a]) → dynamic
   ;
-static method Extension|get#method0(lowered 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(lowered final self::Class* #this, [has-declared-initializer dynamic a]) → dynamic
+static method Extension|method1(lowered final self::Class #this, [has-declared-initializer dynamic a]) → dynamic
   ;
-static method Extension|get#method1(lowered 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(lowered final self::Class* #this, {has-declared-initializer dynamic b}) → dynamic
+static method Extension|method2(lowered final self::Class #this, {has-declared-initializer dynamic b}) → dynamic
   ;
-static method Extension|get#method2(lowered 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(lowered final self::Class* #this, {has-declared-initializer dynamic c}) → dynamic
+static method Extension|method3(lowered final self::Class #this, {has-declared-initializer dynamic c}) → dynamic
   ;
-static method Extension|get#method3(lowered 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.weak.transformed.expect b/pkg/front_end/testcases/extensions/default_values.dart.weak.transformed.expect
index 99dd7ec..06ce1d1 100644
--- a/pkg/front_end/testcases/extensions/default_values.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/default_values.dart.weak.transformed.expect
@@ -1,23 +1,13 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Class extends core::Object {
-  synthetic constructor •() → self::Class*
+  synthetic constructor •() → self::Class
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension Extension on self::Class* {
+extension Extension on self::Class {
   method method0 = self::Extension|method0;
   tearoff method0 = self::Extension|get#method0;
   method method1 = self::Extension|method1;
@@ -28,41 +18,41 @@
   tearoff method3 = self::Extension|get#method3;
   static method staticMethod = self::Extension|staticMethod;
 }
-static method Extension|method0(lowered 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(lowered 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(lowered 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(lowered 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(lowered 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(lowered 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(lowered final self::Class* #this, {dynamic c = #C4}) → dynamic
+static method Extension|method3(lowered final self::Class #this, {dynamic c = #C4}) → dynamic
   return c{dynamic}.call();
-static method Extension|get#method3(lowered 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;
 static method main() → dynamic {
-  self::Class* c = new self::Class::•();
-  ([dynamic]) →* dynamic tearOff0 = self::Extension|get#method0(c);
-  self::expect(0, tearOff0(0){([dynamic]) →* dynamic});
-  self::expect(null, tearOff0(){([dynamic]) →* dynamic});
-  ([dynamic]) →* dynamic tearOff1 = self::Extension|get#method1(c);
-  self::expect(0, tearOff1(0){([dynamic]) →* dynamic});
-  self::expect(42, tearOff1(){([dynamic]) →* dynamic});
-  ({b: dynamic}) →* dynamic tearOff2 = self::Extension|get#method2(c);
-  self::expect(0, tearOff2(b: 0){({b: dynamic}) →* dynamic});
-  self::expect(87, tearOff2(){({b: dynamic}) →* dynamic});
-  ({c: dynamic}) →* dynamic tearOff3 = self::Extension|get#method3(c);
-  self::expect(0, tearOff3(c: () → core::int* => 0){({c: dynamic}) →* dynamic});
-  self::expect(123, tearOff3(){({c: dynamic}) →* dynamic});
+  self::Class c = new self::Class::•();
+  ([dynamic]) → dynamic tearOff0 = self::Extension|get#method0(c);
+  self::expect(0, tearOff0(0){([dynamic]) → dynamic});
+  self::expect(null, tearOff0(){([dynamic]) → dynamic});
+  ([dynamic]) → dynamic tearOff1 = self::Extension|get#method1(c);
+  self::expect(0, tearOff1(0){([dynamic]) → dynamic});
+  self::expect(42, tearOff1(){([dynamic]) → dynamic});
+  ({b: dynamic}) → dynamic tearOff2 = self::Extension|get#method2(c);
+  self::expect(0, tearOff2(b: 0){({b: dynamic}) → dynamic});
+  self::expect(87, tearOff2(){({b: dynamic}) → dynamic});
+  ({c: dynamic}) → dynamic tearOff3 = self::Extension|get#method3(c);
+  self::expect(0, tearOff3(c: () → core::int => 0){({c: dynamic}) → dynamic});
+  self::expect(123, tearOff3(){({c: dynamic}) → dynamic});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual)) {
     throw "Mismatch: expected=${expected}, actual=${actual}";
   }
 }
diff --git a/pkg/front_end/testcases/extensions/deferred_explicit_access.dart b/pkg/front_end/testcases/extensions/deferred_explicit_access.dart
index 4935ff2..70ca3dd 100644
--- a/pkg/front_end/testcases/extensions/deferred_explicit_access.dart
+++ b/pkg/front_end/testcases/extensions/deferred_explicit_access.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2019, 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.
-// @dart=2.9
+
 import 'deferred_explicit_access_lib.dart' deferred as prefix;
 
 main() async {
diff --git a/pkg/front_end/testcases/extensions/deferred_explicit_access.dart.textual_outline.expect b/pkg/front_end/testcases/extensions/deferred_explicit_access.dart.textual_outline.expect
index 7ce2bbc..5dedc9b 100644
--- a/pkg/front_end/testcases/extensions/deferred_explicit_access.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/extensions/deferred_explicit_access.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'deferred_explicit_access_lib.dart' deferred as prefix;
 
 main() async {}
diff --git a/pkg/front_end/testcases/extensions/deferred_explicit_access.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/extensions/deferred_explicit_access.dart.textual_outline_modelled.expect
index f02744c..45edf2b 100644
--- a/pkg/front_end/testcases/extensions/deferred_explicit_access.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/extensions/deferred_explicit_access.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'deferred_explicit_access_lib.dart' deferred as prefix;
 
 expect(expected, actual) {}
diff --git a/pkg/front_end/testcases/extensions/deferred_explicit_access.dart.weak.expect b/pkg/front_end/testcases/extensions/deferred_explicit_access.dart.weak.expect
index e5d181d..cc56e66 100644
--- a/pkg/front_end/testcases/extensions/deferred_explicit_access.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/deferred_explicit_access.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -17,7 +17,7 @@
   await LoadLibrary(prefix);
   self::expect(0, let final dynamic #t1 = CheckLibraryIsLoaded(prefix) in def::Extension|staticField);
   self::expect(0, let final dynamic #t2 = CheckLibraryIsLoaded(prefix) in def::Extension|get#property(0));
-  self::expect(42, let final dynamic #t3 = CheckLibraryIsLoaded(prefix) in let final core::int* #t4 = 0 in let final core::int* #t5 = 42 in let final void #t6 = def::Extension|set#property(#t4, #t5) in #t5);
+  self::expect(42, let final dynamic #t3 = CheckLibraryIsLoaded(prefix) in let final core::int #t4 = 0 in let final core::int #t5 = 42 in let final void #t6 = def::Extension|set#property(#t4, #t5) in #t5);
   self::expect(84, let final dynamic #t7 = CheckLibraryIsLoaded(prefix) in def::Extension|get#property(42));
   self::expect(85, let final dynamic #t8 = CheckLibraryIsLoaded(prefix) in def::Extension|method(43));
   self::expect(42, let final dynamic #t9 = CheckLibraryIsLoaded(prefix) in def::Extension|staticProperty);
@@ -25,15 +25,15 @@
   self::expect(87, let final dynamic #t11 = CheckLibraryIsLoaded(prefix) in def::Extension|staticMethod());
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as def;
 import "dart:core" as core;
 
-extension Extension on core::int* {
+extension Extension on core::int {
   static field staticField = def::Extension|staticField;
   static get staticProperty = get def::Extension|staticProperty;
   static method staticMethod = def::Extension|staticMethod;
@@ -43,27 +43,27 @@
   static set staticProperty = set def::Extension|staticProperty;
   set property = def::Extension|set#property;
 }
-static field core::int* Extension|staticField = 0;
-static field core::int* topLevelField = def::Extension|staticField;
-static get Extension|staticProperty() → core::int*
+static field core::int Extension|staticField = 0;
+static field core::int topLevelField = def::Extension|staticField;
+static get Extension|staticProperty() → core::int
   return def::Extension|staticField;
-static set Extension|staticProperty(core::int* value) → void {
+static set Extension|staticProperty(core::int value) → void {
   def::Extension|staticField = value;
 }
-static method Extension|staticMethod() → core::int*
+static method Extension|staticMethod() → core::int
   return def::Extension|staticField;
-static method Extension|get#property(lowered final core::int* #this) → core::int*
-  return #this.{core::num::+}(def::Extension|staticField){(core::num*) →* core::int*};
-static method Extension|set#property(lowered final core::int* #this, core::int* value) → void {
+static method Extension|get#property(lowered final core::int #this) → core::int
+  return #this.{core::num::+}(def::Extension|staticField){(core::num) → core::int};
+static method Extension|set#property(lowered final core::int #this, core::int value) → void {
   def::Extension|staticField = value;
 }
-static method Extension|method(lowered final core::int* #this) → core::int*
-  return #this.{core::num::+}(def::Extension|staticField){(core::num*) →* 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*
+static method Extension|method(lowered final core::int #this) → core::int
+  return #this.{core::num::+}(def::Extension|staticField){(core::num) → 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;
-static set topLevelProperty(core::int* value) → void {
+static set topLevelProperty(core::int value) → void {
   def::Extension|staticField = value;
 }
 static method topLevelMethod() → dynamic
diff --git a/pkg/front_end/testcases/extensions/deferred_explicit_access.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/deferred_explicit_access.dart.weak.modular.expect
index e5d181d..cc56e66 100644
--- a/pkg/front_end/testcases/extensions/deferred_explicit_access.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/extensions/deferred_explicit_access.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -17,7 +17,7 @@
   await LoadLibrary(prefix);
   self::expect(0, let final dynamic #t1 = CheckLibraryIsLoaded(prefix) in def::Extension|staticField);
   self::expect(0, let final dynamic #t2 = CheckLibraryIsLoaded(prefix) in def::Extension|get#property(0));
-  self::expect(42, let final dynamic #t3 = CheckLibraryIsLoaded(prefix) in let final core::int* #t4 = 0 in let final core::int* #t5 = 42 in let final void #t6 = def::Extension|set#property(#t4, #t5) in #t5);
+  self::expect(42, let final dynamic #t3 = CheckLibraryIsLoaded(prefix) in let final core::int #t4 = 0 in let final core::int #t5 = 42 in let final void #t6 = def::Extension|set#property(#t4, #t5) in #t5);
   self::expect(84, let final dynamic #t7 = CheckLibraryIsLoaded(prefix) in def::Extension|get#property(42));
   self::expect(85, let final dynamic #t8 = CheckLibraryIsLoaded(prefix) in def::Extension|method(43));
   self::expect(42, let final dynamic #t9 = CheckLibraryIsLoaded(prefix) in def::Extension|staticProperty);
@@ -25,15 +25,15 @@
   self::expect(87, let final dynamic #t11 = CheckLibraryIsLoaded(prefix) in def::Extension|staticMethod());
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as def;
 import "dart:core" as core;
 
-extension Extension on core::int* {
+extension Extension on core::int {
   static field staticField = def::Extension|staticField;
   static get staticProperty = get def::Extension|staticProperty;
   static method staticMethod = def::Extension|staticMethod;
@@ -43,27 +43,27 @@
   static set staticProperty = set def::Extension|staticProperty;
   set property = def::Extension|set#property;
 }
-static field core::int* Extension|staticField = 0;
-static field core::int* topLevelField = def::Extension|staticField;
-static get Extension|staticProperty() → core::int*
+static field core::int Extension|staticField = 0;
+static field core::int topLevelField = def::Extension|staticField;
+static get Extension|staticProperty() → core::int
   return def::Extension|staticField;
-static set Extension|staticProperty(core::int* value) → void {
+static set Extension|staticProperty(core::int value) → void {
   def::Extension|staticField = value;
 }
-static method Extension|staticMethod() → core::int*
+static method Extension|staticMethod() → core::int
   return def::Extension|staticField;
-static method Extension|get#property(lowered final core::int* #this) → core::int*
-  return #this.{core::num::+}(def::Extension|staticField){(core::num*) →* core::int*};
-static method Extension|set#property(lowered final core::int* #this, core::int* value) → void {
+static method Extension|get#property(lowered final core::int #this) → core::int
+  return #this.{core::num::+}(def::Extension|staticField){(core::num) → core::int};
+static method Extension|set#property(lowered final core::int #this, core::int value) → void {
   def::Extension|staticField = value;
 }
-static method Extension|method(lowered final core::int* #this) → core::int*
-  return #this.{core::num::+}(def::Extension|staticField){(core::num*) →* 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*
+static method Extension|method(lowered final core::int #this) → core::int
+  return #this.{core::num::+}(def::Extension|staticField){(core::num) → 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;
-static set topLevelProperty(core::int* value) → void {
+static set topLevelProperty(core::int value) → void {
   def::Extension|staticField = value;
 }
 static method topLevelMethod() → dynamic
diff --git a/pkg/front_end/testcases/extensions/deferred_explicit_access.dart.weak.outline.expect b/pkg/front_end/testcases/extensions/deferred_explicit_access.dart.weak.outline.expect
index b5db0d7..bf2f8ef 100644
--- a/pkg/front_end/testcases/extensions/deferred_explicit_access.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extensions/deferred_explicit_access.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -16,11 +16,11 @@
 static method expect(dynamic expected, dynamic actual) → dynamic
   ;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
-extension Extension on core::int* {
+extension Extension on core::int {
   static field staticField = self2::Extension|staticField;
   static get staticProperty = get self2::Extension|staticProperty;
   static method staticMethod = self2::Extension|staticMethod;
@@ -30,25 +30,25 @@
   static set staticProperty = set self2::Extension|staticProperty;
   set property = self2::Extension|set#property;
 }
-static field core::int* Extension|staticField;
-static field core::int* topLevelField;
-static get Extension|staticProperty() → core::int*
+static field core::int Extension|staticField;
+static field core::int topLevelField;
+static get Extension|staticProperty() → core::int
   ;
-static set Extension|staticProperty(core::int* value) → void
+static set Extension|staticProperty(core::int value) → void
   ;
-static method Extension|staticMethod() → core::int*
+static method Extension|staticMethod() → core::int
   ;
-static method Extension|get#property(lowered final core::int* #this) → core::int*
+static method Extension|get#property(lowered final core::int #this) → core::int
   ;
-static method Extension|set#property(lowered 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(lowered final core::int* #this) → core::int*
+static method Extension|method(lowered 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*
+static method Extension|get#method(lowered final core::int #this) → () → core::int
+  return () → core::int => self2::Extension|method(#this);
+static get topLevelProperty() → core::int
   ;
-static set topLevelProperty(core::int* value) → void
+static set topLevelProperty(core::int value) → void
   ;
 static method topLevelMethod() → dynamic
   ;
diff --git a/pkg/front_end/testcases/extensions/deferred_explicit_access.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/deferred_explicit_access.dart.weak.transformed.expect
index 612662d..484ac66 100644
--- a/pkg/front_end/testcases/extensions/deferred_explicit_access.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/deferred_explicit_access.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -15,12 +15,12 @@
 import "org-dartlang-testcase:///deferred_explicit_access_lib.dart" deferred as prefix;
 
 static method main() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
+  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
+  (dynamic) → dynamic :async_op_then;
+  (core::Object, core::StackTrace) → dynamic :async_op_error;
+  core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
   function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
@@ -31,7 +31,7 @@
         :result_or_exception;
         self::expect(0, let final core::Object* #t2 = CheckLibraryIsLoaded(prefix) in def::Extension|staticField);
         self::expect(0, let final core::Object* #t3 = CheckLibraryIsLoaded(prefix) in def::Extension|get#property(0));
-        self::expect(42, let final core::Object* #t4 = CheckLibraryIsLoaded(prefix) in let final core::int* #t5 = 0 in let final core::int* #t6 = 42 in let final void #t7 = def::Extension|set#property(#t5, #t6) in #t6);
+        self::expect(42, let final core::Object* #t4 = CheckLibraryIsLoaded(prefix) in let final core::int #t5 = 0 in let final core::int #t6 = 42 in let final void #t7 = def::Extension|set#property(#t5, #t6) in #t6);
         self::expect(84, let final core::Object* #t8 = CheckLibraryIsLoaded(prefix) in def::Extension|get#property(42));
         self::expect(85, let final core::Object* #t9 = CheckLibraryIsLoaded(prefix) in def::Extension|method(43));
         self::expect(42, let final core::Object* #t10 = CheckLibraryIsLoaded(prefix) in def::Extension|staticProperty);
@@ -41,25 +41,25 @@
       asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
-    on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
+    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
       asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() →* dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as def;
 import "dart:core" as core;
 
-extension Extension on core::int* {
+extension Extension on core::int {
   static field staticField = def::Extension|staticField;
   static get staticProperty = get def::Extension|staticProperty;
   static method staticMethod = def::Extension|staticMethod;
@@ -69,27 +69,27 @@
   static set staticProperty = set def::Extension|staticProperty;
   set property = def::Extension|set#property;
 }
-static field core::int* Extension|staticField = 0;
-static field core::int* topLevelField = def::Extension|staticField;
-static get Extension|staticProperty() → core::int*
+static field core::int Extension|staticField = 0;
+static field core::int topLevelField = def::Extension|staticField;
+static get Extension|staticProperty() → core::int
   return def::Extension|staticField;
-static set Extension|staticProperty(core::int* value) → void {
+static set Extension|staticProperty(core::int value) → void {
   def::Extension|staticField = value;
 }
-static method Extension|staticMethod() → core::int*
+static method Extension|staticMethod() → core::int
   return def::Extension|staticField;
-static method Extension|get#property(lowered final core::int* #this) → core::int*
-  return #this.{core::num::+}(def::Extension|staticField){(core::num*) →* core::int*};
-static method Extension|set#property(lowered final core::int* #this, core::int* value) → void {
+static method Extension|get#property(lowered final core::int #this) → core::int
+  return #this.{core::num::+}(def::Extension|staticField){(core::num) → core::int};
+static method Extension|set#property(lowered final core::int #this, core::int value) → void {
   def::Extension|staticField = value;
 }
-static method Extension|method(lowered final core::int* #this) → core::int*
-  return #this.{core::num::+}(def::Extension|staticField){(core::num*) →* 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*
+static method Extension|method(lowered final core::int #this) → core::int
+  return #this.{core::num::+}(def::Extension|staticField){(core::num) → 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;
-static set topLevelProperty(core::int* value) → void {
+static set topLevelProperty(core::int value) → void {
   def::Extension|staticField = value;
 }
 static method topLevelMethod() → dynamic
diff --git a/pkg/front_end/testcases/extensions/deferred_explicit_access_lib.dart b/pkg/front_end/testcases/extensions/deferred_explicit_access_lib.dart
index 76a7d59..a85bb28 100644
--- a/pkg/front_end/testcases/extensions/deferred_explicit_access_lib.dart
+++ b/pkg/front_end/testcases/extensions/deferred_explicit_access_lib.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2019, 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.
-// @dart=2.9
+
 extension Extension on int {
   static int staticField = 0;
 
diff --git a/pkg/front_end/testcases/extensions/deferred_import_hidden.dart b/pkg/front_end/testcases/extensions/deferred_import_hidden.dart
index b289768b..c5d6507 100644
--- a/pkg/front_end/testcases/extensions/deferred_import_hidden.dart
+++ b/pkg/front_end/testcases/extensions/deferred_import_hidden.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2019, 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.
-// @dart=2.9
+
 import 'deferred_explicit_access_lib.dart' deferred as prefix hide Extension;
 
 main() async {
diff --git a/pkg/front_end/testcases/extensions/deferred_import_hidden.dart.textual_outline.expect b/pkg/front_end/testcases/extensions/deferred_import_hidden.dart.textual_outline.expect
index 6e5148b..cd5075c 100644
--- a/pkg/front_end/testcases/extensions/deferred_import_hidden.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/extensions/deferred_import_hidden.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'deferred_explicit_access_lib.dart' deferred as prefix hide Extension;
 
 main() async {}
diff --git a/pkg/front_end/testcases/extensions/deferred_import_hidden.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/extensions/deferred_import_hidden.dart.textual_outline_modelled.expect
index 72a2f58..73bcfb8 100644
--- a/pkg/front_end/testcases/extensions/deferred_import_hidden.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/extensions/deferred_import_hidden.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'deferred_explicit_access_lib.dart' deferred as prefix hide Extension;
 
 expect(expected, actual) {}
diff --git a/pkg/front_end/testcases/extensions/deferred_import_hidden.dart.weak.expect b/pkg/front_end/testcases/extensions/deferred_import_hidden.dart.weak.expect
index 0b080b3..5ce08e9 100644
--- a/pkg/front_end/testcases/extensions/deferred_import_hidden.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/deferred_import_hidden.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "deferred_explicit_access_lib.dart" as def;
 import "dart:core" as core;
@@ -16,15 +16,15 @@
   self::expect(87, let final dynamic #t7 = CheckLibraryIsLoaded(prefix) in def::topLevelMethod());
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as def;
 import "dart:core" as core;
 
-extension Extension on core::int* {
+extension Extension on core::int {
   static field staticField = def::Extension|staticField;
   static get staticProperty = get def::Extension|staticProperty;
   static method staticMethod = def::Extension|staticMethod;
@@ -34,27 +34,27 @@
   static set staticProperty = set def::Extension|staticProperty;
   set property = def::Extension|set#property;
 }
-static field core::int* Extension|staticField = 0;
-static field core::int* topLevelField = def::Extension|staticField;
-static get Extension|staticProperty() → core::int*
+static field core::int Extension|staticField = 0;
+static field core::int topLevelField = def::Extension|staticField;
+static get Extension|staticProperty() → core::int
   return def::Extension|staticField;
-static set Extension|staticProperty(core::int* value) → void {
+static set Extension|staticProperty(core::int value) → void {
   def::Extension|staticField = value;
 }
-static method Extension|staticMethod() → core::int*
+static method Extension|staticMethod() → core::int
   return def::Extension|staticField;
-static method Extension|get#property(lowered final core::int* #this) → core::int*
-  return #this.{core::num::+}(def::Extension|staticField){(core::num*) →* core::int*};
-static method Extension|set#property(lowered final core::int* #this, core::int* value) → void {
+static method Extension|get#property(lowered final core::int #this) → core::int
+  return #this.{core::num::+}(def::Extension|staticField){(core::num) → core::int};
+static method Extension|set#property(lowered final core::int #this, core::int value) → void {
   def::Extension|staticField = value;
 }
-static method Extension|method(lowered final core::int* #this) → core::int*
-  return #this.{core::num::+}(def::Extension|staticField){(core::num*) →* 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*
+static method Extension|method(lowered final core::int #this) → core::int
+  return #this.{core::num::+}(def::Extension|staticField){(core::num) → 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;
-static set topLevelProperty(core::int* value) → void {
+static set topLevelProperty(core::int value) → void {
   def::Extension|staticField = value;
 }
 static method topLevelMethod() → dynamic
diff --git a/pkg/front_end/testcases/extensions/deferred_import_hidden.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/deferred_import_hidden.dart.weak.modular.expect
index 0b080b3..5ce08e9 100644
--- a/pkg/front_end/testcases/extensions/deferred_import_hidden.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/extensions/deferred_import_hidden.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "deferred_explicit_access_lib.dart" as def;
 import "dart:core" as core;
@@ -16,15 +16,15 @@
   self::expect(87, let final dynamic #t7 = CheckLibraryIsLoaded(prefix) in def::topLevelMethod());
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as def;
 import "dart:core" as core;
 
-extension Extension on core::int* {
+extension Extension on core::int {
   static field staticField = def::Extension|staticField;
   static get staticProperty = get def::Extension|staticProperty;
   static method staticMethod = def::Extension|staticMethod;
@@ -34,27 +34,27 @@
   static set staticProperty = set def::Extension|staticProperty;
   set property = def::Extension|set#property;
 }
-static field core::int* Extension|staticField = 0;
-static field core::int* topLevelField = def::Extension|staticField;
-static get Extension|staticProperty() → core::int*
+static field core::int Extension|staticField = 0;
+static field core::int topLevelField = def::Extension|staticField;
+static get Extension|staticProperty() → core::int
   return def::Extension|staticField;
-static set Extension|staticProperty(core::int* value) → void {
+static set Extension|staticProperty(core::int value) → void {
   def::Extension|staticField = value;
 }
-static method Extension|staticMethod() → core::int*
+static method Extension|staticMethod() → core::int
   return def::Extension|staticField;
-static method Extension|get#property(lowered final core::int* #this) → core::int*
-  return #this.{core::num::+}(def::Extension|staticField){(core::num*) →* core::int*};
-static method Extension|set#property(lowered final core::int* #this, core::int* value) → void {
+static method Extension|get#property(lowered final core::int #this) → core::int
+  return #this.{core::num::+}(def::Extension|staticField){(core::num) → core::int};
+static method Extension|set#property(lowered final core::int #this, core::int value) → void {
   def::Extension|staticField = value;
 }
-static method Extension|method(lowered final core::int* #this) → core::int*
-  return #this.{core::num::+}(def::Extension|staticField){(core::num*) →* 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*
+static method Extension|method(lowered final core::int #this) → core::int
+  return #this.{core::num::+}(def::Extension|staticField){(core::num) → 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;
-static set topLevelProperty(core::int* value) → void {
+static set topLevelProperty(core::int value) → void {
   def::Extension|staticField = value;
 }
 static method topLevelMethod() → dynamic
diff --git a/pkg/front_end/testcases/extensions/deferred_import_hidden.dart.weak.outline.expect b/pkg/front_end/testcases/extensions/deferred_import_hidden.dart.weak.outline.expect
index a0ceed4..1fbc675 100644
--- a/pkg/front_end/testcases/extensions/deferred_import_hidden.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extensions/deferred_import_hidden.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 import "org-dartlang-testcase:///deferred_explicit_access_lib.dart" deferred as prefix hide Extension;
@@ -8,11 +8,11 @@
 static method expect(dynamic expected, dynamic actual) → dynamic
   ;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
-extension Extension on core::int* {
+extension Extension on core::int {
   static field staticField = self2::Extension|staticField;
   static get staticProperty = get self2::Extension|staticProperty;
   static method staticMethod = self2::Extension|staticMethod;
@@ -22,25 +22,25 @@
   static set staticProperty = set self2::Extension|staticProperty;
   set property = self2::Extension|set#property;
 }
-static field core::int* Extension|staticField;
-static field core::int* topLevelField;
-static get Extension|staticProperty() → core::int*
+static field core::int Extension|staticField;
+static field core::int topLevelField;
+static get Extension|staticProperty() → core::int
   ;
-static set Extension|staticProperty(core::int* value) → void
+static set Extension|staticProperty(core::int value) → void
   ;
-static method Extension|staticMethod() → core::int*
+static method Extension|staticMethod() → core::int
   ;
-static method Extension|get#property(lowered final core::int* #this) → core::int*
+static method Extension|get#property(lowered final core::int #this) → core::int
   ;
-static method Extension|set#property(lowered 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(lowered final core::int* #this) → core::int*
+static method Extension|method(lowered 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*
+static method Extension|get#method(lowered final core::int #this) → () → core::int
+  return () → core::int => self2::Extension|method(#this);
+static get topLevelProperty() → core::int
   ;
-static set topLevelProperty(core::int* value) → void
+static set topLevelProperty(core::int value) → void
   ;
 static method topLevelMethod() → dynamic
   ;
diff --git a/pkg/front_end/testcases/extensions/deferred_import_hidden.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/deferred_import_hidden.dart.weak.transformed.expect
index bc5853f..3769826 100644
--- a/pkg/front_end/testcases/extensions/deferred_import_hidden.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/deferred_import_hidden.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:async" as asy;
 import "dart:core" as core;
@@ -7,12 +7,12 @@
 import "org-dartlang-testcase:///deferred_explicit_access_lib.dart" deferred as prefix hide Extension;
 
 static method main() → dynamic /* futureValueType= dynamic */ /* originally async */ {
-  final asy::_Future<dynamic>* :async_future = new asy::_Future::•<dynamic>();
+  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
   core::bool* :is_sync = false;
   dynamic :return_value;
-  (dynamic) →* dynamic :async_op_then;
-  (core::Object*, core::StackTrace*) →* dynamic :async_op_error;
-  core::int* :await_jump_var = 0;
+  (dynamic) → dynamic :async_op_then;
+  (core::Object, core::StackTrace) → dynamic :async_op_error;
+  core::int :await_jump_var = 0;
   dynamic :await_ctx_var;
   dynamic :saved_try_context_var0;
   function :async_op(dynamic :result_or_exception, dynamic :stack_trace) → dynamic yielding 
@@ -32,25 +32,25 @@
       asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
       return;
     }
-    on dynamic catch(dynamic exception, core::StackTrace* stack_trace) {
+    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
       asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
     }
   :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
   :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
-  :async_op(null, null){() →* dynamic};
+  :async_op(null, null){() → dynamic};
   :is_sync = true;
   return :async_future;
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as def;
 import "dart:core" as core;
 
-extension Extension on core::int* {
+extension Extension on core::int {
   static field staticField = def::Extension|staticField;
   static get staticProperty = get def::Extension|staticProperty;
   static method staticMethod = def::Extension|staticMethod;
@@ -60,27 +60,27 @@
   static set staticProperty = set def::Extension|staticProperty;
   set property = def::Extension|set#property;
 }
-static field core::int* Extension|staticField = 0;
-static field core::int* topLevelField = def::Extension|staticField;
-static get Extension|staticProperty() → core::int*
+static field core::int Extension|staticField = 0;
+static field core::int topLevelField = def::Extension|staticField;
+static get Extension|staticProperty() → core::int
   return def::Extension|staticField;
-static set Extension|staticProperty(core::int* value) → void {
+static set Extension|staticProperty(core::int value) → void {
   def::Extension|staticField = value;
 }
-static method Extension|staticMethod() → core::int*
+static method Extension|staticMethod() → core::int
   return def::Extension|staticField;
-static method Extension|get#property(lowered final core::int* #this) → core::int*
-  return #this.{core::num::+}(def::Extension|staticField){(core::num*) →* core::int*};
-static method Extension|set#property(lowered final core::int* #this, core::int* value) → void {
+static method Extension|get#property(lowered final core::int #this) → core::int
+  return #this.{core::num::+}(def::Extension|staticField){(core::num) → core::int};
+static method Extension|set#property(lowered final core::int #this, core::int value) → void {
   def::Extension|staticField = value;
 }
-static method Extension|method(lowered final core::int* #this) → core::int*
-  return #this.{core::num::+}(def::Extension|staticField){(core::num*) →* 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*
+static method Extension|method(lowered final core::int #this) → core::int
+  return #this.{core::num::+}(def::Extension|staticField){(core::num) → 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;
-static set topLevelProperty(core::int* value) → void {
+static set topLevelProperty(core::int value) → void {
   def::Extension|staticField = value;
 }
 static method topLevelMethod() → dynamic
diff --git a/pkg/front_end/testcases/extensions/direct_instance_access.dart b/pkg/front_end/testcases/extensions/direct_instance_access.dart
index f7368f0..9634d9d 100644
--- a/pkg/front_end/testcases/extensions/direct_instance_access.dart
+++ b/pkg/front_end/testcases/extensions/direct_instance_access.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2019, 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.
-// @dart=2.9
+
 class Class {
   var field;
 }
@@ -67,11 +67,11 @@
 }
 
 class GenericClass<T> {
-  T field;
+  T? field;
 }
 
 extension GenericExtension<T> on GenericClass<T> {
-  T readGetter() {
+  T? readGetter() {
     return property;
   }
 
@@ -79,11 +79,11 @@
     property = value;
   }
 
-  writeSetterOptional([T value]) {
+  writeSetterOptional([T? value]) {
    property = value;
   }
 
-  writeSetterNamed({T value}) {
+  writeSetterNamed({T? value}) {
     property = value;
   }
 
@@ -91,17 +91,17 @@
    property = value;
   }
 
-  genericWriteSetterOptional<S extends T>([S value]) {
+  genericWriteSetterOptional<S extends T>([S? value]) {
     property = value;
   }
 
-  genericWriteSetterNamed<S extends T>({S value}) {
+  genericWriteSetterNamed<S extends T>({S? value}) {
    property = value;
   }
 
-  T get property => this.field;
+  T? get property => this.field;
 
-  void set property(T value) {
+  void set property(T? value) {
     this.field = value;
   }
 
diff --git a/pkg/front_end/testcases/extensions/direct_instance_access.dart.textual_outline.expect b/pkg/front_end/testcases/extensions/direct_instance_access.dart.textual_outline.expect
index 2ce2827..2d6c602 100644
--- a/pkg/front_end/testcases/extensions/direct_instance_access.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/extensions/direct_instance_access.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Class {
   var field;
 }
@@ -20,19 +19,19 @@
 }
 
 class GenericClass<T> {
-  T field;
+  T? field;
 }
 
 extension GenericExtension<T> on GenericClass<T> {
-  T readGetter() {}
+  T? readGetter() {}
   writeSetterRequired(T value) {}
-  writeSetterOptional([T value]) {}
-  writeSetterNamed({T value}) {}
+  writeSetterOptional([T? value]) {}
+  writeSetterNamed({T? value}) {}
   genericWriteSetterRequired<S extends T>(S value) {}
-  genericWriteSetterOptional<S extends T>([S value]) {}
-  genericWriteSetterNamed<S extends T>({S value}) {}
-  T get property => this.field;
-  void set property(T value) {}
+  genericWriteSetterOptional<S extends T>([S? value]) {}
+  genericWriteSetterNamed<S extends T>({S? value}) {}
+  T? get property => this.field;
+  void set property(T? value) {}
   get tearOffGetterNoArgs => readGetter;
   get tearOffGetterRequired => writeSetterRequired;
   get tearOffGetterOptional => writeSetterOptional;
diff --git a/pkg/front_end/testcases/extensions/direct_instance_access.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/extensions/direct_instance_access.dart.textual_outline_modelled.expect
index 00f7edc..f282455 100644
--- a/pkg/front_end/testcases/extensions/direct_instance_access.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/extensions/direct_instance_access.dart.textual_outline_modelled.expect
@@ -1,10 +1,9 @@
-// @dart = 2.9
 class Class {
   var field;
 }
 
 class GenericClass<T> {
-  T field;
+  T? field;
 }
 
 extension Extension on Class {
@@ -24,10 +23,10 @@
 }
 
 extension GenericExtension<T> on GenericClass<T> {
-  T get property => this.field;
-  T readGetter() {}
-  genericWriteSetterNamed<S extends T>({S value}) {}
-  genericWriteSetterOptional<S extends T>([S value]) {}
+  T? get property => this.field;
+  T? readGetter() {}
+  genericWriteSetterNamed<S extends T>({S? value}) {}
+  genericWriteSetterOptional<S extends T>([S? value]) {}
   genericWriteSetterRequired<S extends T>(S value) {}
   get tearOffGetterGenericNamed => genericWriteSetterNamed;
   get tearOffGetterGenericOptional => genericWriteSetterOptional;
@@ -39,9 +38,9 @@
   getterCalls<S extends T>(S value) {}
   invocations<S extends T>(S value) {}
   tearOffs<S extends T>(S value) {}
-  void set property(T value) {}
-  writeSetterNamed({T value}) {}
-  writeSetterOptional([T value]) {}
+  void set property(T? value) {}
+  writeSetterNamed({T? value}) {}
+  writeSetterOptional([T? value]) {}
   writeSetterRequired(T value) {}
 }
 
diff --git a/pkg/front_end/testcases/extensions/direct_instance_access.dart.weak.expect b/pkg/front_end/testcases/extensions/direct_instance_access.dart.weak.expect
index d892e0f..68d2b7e 100644
--- a/pkg/front_end/testcases/extensions/direct_instance_access.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/direct_instance_access.dart.weak.expect
@@ -1,40 +1,20 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Class extends core::Object {
   field dynamic field = null;
-  synthetic constructor •() → self::Class*
+  synthetic constructor •() → self::Class
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class GenericClass<T extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field self::GenericClass::T* field = null;
-  synthetic constructor •() → self::GenericClass<self::GenericClass::T*>*
+class GenericClass<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::GenericClass::T? field = null;
+  synthetic constructor •() → self::GenericClass<self::GenericClass::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension Extension on self::Class* {
+extension Extension on self::Class {
   method readGetter = self::Extension|readGetter;
   tearoff readGetter = self::Extension|get#readGetter;
   method writeSetterRequired = self::Extension|writeSetterRequired;
@@ -56,7 +36,7 @@
   tearoff getterCalls = self::Extension|get#getterCalls;
   set property = self::Extension|set#property;
 }
-extension GenericExtension<T extends core::Object* = dynamic> on self::GenericClass<T*>* {
+extension GenericExtension<T extends core::Object? = dynamic> on self::GenericClass<T%> {
   method readGetter = self::GenericExtension|readGetter;
   tearoff readGetter = self::GenericExtension|get#readGetter;
   method writeSetterRequired = self::GenericExtension|writeSetterRequired;
@@ -87,40 +67,40 @@
   tearoff getterCalls = self::GenericExtension|get#getterCalls;
   set property = self::GenericExtension|set#property;
 }
-static method Extension|get#readGetter(lowered 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(lowered 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(lowered 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(lowered 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(lowered 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(lowered 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(lowered 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(lowered 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(lowered 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(lowered 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(lowered 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(lowered 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(lowered final self::Class* #this) → dynamic
+static method Extension|get#property(lowered final self::Class #this) → dynamic
   return #this.{self::Class::field}{dynamic};
-static method Extension|set#property(lowered 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(lowered 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,23 +108,23 @@
   self::Extension|writeSetterNamed(#this);
   self::Extension|writeSetterNamed(#this, value: value);
 }
-static method Extension|get#invocations(lowered 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(lowered 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(lowered final self::Class* #this, dynamic value) → dynamic {
-  () →* dynamic tearOffNoArgs = self::Extension|get#readGetter(#this);
-  tearOffNoArgs(){() →* dynamic};
-  (dynamic) →* dynamic tearOffRequired = self::Extension|get#writeSetterRequired(#this);
-  tearOffRequired(value){(dynamic) →* dynamic};
-  ([dynamic]) →* dynamic tearOffOptional = self::Extension|get#writeSetterOptional(#this);
-  tearOffOptional(){([dynamic]) →* dynamic};
-  tearOffOptional(value){([dynamic]) →* dynamic};
-  ({value: dynamic}) →* dynamic tearOffNamed = self::Extension|get#writeSetterNamed(#this);
-  tearOffNamed(){({value: dynamic}) →* dynamic};
-  tearOffNamed(value: value){({value: dynamic}) →* dynamic};
+static method Extension|tearOffs(lowered final self::Class #this, dynamic value) → dynamic {
+  () → dynamic tearOffNoArgs = self::Extension|get#readGetter(#this);
+  tearOffNoArgs(){() → dynamic};
+  (dynamic) → dynamic tearOffRequired = self::Extension|get#writeSetterRequired(#this);
+  tearOffRequired(value){(dynamic) → dynamic};
+  ([dynamic]) → dynamic tearOffOptional = self::Extension|get#writeSetterOptional(#this);
+  tearOffOptional(){([dynamic]) → dynamic};
+  tearOffOptional(value){([dynamic]) → dynamic};
+  ({value: dynamic}) → dynamic tearOffNamed = self::Extension|get#writeSetterNamed(#this);
+  tearOffNamed(){({value: dynamic}) → dynamic};
+  tearOffNamed(value: value){({value: dynamic}) → dynamic};
 }
-static method Extension|getterCalls(lowered final self::Class* #this, dynamic value) → dynamic {
+static method Extension|getterCalls(lowered final self::Class #this, dynamic value) → dynamic {
   self::Extension|get#tearOffGetterNoArgs(#this){dynamic}.call();
   self::Extension|get#tearOffGetterRequired(#this){dynamic}.call(value);
   self::Extension|get#tearOffGetterOptional(#this){dynamic}.call();
@@ -152,144 +132,144 @@
   self::Extension|get#tearOffGetterNamed(#this){dynamic}.call();
   self::Extension|get#tearOffGetterNamed(#this){dynamic}.call(value: value);
 }
-static method Extension|get#getterCalls(lowered 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>(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|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>(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>(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#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>(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>(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>(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#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>(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>(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>(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#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>(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>(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>(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#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>(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>(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>(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#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>(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>(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>(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>(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#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>(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>(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>(lowered final self::GenericClass<self::GenericExtension|get#property::T*>* #this) → self::GenericExtension|get#property::T*
-  return #this.{self::GenericClass::field}{self::GenericExtension|get#property::T*};
-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#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}{self::GenericExtension|get#property::T?};
+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>(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>(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>(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>(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>(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>(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>(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>(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);
-  self::GenericExtension|writeSetterOptional<self::GenericExtension|invocations::T*>(#this, value);
-  self::GenericExtension|writeSetterNamed<self::GenericExtension|invocations::T*>(#this);
-  self::GenericExtension|writeSetterNamed<self::GenericExtension|invocations::T*>(#this, value: value);
-  self::GenericExtension|genericWriteSetterRequired<self::GenericExtension|invocations::T*, self::GenericExtension|invocations::S*>(#this, value);
-  self::GenericExtension|genericWriteSetterRequired<self::GenericExtension|invocations::T*, self::GenericExtension|invocations::T*>(#this, value);
-  self::GenericExtension|genericWriteSetterRequired<self::GenericExtension|invocations::T*, self::GenericExtension|invocations::S*>(#this, value);
-  self::GenericExtension|genericWriteSetterOptional<self::GenericExtension|invocations::T*, self::GenericExtension|invocations::T*>(#this);
-  self::GenericExtension|genericWriteSetterOptional<self::GenericExtension|invocations::T*, self::GenericExtension|invocations::T*>(#this);
-  self::GenericExtension|genericWriteSetterOptional<self::GenericExtension|invocations::T*, self::GenericExtension|invocations::S*>(#this);
-  self::GenericExtension|genericWriteSetterOptional<self::GenericExtension|invocations::T*, self::GenericExtension|invocations::S*>(#this, value);
-  self::GenericExtension|genericWriteSetterOptional<self::GenericExtension|invocations::T*, self::GenericExtension|invocations::T*>(#this, value);
-  self::GenericExtension|genericWriteSetterOptional<self::GenericExtension|invocations::T*, self::GenericExtension|invocations::S*>(#this, value);
-  self::GenericExtension|genericWriteSetterNamed<self::GenericExtension|invocations::T*, self::GenericExtension|invocations::T*>(#this);
-  self::GenericExtension|genericWriteSetterNamed<self::GenericExtension|invocations::T*, self::GenericExtension|invocations::T*>(#this);
-  self::GenericExtension|genericWriteSetterNamed<self::GenericExtension|invocations::T*, self::GenericExtension|invocations::S*>(#this);
-  self::GenericExtension|genericWriteSetterNamed<self::GenericExtension|invocations::T*, self::GenericExtension|invocations::S*>(#this, value: value);
-  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#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>(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>(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>(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>(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>(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>(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>(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);
+  self::GenericExtension|writeSetterOptional<self::GenericExtension|invocations::T%>(#this, value);
+  self::GenericExtension|writeSetterNamed<self::GenericExtension|invocations::T%>(#this);
+  self::GenericExtension|writeSetterNamed<self::GenericExtension|invocations::T%>(#this, value: value);
+  self::GenericExtension|genericWriteSetterRequired<self::GenericExtension|invocations::T%, self::GenericExtension|invocations::S%>(#this, value);
+  self::GenericExtension|genericWriteSetterRequired<self::GenericExtension|invocations::T%, self::GenericExtension|invocations::T%>(#this, value);
+  self::GenericExtension|genericWriteSetterRequired<self::GenericExtension|invocations::T%, self::GenericExtension|invocations::S%>(#this, value);
+  self::GenericExtension|genericWriteSetterOptional<self::GenericExtension|invocations::T%, self::GenericExtension|invocations::T%>(#this);
+  self::GenericExtension|genericWriteSetterOptional<self::GenericExtension|invocations::T%, self::GenericExtension|invocations::T%>(#this);
+  self::GenericExtension|genericWriteSetterOptional<self::GenericExtension|invocations::T%, self::GenericExtension|invocations::S%>(#this);
+  self::GenericExtension|genericWriteSetterOptional<self::GenericExtension|invocations::T%, self::GenericExtension|invocations::S%>(#this, value);
+  self::GenericExtension|genericWriteSetterOptional<self::GenericExtension|invocations::T%, self::GenericExtension|invocations::T%>(#this, value);
+  self::GenericExtension|genericWriteSetterOptional<self::GenericExtension|invocations::T%, self::GenericExtension|invocations::S%>(#this, value);
+  self::GenericExtension|genericWriteSetterNamed<self::GenericExtension|invocations::T%, self::GenericExtension|invocations::T%>(#this);
+  self::GenericExtension|genericWriteSetterNamed<self::GenericExtension|invocations::T%, self::GenericExtension|invocations::T%>(#this);
+  self::GenericExtension|genericWriteSetterNamed<self::GenericExtension|invocations::T%, self::GenericExtension|invocations::S%>(#this);
+  self::GenericExtension|genericWriteSetterNamed<self::GenericExtension|invocations::T%, self::GenericExtension|invocations::S%>(#this, value: value);
+  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>(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>(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(){() →* self::GenericExtension|tearOffs::T*};
-  (self::GenericExtension|tearOffs::T*) →* dynamic tearOffRequired = self::GenericExtension|get#writeSetterRequired<self::GenericExtension|tearOffs::T*>(#this);
-  tearOffRequired(value){(self::GenericExtension|tearOffs::T*) →* dynamic};
-  ([self::GenericExtension|tearOffs::T*]) →* dynamic tearOffOptional = self::GenericExtension|get#writeSetterOptional<self::GenericExtension|tearOffs::T*>(#this);
-  tearOffOptional(){([self::GenericExtension|tearOffs::T*]) →* dynamic};
-  tearOffOptional(value){([self::GenericExtension|tearOffs::T*]) →* dynamic};
-  ({value: self::GenericExtension|tearOffs::T*}) →* dynamic tearOffNamed = self::GenericExtension|get#writeSetterNamed<self::GenericExtension|tearOffs::T*>(#this);
-  tearOffNamed(){({value: self::GenericExtension|tearOffs::T*}) →* dynamic};
-  tearOffNamed(value: value){({value: self::GenericExtension|tearOffs::T*}) →* dynamic};
-  <S extends self::GenericExtension|tearOffs::T* = dynamic>(S*) →* dynamic genericTearOffRequired = self::GenericExtension|get#genericWriteSetterRequired<self::GenericExtension|tearOffs::T*>(#this);
-  genericTearOffRequired<self::GenericExtension|tearOffs::S*>(value){(self::GenericExtension|tearOffs::S*) →* dynamic};
-  genericTearOffRequired<self::GenericExtension|tearOffs::T*>(value){(self::GenericExtension|tearOffs::T*) →* dynamic};
-  genericTearOffRequired<self::GenericExtension|tearOffs::S*>(value){(self::GenericExtension|tearOffs::S*) →* dynamic};
-  <S extends self::GenericExtension|tearOffs::T* = dynamic>([S*]) →* dynamic genericTearOffOptional = self::GenericExtension|get#genericWriteSetterOptional<self::GenericExtension|tearOffs::T*>(#this);
-  genericTearOffOptional<self::GenericExtension|tearOffs::T*>(){([self::GenericExtension|tearOffs::T*]) →* dynamic};
-  genericTearOffOptional<self::GenericExtension|tearOffs::T*>(){([self::GenericExtension|tearOffs::T*]) →* dynamic};
-  genericTearOffOptional<self::GenericExtension|tearOffs::S*>(){([self::GenericExtension|tearOffs::S*]) →* dynamic};
-  genericTearOffOptional<self::GenericExtension|tearOffs::S*>(value){([self::GenericExtension|tearOffs::S*]) →* dynamic};
-  genericTearOffOptional<self::GenericExtension|tearOffs::T*>(value){([self::GenericExtension|tearOffs::T*]) →* dynamic};
-  genericTearOffOptional<self::GenericExtension|tearOffs::S*>(value){([self::GenericExtension|tearOffs::S*]) →* dynamic};
-  <S extends self::GenericExtension|tearOffs::T* = dynamic>({value: S*}) →* dynamic genericTearOffNamed = self::GenericExtension|get#genericWriteSetterNamed<self::GenericExtension|tearOffs::T*>(#this);
-  genericTearOffNamed<self::GenericExtension|tearOffs::T*>(){({value: self::GenericExtension|tearOffs::T*}) →* dynamic};
-  genericTearOffNamed<self::GenericExtension|tearOffs::T*>(){({value: self::GenericExtension|tearOffs::T*}) →* dynamic};
-  genericTearOffNamed<self::GenericExtension|tearOffs::S*>(){({value: self::GenericExtension|tearOffs::S*}) →* dynamic};
-  genericTearOffNamed<self::GenericExtension|tearOffs::S*>(value: value){({value: self::GenericExtension|tearOffs::S*}) →* dynamic};
-  genericTearOffNamed<self::GenericExtension|tearOffs::T*>(value: value){({value: self::GenericExtension|tearOffs::T*}) →* dynamic};
-  genericTearOffNamed<self::GenericExtension|tearOffs::S*>(value: value){({value: self::GenericExtension|tearOffs::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>(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(){() → self::GenericExtension|tearOffs::T?};
+  (self::GenericExtension|tearOffs::T%) → dynamic tearOffRequired = self::GenericExtension|get#writeSetterRequired<self::GenericExtension|tearOffs::T%>(#this);
+  tearOffRequired(value){(self::GenericExtension|tearOffs::T%) → dynamic};
+  ([self::GenericExtension|tearOffs::T?]) → dynamic tearOffOptional = self::GenericExtension|get#writeSetterOptional<self::GenericExtension|tearOffs::T%>(#this);
+  tearOffOptional(){([self::GenericExtension|tearOffs::T?]) → dynamic};
+  tearOffOptional(value){([self::GenericExtension|tearOffs::T?]) → dynamic};
+  ({value: self::GenericExtension|tearOffs::T?}) → dynamic tearOffNamed = self::GenericExtension|get#writeSetterNamed<self::GenericExtension|tearOffs::T%>(#this);
+  tearOffNamed(){({value: self::GenericExtension|tearOffs::T?}) → dynamic};
+  tearOffNamed(value: value){({value: self::GenericExtension|tearOffs::T?}) → dynamic};
+  <S extends self::GenericExtension|tearOffs::T% = dynamic>(S%) → dynamic genericTearOffRequired = self::GenericExtension|get#genericWriteSetterRequired<self::GenericExtension|tearOffs::T%>(#this);
+  genericTearOffRequired<self::GenericExtension|tearOffs::S%>(value){(self::GenericExtension|tearOffs::S%) → dynamic};
+  genericTearOffRequired<self::GenericExtension|tearOffs::T%>(value){(self::GenericExtension|tearOffs::T%) → dynamic};
+  genericTearOffRequired<self::GenericExtension|tearOffs::S%>(value){(self::GenericExtension|tearOffs::S%) → dynamic};
+  <S extends self::GenericExtension|tearOffs::T% = dynamic>([S?]) → dynamic genericTearOffOptional = self::GenericExtension|get#genericWriteSetterOptional<self::GenericExtension|tearOffs::T%>(#this);
+  genericTearOffOptional<self::GenericExtension|tearOffs::T%>(){([self::GenericExtension|tearOffs::T?]) → dynamic};
+  genericTearOffOptional<self::GenericExtension|tearOffs::T%>(){([self::GenericExtension|tearOffs::T?]) → dynamic};
+  genericTearOffOptional<self::GenericExtension|tearOffs::S%>(){([self::GenericExtension|tearOffs::S?]) → dynamic};
+  genericTearOffOptional<self::GenericExtension|tearOffs::S%>(value){([self::GenericExtension|tearOffs::S?]) → dynamic};
+  genericTearOffOptional<self::GenericExtension|tearOffs::T%>(value){([self::GenericExtension|tearOffs::T?]) → dynamic};
+  genericTearOffOptional<self::GenericExtension|tearOffs::S%>(value){([self::GenericExtension|tearOffs::S?]) → dynamic};
+  <S extends self::GenericExtension|tearOffs::T% = dynamic>({value: S?}) → dynamic genericTearOffNamed = self::GenericExtension|get#genericWriteSetterNamed<self::GenericExtension|tearOffs::T%>(#this);
+  genericTearOffNamed<self::GenericExtension|tearOffs::T%>(){({value: self::GenericExtension|tearOffs::T?}) → dynamic};
+  genericTearOffNamed<self::GenericExtension|tearOffs::T%>(){({value: self::GenericExtension|tearOffs::T?}) → dynamic};
+  genericTearOffNamed<self::GenericExtension|tearOffs::S%>(){({value: self::GenericExtension|tearOffs::S?}) → dynamic};
+  genericTearOffNamed<self::GenericExtension|tearOffs::S%>(value: value){({value: self::GenericExtension|tearOffs::S?}) → dynamic};
+  genericTearOffNamed<self::GenericExtension|tearOffs::T%>(value: value){({value: self::GenericExtension|tearOffs::T?}) → dynamic};
+  genericTearOffNamed<self::GenericExtension|tearOffs::S%>(value: value){({value: self::GenericExtension|tearOffs::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>(lowered final self::GenericClass<self::GenericExtension|getterCalls::T*>* #this, self::GenericExtension|getterCalls::S* value) → dynamic {
-  self::GenericExtension|get#tearOffGetterNoArgs<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call();
-  self::GenericExtension|get#tearOffGetterRequired<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call(value);
-  self::GenericExtension|get#tearOffGetterOptional<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call();
-  self::GenericExtension|get#tearOffGetterOptional<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call(value);
-  self::GenericExtension|get#tearOffGetterNamed<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call();
-  self::GenericExtension|get#tearOffGetterNamed<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call(value: value);
-  self::GenericExtension|get#tearOffGetterGenericRequired<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call(value);
-  self::GenericExtension|get#tearOffGetterGenericRequired<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call<self::GenericExtension|getterCalls::T*>(value);
-  self::GenericExtension|get#tearOffGetterGenericRequired<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call<self::GenericExtension|getterCalls::S*>(value);
-  self::GenericExtension|get#tearOffGetterGenericOptional<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call();
-  self::GenericExtension|get#tearOffGetterGenericOptional<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call<self::GenericExtension|getterCalls::T*>();
-  self::GenericExtension|get#tearOffGetterGenericOptional<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call<self::GenericExtension|getterCalls::S*>();
-  self::GenericExtension|get#tearOffGetterGenericOptional<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call(value);
-  self::GenericExtension|get#tearOffGetterGenericOptional<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call<self::GenericExtension|getterCalls::T*>(value);
-  self::GenericExtension|get#tearOffGetterGenericOptional<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call<self::GenericExtension|getterCalls::S*>(value);
-  self::GenericExtension|get#tearOffGetterGenericNamed<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call();
-  self::GenericExtension|get#tearOffGetterGenericNamed<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call<self::GenericExtension|getterCalls::T*>();
-  self::GenericExtension|get#tearOffGetterGenericNamed<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call<self::GenericExtension|getterCalls::S*>();
-  self::GenericExtension|get#tearOffGetterGenericNamed<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call(value: value);
-  self::GenericExtension|get#tearOffGetterGenericNamed<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call<self::GenericExtension|getterCalls::T*>(value: value);
-  self::GenericExtension|get#tearOffGetterGenericNamed<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call<self::GenericExtension|getterCalls::S*>(value: value);
+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>(lowered final self::GenericClass<self::GenericExtension|getterCalls::T%> #this, self::GenericExtension|getterCalls::S% value) → dynamic {
+  self::GenericExtension|get#tearOffGetterNoArgs<self::GenericExtension|getterCalls::T%>(#this){dynamic}.call();
+  self::GenericExtension|get#tearOffGetterRequired<self::GenericExtension|getterCalls::T%>(#this){dynamic}.call(value);
+  self::GenericExtension|get#tearOffGetterOptional<self::GenericExtension|getterCalls::T%>(#this){dynamic}.call();
+  self::GenericExtension|get#tearOffGetterOptional<self::GenericExtension|getterCalls::T%>(#this){dynamic}.call(value);
+  self::GenericExtension|get#tearOffGetterNamed<self::GenericExtension|getterCalls::T%>(#this){dynamic}.call();
+  self::GenericExtension|get#tearOffGetterNamed<self::GenericExtension|getterCalls::T%>(#this){dynamic}.call(value: value);
+  self::GenericExtension|get#tearOffGetterGenericRequired<self::GenericExtension|getterCalls::T%>(#this){dynamic}.call(value);
+  self::GenericExtension|get#tearOffGetterGenericRequired<self::GenericExtension|getterCalls::T%>(#this){dynamic}.call<self::GenericExtension|getterCalls::T%>(value);
+  self::GenericExtension|get#tearOffGetterGenericRequired<self::GenericExtension|getterCalls::T%>(#this){dynamic}.call<self::GenericExtension|getterCalls::S%>(value);
+  self::GenericExtension|get#tearOffGetterGenericOptional<self::GenericExtension|getterCalls::T%>(#this){dynamic}.call();
+  self::GenericExtension|get#tearOffGetterGenericOptional<self::GenericExtension|getterCalls::T%>(#this){dynamic}.call<self::GenericExtension|getterCalls::T%>();
+  self::GenericExtension|get#tearOffGetterGenericOptional<self::GenericExtension|getterCalls::T%>(#this){dynamic}.call<self::GenericExtension|getterCalls::S%>();
+  self::GenericExtension|get#tearOffGetterGenericOptional<self::GenericExtension|getterCalls::T%>(#this){dynamic}.call(value);
+  self::GenericExtension|get#tearOffGetterGenericOptional<self::GenericExtension|getterCalls::T%>(#this){dynamic}.call<self::GenericExtension|getterCalls::T%>(value);
+  self::GenericExtension|get#tearOffGetterGenericOptional<self::GenericExtension|getterCalls::T%>(#this){dynamic}.call<self::GenericExtension|getterCalls::S%>(value);
+  self::GenericExtension|get#tearOffGetterGenericNamed<self::GenericExtension|getterCalls::T%>(#this){dynamic}.call();
+  self::GenericExtension|get#tearOffGetterGenericNamed<self::GenericExtension|getterCalls::T%>(#this){dynamic}.call<self::GenericExtension|getterCalls::T%>();
+  self::GenericExtension|get#tearOffGetterGenericNamed<self::GenericExtension|getterCalls::T%>(#this){dynamic}.call<self::GenericExtension|getterCalls::S%>();
+  self::GenericExtension|get#tearOffGetterGenericNamed<self::GenericExtension|getterCalls::T%>(#this){dynamic}.call(value: value);
+  self::GenericExtension|get#tearOffGetterGenericNamed<self::GenericExtension|getterCalls::T%>(#this){dynamic}.call<self::GenericExtension|getterCalls::T%>(value: value);
+  self::GenericExtension|get#tearOffGetterGenericNamed<self::GenericExtension|getterCalls::T%>(#this){dynamic}.call<self::GenericExtension|getterCalls::S%>(value: value);
 }
-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 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 {}
 
 constants  {
diff --git a/pkg/front_end/testcases/extensions/direct_instance_access.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/direct_instance_access.dart.weak.modular.expect
index d892e0f..68d2b7e 100644
--- a/pkg/front_end/testcases/extensions/direct_instance_access.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/extensions/direct_instance_access.dart.weak.modular.expect
@@ -1,40 +1,20 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Class extends core::Object {
   field dynamic field = null;
-  synthetic constructor •() → self::Class*
+  synthetic constructor •() → self::Class
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class GenericClass<T extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field self::GenericClass::T* field = null;
-  synthetic constructor •() → self::GenericClass<self::GenericClass::T*>*
+class GenericClass<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::GenericClass::T? field = null;
+  synthetic constructor •() → self::GenericClass<self::GenericClass::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension Extension on self::Class* {
+extension Extension on self::Class {
   method readGetter = self::Extension|readGetter;
   tearoff readGetter = self::Extension|get#readGetter;
   method writeSetterRequired = self::Extension|writeSetterRequired;
@@ -56,7 +36,7 @@
   tearoff getterCalls = self::Extension|get#getterCalls;
   set property = self::Extension|set#property;
 }
-extension GenericExtension<T extends core::Object* = dynamic> on self::GenericClass<T*>* {
+extension GenericExtension<T extends core::Object? = dynamic> on self::GenericClass<T%> {
   method readGetter = self::GenericExtension|readGetter;
   tearoff readGetter = self::GenericExtension|get#readGetter;
   method writeSetterRequired = self::GenericExtension|writeSetterRequired;
@@ -87,40 +67,40 @@
   tearoff getterCalls = self::GenericExtension|get#getterCalls;
   set property = self::GenericExtension|set#property;
 }
-static method Extension|get#readGetter(lowered 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(lowered 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(lowered 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(lowered 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(lowered 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(lowered 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(lowered 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(lowered 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(lowered 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(lowered 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(lowered 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(lowered 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(lowered final self::Class* #this) → dynamic
+static method Extension|get#property(lowered final self::Class #this) → dynamic
   return #this.{self::Class::field}{dynamic};
-static method Extension|set#property(lowered 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(lowered 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,23 +108,23 @@
   self::Extension|writeSetterNamed(#this);
   self::Extension|writeSetterNamed(#this, value: value);
 }
-static method Extension|get#invocations(lowered 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(lowered 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(lowered final self::Class* #this, dynamic value) → dynamic {
-  () →* dynamic tearOffNoArgs = self::Extension|get#readGetter(#this);
-  tearOffNoArgs(){() →* dynamic};
-  (dynamic) →* dynamic tearOffRequired = self::Extension|get#writeSetterRequired(#this);
-  tearOffRequired(value){(dynamic) →* dynamic};
-  ([dynamic]) →* dynamic tearOffOptional = self::Extension|get#writeSetterOptional(#this);
-  tearOffOptional(){([dynamic]) →* dynamic};
-  tearOffOptional(value){([dynamic]) →* dynamic};
-  ({value: dynamic}) →* dynamic tearOffNamed = self::Extension|get#writeSetterNamed(#this);
-  tearOffNamed(){({value: dynamic}) →* dynamic};
-  tearOffNamed(value: value){({value: dynamic}) →* dynamic};
+static method Extension|tearOffs(lowered final self::Class #this, dynamic value) → dynamic {
+  () → dynamic tearOffNoArgs = self::Extension|get#readGetter(#this);
+  tearOffNoArgs(){() → dynamic};
+  (dynamic) → dynamic tearOffRequired = self::Extension|get#writeSetterRequired(#this);
+  tearOffRequired(value){(dynamic) → dynamic};
+  ([dynamic]) → dynamic tearOffOptional = self::Extension|get#writeSetterOptional(#this);
+  tearOffOptional(){([dynamic]) → dynamic};
+  tearOffOptional(value){([dynamic]) → dynamic};
+  ({value: dynamic}) → dynamic tearOffNamed = self::Extension|get#writeSetterNamed(#this);
+  tearOffNamed(){({value: dynamic}) → dynamic};
+  tearOffNamed(value: value){({value: dynamic}) → dynamic};
 }
-static method Extension|getterCalls(lowered final self::Class* #this, dynamic value) → dynamic {
+static method Extension|getterCalls(lowered final self::Class #this, dynamic value) → dynamic {
   self::Extension|get#tearOffGetterNoArgs(#this){dynamic}.call();
   self::Extension|get#tearOffGetterRequired(#this){dynamic}.call(value);
   self::Extension|get#tearOffGetterOptional(#this){dynamic}.call();
@@ -152,144 +132,144 @@
   self::Extension|get#tearOffGetterNamed(#this){dynamic}.call();
   self::Extension|get#tearOffGetterNamed(#this){dynamic}.call(value: value);
 }
-static method Extension|get#getterCalls(lowered 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>(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|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>(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>(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#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>(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>(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>(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#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>(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>(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>(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#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>(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>(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>(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#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>(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>(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>(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#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>(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>(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>(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>(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#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>(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>(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>(lowered final self::GenericClass<self::GenericExtension|get#property::T*>* #this) → self::GenericExtension|get#property::T*
-  return #this.{self::GenericClass::field}{self::GenericExtension|get#property::T*};
-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#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}{self::GenericExtension|get#property::T?};
+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>(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>(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>(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>(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>(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>(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>(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>(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);
-  self::GenericExtension|writeSetterOptional<self::GenericExtension|invocations::T*>(#this, value);
-  self::GenericExtension|writeSetterNamed<self::GenericExtension|invocations::T*>(#this);
-  self::GenericExtension|writeSetterNamed<self::GenericExtension|invocations::T*>(#this, value: value);
-  self::GenericExtension|genericWriteSetterRequired<self::GenericExtension|invocations::T*, self::GenericExtension|invocations::S*>(#this, value);
-  self::GenericExtension|genericWriteSetterRequired<self::GenericExtension|invocations::T*, self::GenericExtension|invocations::T*>(#this, value);
-  self::GenericExtension|genericWriteSetterRequired<self::GenericExtension|invocations::T*, self::GenericExtension|invocations::S*>(#this, value);
-  self::GenericExtension|genericWriteSetterOptional<self::GenericExtension|invocations::T*, self::GenericExtension|invocations::T*>(#this);
-  self::GenericExtension|genericWriteSetterOptional<self::GenericExtension|invocations::T*, self::GenericExtension|invocations::T*>(#this);
-  self::GenericExtension|genericWriteSetterOptional<self::GenericExtension|invocations::T*, self::GenericExtension|invocations::S*>(#this);
-  self::GenericExtension|genericWriteSetterOptional<self::GenericExtension|invocations::T*, self::GenericExtension|invocations::S*>(#this, value);
-  self::GenericExtension|genericWriteSetterOptional<self::GenericExtension|invocations::T*, self::GenericExtension|invocations::T*>(#this, value);
-  self::GenericExtension|genericWriteSetterOptional<self::GenericExtension|invocations::T*, self::GenericExtension|invocations::S*>(#this, value);
-  self::GenericExtension|genericWriteSetterNamed<self::GenericExtension|invocations::T*, self::GenericExtension|invocations::T*>(#this);
-  self::GenericExtension|genericWriteSetterNamed<self::GenericExtension|invocations::T*, self::GenericExtension|invocations::T*>(#this);
-  self::GenericExtension|genericWriteSetterNamed<self::GenericExtension|invocations::T*, self::GenericExtension|invocations::S*>(#this);
-  self::GenericExtension|genericWriteSetterNamed<self::GenericExtension|invocations::T*, self::GenericExtension|invocations::S*>(#this, value: value);
-  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#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>(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>(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>(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>(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>(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>(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>(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);
+  self::GenericExtension|writeSetterOptional<self::GenericExtension|invocations::T%>(#this, value);
+  self::GenericExtension|writeSetterNamed<self::GenericExtension|invocations::T%>(#this);
+  self::GenericExtension|writeSetterNamed<self::GenericExtension|invocations::T%>(#this, value: value);
+  self::GenericExtension|genericWriteSetterRequired<self::GenericExtension|invocations::T%, self::GenericExtension|invocations::S%>(#this, value);
+  self::GenericExtension|genericWriteSetterRequired<self::GenericExtension|invocations::T%, self::GenericExtension|invocations::T%>(#this, value);
+  self::GenericExtension|genericWriteSetterRequired<self::GenericExtension|invocations::T%, self::GenericExtension|invocations::S%>(#this, value);
+  self::GenericExtension|genericWriteSetterOptional<self::GenericExtension|invocations::T%, self::GenericExtension|invocations::T%>(#this);
+  self::GenericExtension|genericWriteSetterOptional<self::GenericExtension|invocations::T%, self::GenericExtension|invocations::T%>(#this);
+  self::GenericExtension|genericWriteSetterOptional<self::GenericExtension|invocations::T%, self::GenericExtension|invocations::S%>(#this);
+  self::GenericExtension|genericWriteSetterOptional<self::GenericExtension|invocations::T%, self::GenericExtension|invocations::S%>(#this, value);
+  self::GenericExtension|genericWriteSetterOptional<self::GenericExtension|invocations::T%, self::GenericExtension|invocations::T%>(#this, value);
+  self::GenericExtension|genericWriteSetterOptional<self::GenericExtension|invocations::T%, self::GenericExtension|invocations::S%>(#this, value);
+  self::GenericExtension|genericWriteSetterNamed<self::GenericExtension|invocations::T%, self::GenericExtension|invocations::T%>(#this);
+  self::GenericExtension|genericWriteSetterNamed<self::GenericExtension|invocations::T%, self::GenericExtension|invocations::T%>(#this);
+  self::GenericExtension|genericWriteSetterNamed<self::GenericExtension|invocations::T%, self::GenericExtension|invocations::S%>(#this);
+  self::GenericExtension|genericWriteSetterNamed<self::GenericExtension|invocations::T%, self::GenericExtension|invocations::S%>(#this, value: value);
+  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>(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>(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(){() →* self::GenericExtension|tearOffs::T*};
-  (self::GenericExtension|tearOffs::T*) →* dynamic tearOffRequired = self::GenericExtension|get#writeSetterRequired<self::GenericExtension|tearOffs::T*>(#this);
-  tearOffRequired(value){(self::GenericExtension|tearOffs::T*) →* dynamic};
-  ([self::GenericExtension|tearOffs::T*]) →* dynamic tearOffOptional = self::GenericExtension|get#writeSetterOptional<self::GenericExtension|tearOffs::T*>(#this);
-  tearOffOptional(){([self::GenericExtension|tearOffs::T*]) →* dynamic};
-  tearOffOptional(value){([self::GenericExtension|tearOffs::T*]) →* dynamic};
-  ({value: self::GenericExtension|tearOffs::T*}) →* dynamic tearOffNamed = self::GenericExtension|get#writeSetterNamed<self::GenericExtension|tearOffs::T*>(#this);
-  tearOffNamed(){({value: self::GenericExtension|tearOffs::T*}) →* dynamic};
-  tearOffNamed(value: value){({value: self::GenericExtension|tearOffs::T*}) →* dynamic};
-  <S extends self::GenericExtension|tearOffs::T* = dynamic>(S*) →* dynamic genericTearOffRequired = self::GenericExtension|get#genericWriteSetterRequired<self::GenericExtension|tearOffs::T*>(#this);
-  genericTearOffRequired<self::GenericExtension|tearOffs::S*>(value){(self::GenericExtension|tearOffs::S*) →* dynamic};
-  genericTearOffRequired<self::GenericExtension|tearOffs::T*>(value){(self::GenericExtension|tearOffs::T*) →* dynamic};
-  genericTearOffRequired<self::GenericExtension|tearOffs::S*>(value){(self::GenericExtension|tearOffs::S*) →* dynamic};
-  <S extends self::GenericExtension|tearOffs::T* = dynamic>([S*]) →* dynamic genericTearOffOptional = self::GenericExtension|get#genericWriteSetterOptional<self::GenericExtension|tearOffs::T*>(#this);
-  genericTearOffOptional<self::GenericExtension|tearOffs::T*>(){([self::GenericExtension|tearOffs::T*]) →* dynamic};
-  genericTearOffOptional<self::GenericExtension|tearOffs::T*>(){([self::GenericExtension|tearOffs::T*]) →* dynamic};
-  genericTearOffOptional<self::GenericExtension|tearOffs::S*>(){([self::GenericExtension|tearOffs::S*]) →* dynamic};
-  genericTearOffOptional<self::GenericExtension|tearOffs::S*>(value){([self::GenericExtension|tearOffs::S*]) →* dynamic};
-  genericTearOffOptional<self::GenericExtension|tearOffs::T*>(value){([self::GenericExtension|tearOffs::T*]) →* dynamic};
-  genericTearOffOptional<self::GenericExtension|tearOffs::S*>(value){([self::GenericExtension|tearOffs::S*]) →* dynamic};
-  <S extends self::GenericExtension|tearOffs::T* = dynamic>({value: S*}) →* dynamic genericTearOffNamed = self::GenericExtension|get#genericWriteSetterNamed<self::GenericExtension|tearOffs::T*>(#this);
-  genericTearOffNamed<self::GenericExtension|tearOffs::T*>(){({value: self::GenericExtension|tearOffs::T*}) →* dynamic};
-  genericTearOffNamed<self::GenericExtension|tearOffs::T*>(){({value: self::GenericExtension|tearOffs::T*}) →* dynamic};
-  genericTearOffNamed<self::GenericExtension|tearOffs::S*>(){({value: self::GenericExtension|tearOffs::S*}) →* dynamic};
-  genericTearOffNamed<self::GenericExtension|tearOffs::S*>(value: value){({value: self::GenericExtension|tearOffs::S*}) →* dynamic};
-  genericTearOffNamed<self::GenericExtension|tearOffs::T*>(value: value){({value: self::GenericExtension|tearOffs::T*}) →* dynamic};
-  genericTearOffNamed<self::GenericExtension|tearOffs::S*>(value: value){({value: self::GenericExtension|tearOffs::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>(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(){() → self::GenericExtension|tearOffs::T?};
+  (self::GenericExtension|tearOffs::T%) → dynamic tearOffRequired = self::GenericExtension|get#writeSetterRequired<self::GenericExtension|tearOffs::T%>(#this);
+  tearOffRequired(value){(self::GenericExtension|tearOffs::T%) → dynamic};
+  ([self::GenericExtension|tearOffs::T?]) → dynamic tearOffOptional = self::GenericExtension|get#writeSetterOptional<self::GenericExtension|tearOffs::T%>(#this);
+  tearOffOptional(){([self::GenericExtension|tearOffs::T?]) → dynamic};
+  tearOffOptional(value){([self::GenericExtension|tearOffs::T?]) → dynamic};
+  ({value: self::GenericExtension|tearOffs::T?}) → dynamic tearOffNamed = self::GenericExtension|get#writeSetterNamed<self::GenericExtension|tearOffs::T%>(#this);
+  tearOffNamed(){({value: self::GenericExtension|tearOffs::T?}) → dynamic};
+  tearOffNamed(value: value){({value: self::GenericExtension|tearOffs::T?}) → dynamic};
+  <S extends self::GenericExtension|tearOffs::T% = dynamic>(S%) → dynamic genericTearOffRequired = self::GenericExtension|get#genericWriteSetterRequired<self::GenericExtension|tearOffs::T%>(#this);
+  genericTearOffRequired<self::GenericExtension|tearOffs::S%>(value){(self::GenericExtension|tearOffs::S%) → dynamic};
+  genericTearOffRequired<self::GenericExtension|tearOffs::T%>(value){(self::GenericExtension|tearOffs::T%) → dynamic};
+  genericTearOffRequired<self::GenericExtension|tearOffs::S%>(value){(self::GenericExtension|tearOffs::S%) → dynamic};
+  <S extends self::GenericExtension|tearOffs::T% = dynamic>([S?]) → dynamic genericTearOffOptional = self::GenericExtension|get#genericWriteSetterOptional<self::GenericExtension|tearOffs::T%>(#this);
+  genericTearOffOptional<self::GenericExtension|tearOffs::T%>(){([self::GenericExtension|tearOffs::T?]) → dynamic};
+  genericTearOffOptional<self::GenericExtension|tearOffs::T%>(){([self::GenericExtension|tearOffs::T?]) → dynamic};
+  genericTearOffOptional<self::GenericExtension|tearOffs::S%>(){([self::GenericExtension|tearOffs::S?]) → dynamic};
+  genericTearOffOptional<self::GenericExtension|tearOffs::S%>(value){([self::GenericExtension|tearOffs::S?]) → dynamic};
+  genericTearOffOptional<self::GenericExtension|tearOffs::T%>(value){([self::GenericExtension|tearOffs::T?]) → dynamic};
+  genericTearOffOptional<self::GenericExtension|tearOffs::S%>(value){([self::GenericExtension|tearOffs::S?]) → dynamic};
+  <S extends self::GenericExtension|tearOffs::T% = dynamic>({value: S?}) → dynamic genericTearOffNamed = self::GenericExtension|get#genericWriteSetterNamed<self::GenericExtension|tearOffs::T%>(#this);
+  genericTearOffNamed<self::GenericExtension|tearOffs::T%>(){({value: self::GenericExtension|tearOffs::T?}) → dynamic};
+  genericTearOffNamed<self::GenericExtension|tearOffs::T%>(){({value: self::GenericExtension|tearOffs::T?}) → dynamic};
+  genericTearOffNamed<self::GenericExtension|tearOffs::S%>(){({value: self::GenericExtension|tearOffs::S?}) → dynamic};
+  genericTearOffNamed<self::GenericExtension|tearOffs::S%>(value: value){({value: self::GenericExtension|tearOffs::S?}) → dynamic};
+  genericTearOffNamed<self::GenericExtension|tearOffs::T%>(value: value){({value: self::GenericExtension|tearOffs::T?}) → dynamic};
+  genericTearOffNamed<self::GenericExtension|tearOffs::S%>(value: value){({value: self::GenericExtension|tearOffs::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>(lowered final self::GenericClass<self::GenericExtension|getterCalls::T*>* #this, self::GenericExtension|getterCalls::S* value) → dynamic {
-  self::GenericExtension|get#tearOffGetterNoArgs<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call();
-  self::GenericExtension|get#tearOffGetterRequired<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call(value);
-  self::GenericExtension|get#tearOffGetterOptional<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call();
-  self::GenericExtension|get#tearOffGetterOptional<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call(value);
-  self::GenericExtension|get#tearOffGetterNamed<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call();
-  self::GenericExtension|get#tearOffGetterNamed<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call(value: value);
-  self::GenericExtension|get#tearOffGetterGenericRequired<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call(value);
-  self::GenericExtension|get#tearOffGetterGenericRequired<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call<self::GenericExtension|getterCalls::T*>(value);
-  self::GenericExtension|get#tearOffGetterGenericRequired<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call<self::GenericExtension|getterCalls::S*>(value);
-  self::GenericExtension|get#tearOffGetterGenericOptional<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call();
-  self::GenericExtension|get#tearOffGetterGenericOptional<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call<self::GenericExtension|getterCalls::T*>();
-  self::GenericExtension|get#tearOffGetterGenericOptional<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call<self::GenericExtension|getterCalls::S*>();
-  self::GenericExtension|get#tearOffGetterGenericOptional<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call(value);
-  self::GenericExtension|get#tearOffGetterGenericOptional<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call<self::GenericExtension|getterCalls::T*>(value);
-  self::GenericExtension|get#tearOffGetterGenericOptional<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call<self::GenericExtension|getterCalls::S*>(value);
-  self::GenericExtension|get#tearOffGetterGenericNamed<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call();
-  self::GenericExtension|get#tearOffGetterGenericNamed<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call<self::GenericExtension|getterCalls::T*>();
-  self::GenericExtension|get#tearOffGetterGenericNamed<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call<self::GenericExtension|getterCalls::S*>();
-  self::GenericExtension|get#tearOffGetterGenericNamed<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call(value: value);
-  self::GenericExtension|get#tearOffGetterGenericNamed<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call<self::GenericExtension|getterCalls::T*>(value: value);
-  self::GenericExtension|get#tearOffGetterGenericNamed<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call<self::GenericExtension|getterCalls::S*>(value: value);
+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>(lowered final self::GenericClass<self::GenericExtension|getterCalls::T%> #this, self::GenericExtension|getterCalls::S% value) → dynamic {
+  self::GenericExtension|get#tearOffGetterNoArgs<self::GenericExtension|getterCalls::T%>(#this){dynamic}.call();
+  self::GenericExtension|get#tearOffGetterRequired<self::GenericExtension|getterCalls::T%>(#this){dynamic}.call(value);
+  self::GenericExtension|get#tearOffGetterOptional<self::GenericExtension|getterCalls::T%>(#this){dynamic}.call();
+  self::GenericExtension|get#tearOffGetterOptional<self::GenericExtension|getterCalls::T%>(#this){dynamic}.call(value);
+  self::GenericExtension|get#tearOffGetterNamed<self::GenericExtension|getterCalls::T%>(#this){dynamic}.call();
+  self::GenericExtension|get#tearOffGetterNamed<self::GenericExtension|getterCalls::T%>(#this){dynamic}.call(value: value);
+  self::GenericExtension|get#tearOffGetterGenericRequired<self::GenericExtension|getterCalls::T%>(#this){dynamic}.call(value);
+  self::GenericExtension|get#tearOffGetterGenericRequired<self::GenericExtension|getterCalls::T%>(#this){dynamic}.call<self::GenericExtension|getterCalls::T%>(value);
+  self::GenericExtension|get#tearOffGetterGenericRequired<self::GenericExtension|getterCalls::T%>(#this){dynamic}.call<self::GenericExtension|getterCalls::S%>(value);
+  self::GenericExtension|get#tearOffGetterGenericOptional<self::GenericExtension|getterCalls::T%>(#this){dynamic}.call();
+  self::GenericExtension|get#tearOffGetterGenericOptional<self::GenericExtension|getterCalls::T%>(#this){dynamic}.call<self::GenericExtension|getterCalls::T%>();
+  self::GenericExtension|get#tearOffGetterGenericOptional<self::GenericExtension|getterCalls::T%>(#this){dynamic}.call<self::GenericExtension|getterCalls::S%>();
+  self::GenericExtension|get#tearOffGetterGenericOptional<self::GenericExtension|getterCalls::T%>(#this){dynamic}.call(value);
+  self::GenericExtension|get#tearOffGetterGenericOptional<self::GenericExtension|getterCalls::T%>(#this){dynamic}.call<self::GenericExtension|getterCalls::T%>(value);
+  self::GenericExtension|get#tearOffGetterGenericOptional<self::GenericExtension|getterCalls::T%>(#this){dynamic}.call<self::GenericExtension|getterCalls::S%>(value);
+  self::GenericExtension|get#tearOffGetterGenericNamed<self::GenericExtension|getterCalls::T%>(#this){dynamic}.call();
+  self::GenericExtension|get#tearOffGetterGenericNamed<self::GenericExtension|getterCalls::T%>(#this){dynamic}.call<self::GenericExtension|getterCalls::T%>();
+  self::GenericExtension|get#tearOffGetterGenericNamed<self::GenericExtension|getterCalls::T%>(#this){dynamic}.call<self::GenericExtension|getterCalls::S%>();
+  self::GenericExtension|get#tearOffGetterGenericNamed<self::GenericExtension|getterCalls::T%>(#this){dynamic}.call(value: value);
+  self::GenericExtension|get#tearOffGetterGenericNamed<self::GenericExtension|getterCalls::T%>(#this){dynamic}.call<self::GenericExtension|getterCalls::T%>(value: value);
+  self::GenericExtension|get#tearOffGetterGenericNamed<self::GenericExtension|getterCalls::T%>(#this){dynamic}.call<self::GenericExtension|getterCalls::S%>(value: value);
 }
-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 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 {}
 
 constants  {
diff --git a/pkg/front_end/testcases/extensions/direct_instance_access.dart.weak.outline.expect b/pkg/front_end/testcases/extensions/direct_instance_access.dart.weak.outline.expect
index c697396..293acc8 100644
--- a/pkg/front_end/testcases/extensions/direct_instance_access.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extensions/direct_instance_access.dart.weak.outline.expect
@@ -1,38 +1,18 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Class extends core::Object {
   field dynamic field;
-  synthetic constructor •() → self::Class*
+  synthetic constructor •() → self::Class
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class GenericClass<T extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field self::GenericClass::T* field;
-  synthetic constructor •() → self::GenericClass<self::GenericClass::T*>*
+class GenericClass<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::GenericClass::T? field;
+  synthetic constructor •() → self::GenericClass<self::GenericClass::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension Extension on self::Class* {
+extension Extension on self::Class {
   method readGetter = self::Extension|readGetter;
   tearoff readGetter = self::Extension|get#readGetter;
   method writeSetterRequired = self::Extension|writeSetterRequired;
@@ -54,7 +34,7 @@
   tearoff getterCalls = self::Extension|get#getterCalls;
   set property = self::Extension|set#property;
 }
-extension GenericExtension<T extends core::Object* = dynamic> on self::GenericClass<T*>* {
+extension GenericExtension<T extends core::Object? = dynamic> on self::GenericClass<T%> {
   method readGetter = self::GenericExtension|readGetter;
   tearoff readGetter = self::GenericExtension|get#readGetter;
   method writeSetterRequired = self::GenericExtension|writeSetterRequired;
@@ -85,103 +65,103 @@
   tearoff getterCalls = self::GenericExtension|get#getterCalls;
   set property = self::GenericExtension|set#property;
 }
-static method Extension|get#readGetter(lowered 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(lowered final self::Class* #this) → dynamic
+static method Extension|readGetter(lowered final self::Class #this) → dynamic
   ;
-static method Extension|writeSetterRequired(lowered final self::Class* #this, dynamic value) → dynamic
+static method Extension|writeSetterRequired(lowered final self::Class #this, dynamic value) → dynamic
   ;
-static method Extension|get#writeSetterRequired(lowered 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(lowered final self::Class* #this, [dynamic value]) → dynamic
+static method Extension|writeSetterOptional(lowered final self::Class #this, [dynamic value]) → dynamic
   ;
-static method Extension|get#writeSetterOptional(lowered 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(lowered final self::Class* #this, {dynamic value}) → dynamic
+static method Extension|writeSetterNamed(lowered final self::Class #this, {dynamic value}) → dynamic
   ;
-static method Extension|get#writeSetterNamed(lowered 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(lowered final self::Class* #this) → dynamic
+static method Extension|get#tearOffGetterNoArgs(lowered final self::Class #this) → dynamic
   ;
-static method Extension|get#tearOffGetterRequired(lowered final self::Class* #this) → dynamic
+static method Extension|get#tearOffGetterRequired(lowered final self::Class #this) → dynamic
   ;
-static method Extension|get#tearOffGetterOptional(lowered final self::Class* #this) → dynamic
+static method Extension|get#tearOffGetterOptional(lowered final self::Class #this) → dynamic
   ;
-static method Extension|get#tearOffGetterNamed(lowered final self::Class* #this) → dynamic
+static method Extension|get#tearOffGetterNamed(lowered final self::Class #this) → dynamic
   ;
-static method Extension|get#property(lowered final self::Class* #this) → dynamic
+static method Extension|get#property(lowered final self::Class #this) → dynamic
   ;
-static method Extension|set#property(lowered final self::Class* #this, dynamic value) → void
+static method Extension|set#property(lowered final self::Class #this, dynamic value) → void
   ;
-static method Extension|invocations(lowered final self::Class* #this, dynamic value) → dynamic
+static method Extension|invocations(lowered final self::Class #this, dynamic value) → dynamic
   ;
-static method Extension|get#invocations(lowered 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(lowered 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(lowered final self::Class* #this, dynamic value) → dynamic
+static method Extension|tearOffs(lowered final self::Class #this, dynamic value) → dynamic
   ;
-static method Extension|getterCalls(lowered final self::Class* #this, dynamic value) → dynamic
+static method Extension|getterCalls(lowered final self::Class #this, dynamic value) → dynamic
   ;
-static method Extension|get#getterCalls(lowered 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>(lowered 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>(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>(lowered final self::GenericClass<self::GenericExtension|writeSetterRequired::T*>* #this, self::GenericExtension|writeSetterRequired::T* value) → dynamic
+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>(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>(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>(lowered final self::GenericClass<self::GenericExtension|writeSetterOptional::T*>* #this, [self::GenericExtension|writeSetterOptional::T* value]) → 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>(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>(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>(lowered final self::GenericClass<self::GenericExtension|writeSetterNamed::T*>* #this, {self::GenericExtension|writeSetterNamed::T* value}) → 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>(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>(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>(lowered final self::GenericClass<self::GenericExtension|genericWriteSetterRequired::T*>* #this, self::GenericExtension|genericWriteSetterRequired::S* value) → 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>(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>(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>(lowered final self::GenericClass<self::GenericExtension|genericWriteSetterOptional::T*>* #this, [self::GenericExtension|genericWriteSetterOptional::S* value]) → 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>(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>(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>(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>(lowered final self::GenericClass<self::GenericExtension|genericWriteSetterNamed::T*>* #this, {self::GenericExtension|genericWriteSetterNamed::S* value}) → 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>(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>(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>(lowered 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>(lowered 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>(lowered 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>(lowered 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>(lowered 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>(lowered 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>(lowered 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>(lowered 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>(lowered 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>(lowered 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>(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>(lowered final self::GenericClass<self::GenericExtension|tearOffs::T*>* #this, self::GenericExtension|tearOffs::S* value) → 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>(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>(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>(lowered final self::GenericClass<self::GenericExtension|getterCalls::T*>* #this, self::GenericExtension|getterCalls::S* value) → 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>(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>(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 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.weak.transformed.expect b/pkg/front_end/testcases/extensions/direct_instance_access.dart.weak.transformed.expect
index d892e0f..68d2b7e 100644
--- a/pkg/front_end/testcases/extensions/direct_instance_access.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/direct_instance_access.dart.weak.transformed.expect
@@ -1,40 +1,20 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Class extends core::Object {
   field dynamic field = null;
-  synthetic constructor •() → self::Class*
+  synthetic constructor •() → self::Class
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class GenericClass<T extends core::Object* = dynamic> extends core::Object {
-  covariant-by-class field self::GenericClass::T* field = null;
-  synthetic constructor •() → self::GenericClass<self::GenericClass::T*>*
+class GenericClass<T extends core::Object? = dynamic> extends core::Object {
+  covariant-by-class field self::GenericClass::T? field = null;
+  synthetic constructor •() → self::GenericClass<self::GenericClass::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension Extension on self::Class* {
+extension Extension on self::Class {
   method readGetter = self::Extension|readGetter;
   tearoff readGetter = self::Extension|get#readGetter;
   method writeSetterRequired = self::Extension|writeSetterRequired;
@@ -56,7 +36,7 @@
   tearoff getterCalls = self::Extension|get#getterCalls;
   set property = self::Extension|set#property;
 }
-extension GenericExtension<T extends core::Object* = dynamic> on self::GenericClass<T*>* {
+extension GenericExtension<T extends core::Object? = dynamic> on self::GenericClass<T%> {
   method readGetter = self::GenericExtension|readGetter;
   tearoff readGetter = self::GenericExtension|get#readGetter;
   method writeSetterRequired = self::GenericExtension|writeSetterRequired;
@@ -87,40 +67,40 @@
   tearoff getterCalls = self::GenericExtension|get#getterCalls;
   set property = self::GenericExtension|set#property;
 }
-static method Extension|get#readGetter(lowered 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(lowered 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(lowered 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(lowered 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(lowered 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(lowered 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(lowered 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(lowered 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(lowered 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(lowered 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(lowered 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(lowered 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(lowered final self::Class* #this) → dynamic
+static method Extension|get#property(lowered final self::Class #this) → dynamic
   return #this.{self::Class::field}{dynamic};
-static method Extension|set#property(lowered 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(lowered 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,23 +108,23 @@
   self::Extension|writeSetterNamed(#this);
   self::Extension|writeSetterNamed(#this, value: value);
 }
-static method Extension|get#invocations(lowered 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(lowered 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(lowered final self::Class* #this, dynamic value) → dynamic {
-  () →* dynamic tearOffNoArgs = self::Extension|get#readGetter(#this);
-  tearOffNoArgs(){() →* dynamic};
-  (dynamic) →* dynamic tearOffRequired = self::Extension|get#writeSetterRequired(#this);
-  tearOffRequired(value){(dynamic) →* dynamic};
-  ([dynamic]) →* dynamic tearOffOptional = self::Extension|get#writeSetterOptional(#this);
-  tearOffOptional(){([dynamic]) →* dynamic};
-  tearOffOptional(value){([dynamic]) →* dynamic};
-  ({value: dynamic}) →* dynamic tearOffNamed = self::Extension|get#writeSetterNamed(#this);
-  tearOffNamed(){({value: dynamic}) →* dynamic};
-  tearOffNamed(value: value){({value: dynamic}) →* dynamic};
+static method Extension|tearOffs(lowered final self::Class #this, dynamic value) → dynamic {
+  () → dynamic tearOffNoArgs = self::Extension|get#readGetter(#this);
+  tearOffNoArgs(){() → dynamic};
+  (dynamic) → dynamic tearOffRequired = self::Extension|get#writeSetterRequired(#this);
+  tearOffRequired(value){(dynamic) → dynamic};
+  ([dynamic]) → dynamic tearOffOptional = self::Extension|get#writeSetterOptional(#this);
+  tearOffOptional(){([dynamic]) → dynamic};
+  tearOffOptional(value){([dynamic]) → dynamic};
+  ({value: dynamic}) → dynamic tearOffNamed = self::Extension|get#writeSetterNamed(#this);
+  tearOffNamed(){({value: dynamic}) → dynamic};
+  tearOffNamed(value: value){({value: dynamic}) → dynamic};
 }
-static method Extension|getterCalls(lowered final self::Class* #this, dynamic value) → dynamic {
+static method Extension|getterCalls(lowered final self::Class #this, dynamic value) → dynamic {
   self::Extension|get#tearOffGetterNoArgs(#this){dynamic}.call();
   self::Extension|get#tearOffGetterRequired(#this){dynamic}.call(value);
   self::Extension|get#tearOffGetterOptional(#this){dynamic}.call();
@@ -152,144 +132,144 @@
   self::Extension|get#tearOffGetterNamed(#this){dynamic}.call();
   self::Extension|get#tearOffGetterNamed(#this){dynamic}.call(value: value);
 }
-static method Extension|get#getterCalls(lowered 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>(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|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>(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>(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#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>(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>(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>(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#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>(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>(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>(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#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>(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>(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>(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#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>(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>(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>(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#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>(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>(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>(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>(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#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>(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>(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>(lowered final self::GenericClass<self::GenericExtension|get#property::T*>* #this) → self::GenericExtension|get#property::T*
-  return #this.{self::GenericClass::field}{self::GenericExtension|get#property::T*};
-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#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}{self::GenericExtension|get#property::T?};
+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>(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>(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>(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>(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>(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>(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>(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>(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);
-  self::GenericExtension|writeSetterOptional<self::GenericExtension|invocations::T*>(#this, value);
-  self::GenericExtension|writeSetterNamed<self::GenericExtension|invocations::T*>(#this);
-  self::GenericExtension|writeSetterNamed<self::GenericExtension|invocations::T*>(#this, value: value);
-  self::GenericExtension|genericWriteSetterRequired<self::GenericExtension|invocations::T*, self::GenericExtension|invocations::S*>(#this, value);
-  self::GenericExtension|genericWriteSetterRequired<self::GenericExtension|invocations::T*, self::GenericExtension|invocations::T*>(#this, value);
-  self::GenericExtension|genericWriteSetterRequired<self::GenericExtension|invocations::T*, self::GenericExtension|invocations::S*>(#this, value);
-  self::GenericExtension|genericWriteSetterOptional<self::GenericExtension|invocations::T*, self::GenericExtension|invocations::T*>(#this);
-  self::GenericExtension|genericWriteSetterOptional<self::GenericExtension|invocations::T*, self::GenericExtension|invocations::T*>(#this);
-  self::GenericExtension|genericWriteSetterOptional<self::GenericExtension|invocations::T*, self::GenericExtension|invocations::S*>(#this);
-  self::GenericExtension|genericWriteSetterOptional<self::GenericExtension|invocations::T*, self::GenericExtension|invocations::S*>(#this, value);
-  self::GenericExtension|genericWriteSetterOptional<self::GenericExtension|invocations::T*, self::GenericExtension|invocations::T*>(#this, value);
-  self::GenericExtension|genericWriteSetterOptional<self::GenericExtension|invocations::T*, self::GenericExtension|invocations::S*>(#this, value);
-  self::GenericExtension|genericWriteSetterNamed<self::GenericExtension|invocations::T*, self::GenericExtension|invocations::T*>(#this);
-  self::GenericExtension|genericWriteSetterNamed<self::GenericExtension|invocations::T*, self::GenericExtension|invocations::T*>(#this);
-  self::GenericExtension|genericWriteSetterNamed<self::GenericExtension|invocations::T*, self::GenericExtension|invocations::S*>(#this);
-  self::GenericExtension|genericWriteSetterNamed<self::GenericExtension|invocations::T*, self::GenericExtension|invocations::S*>(#this, value: value);
-  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#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>(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>(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>(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>(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>(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>(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>(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);
+  self::GenericExtension|writeSetterOptional<self::GenericExtension|invocations::T%>(#this, value);
+  self::GenericExtension|writeSetterNamed<self::GenericExtension|invocations::T%>(#this);
+  self::GenericExtension|writeSetterNamed<self::GenericExtension|invocations::T%>(#this, value: value);
+  self::GenericExtension|genericWriteSetterRequired<self::GenericExtension|invocations::T%, self::GenericExtension|invocations::S%>(#this, value);
+  self::GenericExtension|genericWriteSetterRequired<self::GenericExtension|invocations::T%, self::GenericExtension|invocations::T%>(#this, value);
+  self::GenericExtension|genericWriteSetterRequired<self::GenericExtension|invocations::T%, self::GenericExtension|invocations::S%>(#this, value);
+  self::GenericExtension|genericWriteSetterOptional<self::GenericExtension|invocations::T%, self::GenericExtension|invocations::T%>(#this);
+  self::GenericExtension|genericWriteSetterOptional<self::GenericExtension|invocations::T%, self::GenericExtension|invocations::T%>(#this);
+  self::GenericExtension|genericWriteSetterOptional<self::GenericExtension|invocations::T%, self::GenericExtension|invocations::S%>(#this);
+  self::GenericExtension|genericWriteSetterOptional<self::GenericExtension|invocations::T%, self::GenericExtension|invocations::S%>(#this, value);
+  self::GenericExtension|genericWriteSetterOptional<self::GenericExtension|invocations::T%, self::GenericExtension|invocations::T%>(#this, value);
+  self::GenericExtension|genericWriteSetterOptional<self::GenericExtension|invocations::T%, self::GenericExtension|invocations::S%>(#this, value);
+  self::GenericExtension|genericWriteSetterNamed<self::GenericExtension|invocations::T%, self::GenericExtension|invocations::T%>(#this);
+  self::GenericExtension|genericWriteSetterNamed<self::GenericExtension|invocations::T%, self::GenericExtension|invocations::T%>(#this);
+  self::GenericExtension|genericWriteSetterNamed<self::GenericExtension|invocations::T%, self::GenericExtension|invocations::S%>(#this);
+  self::GenericExtension|genericWriteSetterNamed<self::GenericExtension|invocations::T%, self::GenericExtension|invocations::S%>(#this, value: value);
+  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>(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>(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(){() →* self::GenericExtension|tearOffs::T*};
-  (self::GenericExtension|tearOffs::T*) →* dynamic tearOffRequired = self::GenericExtension|get#writeSetterRequired<self::GenericExtension|tearOffs::T*>(#this);
-  tearOffRequired(value){(self::GenericExtension|tearOffs::T*) →* dynamic};
-  ([self::GenericExtension|tearOffs::T*]) →* dynamic tearOffOptional = self::GenericExtension|get#writeSetterOptional<self::GenericExtension|tearOffs::T*>(#this);
-  tearOffOptional(){([self::GenericExtension|tearOffs::T*]) →* dynamic};
-  tearOffOptional(value){([self::GenericExtension|tearOffs::T*]) →* dynamic};
-  ({value: self::GenericExtension|tearOffs::T*}) →* dynamic tearOffNamed = self::GenericExtension|get#writeSetterNamed<self::GenericExtension|tearOffs::T*>(#this);
-  tearOffNamed(){({value: self::GenericExtension|tearOffs::T*}) →* dynamic};
-  tearOffNamed(value: value){({value: self::GenericExtension|tearOffs::T*}) →* dynamic};
-  <S extends self::GenericExtension|tearOffs::T* = dynamic>(S*) →* dynamic genericTearOffRequired = self::GenericExtension|get#genericWriteSetterRequired<self::GenericExtension|tearOffs::T*>(#this);
-  genericTearOffRequired<self::GenericExtension|tearOffs::S*>(value){(self::GenericExtension|tearOffs::S*) →* dynamic};
-  genericTearOffRequired<self::GenericExtension|tearOffs::T*>(value){(self::GenericExtension|tearOffs::T*) →* dynamic};
-  genericTearOffRequired<self::GenericExtension|tearOffs::S*>(value){(self::GenericExtension|tearOffs::S*) →* dynamic};
-  <S extends self::GenericExtension|tearOffs::T* = dynamic>([S*]) →* dynamic genericTearOffOptional = self::GenericExtension|get#genericWriteSetterOptional<self::GenericExtension|tearOffs::T*>(#this);
-  genericTearOffOptional<self::GenericExtension|tearOffs::T*>(){([self::GenericExtension|tearOffs::T*]) →* dynamic};
-  genericTearOffOptional<self::GenericExtension|tearOffs::T*>(){([self::GenericExtension|tearOffs::T*]) →* dynamic};
-  genericTearOffOptional<self::GenericExtension|tearOffs::S*>(){([self::GenericExtension|tearOffs::S*]) →* dynamic};
-  genericTearOffOptional<self::GenericExtension|tearOffs::S*>(value){([self::GenericExtension|tearOffs::S*]) →* dynamic};
-  genericTearOffOptional<self::GenericExtension|tearOffs::T*>(value){([self::GenericExtension|tearOffs::T*]) →* dynamic};
-  genericTearOffOptional<self::GenericExtension|tearOffs::S*>(value){([self::GenericExtension|tearOffs::S*]) →* dynamic};
-  <S extends self::GenericExtension|tearOffs::T* = dynamic>({value: S*}) →* dynamic genericTearOffNamed = self::GenericExtension|get#genericWriteSetterNamed<self::GenericExtension|tearOffs::T*>(#this);
-  genericTearOffNamed<self::GenericExtension|tearOffs::T*>(){({value: self::GenericExtension|tearOffs::T*}) →* dynamic};
-  genericTearOffNamed<self::GenericExtension|tearOffs::T*>(){({value: self::GenericExtension|tearOffs::T*}) →* dynamic};
-  genericTearOffNamed<self::GenericExtension|tearOffs::S*>(){({value: self::GenericExtension|tearOffs::S*}) →* dynamic};
-  genericTearOffNamed<self::GenericExtension|tearOffs::S*>(value: value){({value: self::GenericExtension|tearOffs::S*}) →* dynamic};
-  genericTearOffNamed<self::GenericExtension|tearOffs::T*>(value: value){({value: self::GenericExtension|tearOffs::T*}) →* dynamic};
-  genericTearOffNamed<self::GenericExtension|tearOffs::S*>(value: value){({value: self::GenericExtension|tearOffs::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>(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(){() → self::GenericExtension|tearOffs::T?};
+  (self::GenericExtension|tearOffs::T%) → dynamic tearOffRequired = self::GenericExtension|get#writeSetterRequired<self::GenericExtension|tearOffs::T%>(#this);
+  tearOffRequired(value){(self::GenericExtension|tearOffs::T%) → dynamic};
+  ([self::GenericExtension|tearOffs::T?]) → dynamic tearOffOptional = self::GenericExtension|get#writeSetterOptional<self::GenericExtension|tearOffs::T%>(#this);
+  tearOffOptional(){([self::GenericExtension|tearOffs::T?]) → dynamic};
+  tearOffOptional(value){([self::GenericExtension|tearOffs::T?]) → dynamic};
+  ({value: self::GenericExtension|tearOffs::T?}) → dynamic tearOffNamed = self::GenericExtension|get#writeSetterNamed<self::GenericExtension|tearOffs::T%>(#this);
+  tearOffNamed(){({value: self::GenericExtension|tearOffs::T?}) → dynamic};
+  tearOffNamed(value: value){({value: self::GenericExtension|tearOffs::T?}) → dynamic};
+  <S extends self::GenericExtension|tearOffs::T% = dynamic>(S%) → dynamic genericTearOffRequired = self::GenericExtension|get#genericWriteSetterRequired<self::GenericExtension|tearOffs::T%>(#this);
+  genericTearOffRequired<self::GenericExtension|tearOffs::S%>(value){(self::GenericExtension|tearOffs::S%) → dynamic};
+  genericTearOffRequired<self::GenericExtension|tearOffs::T%>(value){(self::GenericExtension|tearOffs::T%) → dynamic};
+  genericTearOffRequired<self::GenericExtension|tearOffs::S%>(value){(self::GenericExtension|tearOffs::S%) → dynamic};
+  <S extends self::GenericExtension|tearOffs::T% = dynamic>([S?]) → dynamic genericTearOffOptional = self::GenericExtension|get#genericWriteSetterOptional<self::GenericExtension|tearOffs::T%>(#this);
+  genericTearOffOptional<self::GenericExtension|tearOffs::T%>(){([self::GenericExtension|tearOffs::T?]) → dynamic};
+  genericTearOffOptional<self::GenericExtension|tearOffs::T%>(){([self::GenericExtension|tearOffs::T?]) → dynamic};
+  genericTearOffOptional<self::GenericExtension|tearOffs::S%>(){([self::GenericExtension|tearOffs::S?]) → dynamic};
+  genericTearOffOptional<self::GenericExtension|tearOffs::S%>(value){([self::GenericExtension|tearOffs::S?]) → dynamic};
+  genericTearOffOptional<self::GenericExtension|tearOffs::T%>(value){([self::GenericExtension|tearOffs::T?]) → dynamic};
+  genericTearOffOptional<self::GenericExtension|tearOffs::S%>(value){([self::GenericExtension|tearOffs::S?]) → dynamic};
+  <S extends self::GenericExtension|tearOffs::T% = dynamic>({value: S?}) → dynamic genericTearOffNamed = self::GenericExtension|get#genericWriteSetterNamed<self::GenericExtension|tearOffs::T%>(#this);
+  genericTearOffNamed<self::GenericExtension|tearOffs::T%>(){({value: self::GenericExtension|tearOffs::T?}) → dynamic};
+  genericTearOffNamed<self::GenericExtension|tearOffs::T%>(){({value: self::GenericExtension|tearOffs::T?}) → dynamic};
+  genericTearOffNamed<self::GenericExtension|tearOffs::S%>(){({value: self::GenericExtension|tearOffs::S?}) → dynamic};
+  genericTearOffNamed<self::GenericExtension|tearOffs::S%>(value: value){({value: self::GenericExtension|tearOffs::S?}) → dynamic};
+  genericTearOffNamed<self::GenericExtension|tearOffs::T%>(value: value){({value: self::GenericExtension|tearOffs::T?}) → dynamic};
+  genericTearOffNamed<self::GenericExtension|tearOffs::S%>(value: value){({value: self::GenericExtension|tearOffs::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>(lowered final self::GenericClass<self::GenericExtension|getterCalls::T*>* #this, self::GenericExtension|getterCalls::S* value) → dynamic {
-  self::GenericExtension|get#tearOffGetterNoArgs<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call();
-  self::GenericExtension|get#tearOffGetterRequired<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call(value);
-  self::GenericExtension|get#tearOffGetterOptional<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call();
-  self::GenericExtension|get#tearOffGetterOptional<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call(value);
-  self::GenericExtension|get#tearOffGetterNamed<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call();
-  self::GenericExtension|get#tearOffGetterNamed<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call(value: value);
-  self::GenericExtension|get#tearOffGetterGenericRequired<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call(value);
-  self::GenericExtension|get#tearOffGetterGenericRequired<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call<self::GenericExtension|getterCalls::T*>(value);
-  self::GenericExtension|get#tearOffGetterGenericRequired<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call<self::GenericExtension|getterCalls::S*>(value);
-  self::GenericExtension|get#tearOffGetterGenericOptional<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call();
-  self::GenericExtension|get#tearOffGetterGenericOptional<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call<self::GenericExtension|getterCalls::T*>();
-  self::GenericExtension|get#tearOffGetterGenericOptional<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call<self::GenericExtension|getterCalls::S*>();
-  self::GenericExtension|get#tearOffGetterGenericOptional<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call(value);
-  self::GenericExtension|get#tearOffGetterGenericOptional<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call<self::GenericExtension|getterCalls::T*>(value);
-  self::GenericExtension|get#tearOffGetterGenericOptional<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call<self::GenericExtension|getterCalls::S*>(value);
-  self::GenericExtension|get#tearOffGetterGenericNamed<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call();
-  self::GenericExtension|get#tearOffGetterGenericNamed<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call<self::GenericExtension|getterCalls::T*>();
-  self::GenericExtension|get#tearOffGetterGenericNamed<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call<self::GenericExtension|getterCalls::S*>();
-  self::GenericExtension|get#tearOffGetterGenericNamed<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call(value: value);
-  self::GenericExtension|get#tearOffGetterGenericNamed<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call<self::GenericExtension|getterCalls::T*>(value: value);
-  self::GenericExtension|get#tearOffGetterGenericNamed<self::GenericExtension|getterCalls::T*>(#this){dynamic}.call<self::GenericExtension|getterCalls::S*>(value: value);
+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>(lowered final self::GenericClass<self::GenericExtension|getterCalls::T%> #this, self::GenericExtension|getterCalls::S% value) → dynamic {
+  self::GenericExtension|get#tearOffGetterNoArgs<self::GenericExtension|getterCalls::T%>(#this){dynamic}.call();
+  self::GenericExtension|get#tearOffGetterRequired<self::GenericExtension|getterCalls::T%>(#this){dynamic}.call(value);
+  self::GenericExtension|get#tearOffGetterOptional<self::GenericExtension|getterCalls::T%>(#this){dynamic}.call();
+  self::GenericExtension|get#tearOffGetterOptional<self::GenericExtension|getterCalls::T%>(#this){dynamic}.call(value);
+  self::GenericExtension|get#tearOffGetterNamed<self::GenericExtension|getterCalls::T%>(#this){dynamic}.call();
+  self::GenericExtension|get#tearOffGetterNamed<self::GenericExtension|getterCalls::T%>(#this){dynamic}.call(value: value);
+  self::GenericExtension|get#tearOffGetterGenericRequired<self::GenericExtension|getterCalls::T%>(#this){dynamic}.call(value);
+  self::GenericExtension|get#tearOffGetterGenericRequired<self::GenericExtension|getterCalls::T%>(#this){dynamic}.call<self::GenericExtension|getterCalls::T%>(value);
+  self::GenericExtension|get#tearOffGetterGenericRequired<self::GenericExtension|getterCalls::T%>(#this){dynamic}.call<self::GenericExtension|getterCalls::S%>(value);
+  self::GenericExtension|get#tearOffGetterGenericOptional<self::GenericExtension|getterCalls::T%>(#this){dynamic}.call();
+  self::GenericExtension|get#tearOffGetterGenericOptional<self::GenericExtension|getterCalls::T%>(#this){dynamic}.call<self::GenericExtension|getterCalls::T%>();
+  self::GenericExtension|get#tearOffGetterGenericOptional<self::GenericExtension|getterCalls::T%>(#this){dynamic}.call<self::GenericExtension|getterCalls::S%>();
+  self::GenericExtension|get#tearOffGetterGenericOptional<self::GenericExtension|getterCalls::T%>(#this){dynamic}.call(value);
+  self::GenericExtension|get#tearOffGetterGenericOptional<self::GenericExtension|getterCalls::T%>(#this){dynamic}.call<self::GenericExtension|getterCalls::T%>(value);
+  self::GenericExtension|get#tearOffGetterGenericOptional<self::GenericExtension|getterCalls::T%>(#this){dynamic}.call<self::GenericExtension|getterCalls::S%>(value);
+  self::GenericExtension|get#tearOffGetterGenericNamed<self::GenericExtension|getterCalls::T%>(#this){dynamic}.call();
+  self::GenericExtension|get#tearOffGetterGenericNamed<self::GenericExtension|getterCalls::T%>(#this){dynamic}.call<self::GenericExtension|getterCalls::T%>();
+  self::GenericExtension|get#tearOffGetterGenericNamed<self::GenericExtension|getterCalls::T%>(#this){dynamic}.call<self::GenericExtension|getterCalls::S%>();
+  self::GenericExtension|get#tearOffGetterGenericNamed<self::GenericExtension|getterCalls::T%>(#this){dynamic}.call(value: value);
+  self::GenericExtension|get#tearOffGetterGenericNamed<self::GenericExtension|getterCalls::T%>(#this){dynamic}.call<self::GenericExtension|getterCalls::T%>(value: value);
+  self::GenericExtension|get#tearOffGetterGenericNamed<self::GenericExtension|getterCalls::T%>(#this){dynamic}.call<self::GenericExtension|getterCalls::S%>(value: value);
 }
-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 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 {}
 
 constants  {
diff --git a/pkg/front_end/testcases/extensions/direct_static_access.dart b/pkg/front_end/testcases/extensions/direct_static_access.dart
index 4529483..4260abf 100644
--- a/pkg/front_end/testcases/extensions/direct_static_access.dart
+++ b/pkg/front_end/testcases/extensions/direct_static_access.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2019, 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.
-// @dart=2.9
+
 class Class<T> {
   static var field;
 }
@@ -36,11 +36,11 @@
     property = value;
   }
 
-  static genericWriteSetterOptional<S>([S value]) {
+  static genericWriteSetterOptional<S>([S? value]) {
     property = value;
   }
 
-  static genericWriteSetterNamed<S>({S value}) {
+  static genericWriteSetterNamed<S>({S? value}) {
     property = value;
   }
 
diff --git a/pkg/front_end/testcases/extensions/direct_static_access.dart.textual_outline.expect b/pkg/front_end/testcases/extensions/direct_static_access.dart.textual_outline.expect
index e8420b5..bd96cbe 100644
--- a/pkg/front_end/testcases/extensions/direct_static_access.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/extensions/direct_static_access.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Class<T> {
   static var field;
 }
@@ -12,8 +11,8 @@
   static writeSetterOptional([value]) {}
   static writeSetterNamed({value}) {}
   static genericWriteSetterRequired<S>(S value) {}
-  static genericWriteSetterOptional<S>([S value]) {}
-  static genericWriteSetterNamed<S>({S value}) {}
+  static genericWriteSetterOptional<S>([S? value]) {}
+  static genericWriteSetterNamed<S>({S? value}) {}
   static get tearOffGetterNoArgs => readGetter;
   static get tearOffGetterRequired => writeSetterRequired;
   static get tearOffGetterOptional => writeSetterOptional;
diff --git a/pkg/front_end/testcases/extensions/direct_static_access.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/extensions/direct_static_access.dart.textual_outline_modelled.expect
index 8fc0c10..b978413 100644
--- a/pkg/front_end/testcases/extensions/direct_static_access.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/extensions/direct_static_access.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Class<T> {
   static var field;
 }
@@ -8,8 +7,8 @@
   getterCallsFromInstanceContext(T value) {}
   invocationsFromInstanceContext(T value) {}
   static fieldAccessFromStaticContext() {}
-  static genericWriteSetterNamed<S>({S value}) {}
-  static genericWriteSetterOptional<S>([S value]) {}
+  static genericWriteSetterNamed<S>({S? value}) {}
+  static genericWriteSetterOptional<S>([S? value]) {}
   static genericWriteSetterRequired<S>(S value) {}
   static get property => Class.field;
   static get tearOffGetterGenericNamed => genericWriteSetterNamed;
diff --git a/pkg/front_end/testcases/extensions/direct_static_access.dart.weak.expect b/pkg/front_end/testcases/extensions/direct_static_access.dart.weak.expect
index 942973c..cb65d7c 100644
--- a/pkg/front_end/testcases/extensions/direct_static_access.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/direct_static_access.dart.weak.expect
@@ -1,24 +1,14 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class Class<T extends core::Object* = dynamic> extends core::Object {
+class Class<T extends core::Object? = dynamic> extends core::Object {
   static field dynamic field = null;
-  synthetic constructor •() → self::Class<self::Class::T*>*
+  synthetic constructor •() → self::Class<self::Class::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension Extension<T extends core::Object* = dynamic> on self::Class<T*>* {
+extension Extension<T extends core::Object? = dynamic> on self::Class<T%> {
   static get property = get self::Extension|property;
   static field field = self::Extension|field;
   static method readGetter = self::Extension|readGetter;
@@ -67,13 +57,13 @@
 static method Extension|writeSetterNamed({dynamic value = #C1}) → dynamic {
   self::Extension|property = value;
 }
-static method Extension|genericWriteSetterRequired<S extends core::Object* = dynamic>(self::Extension|genericWriteSetterRequired::S* value) → dynamic {
+static method Extension|genericWriteSetterRequired<S extends core::Object? = dynamic>(self::Extension|genericWriteSetterRequired::S% value) → dynamic {
   self::Extension|property = value;
 }
-static method Extension|genericWriteSetterOptional<S extends core::Object* = dynamic>([self::Extension|genericWriteSetterOptional::S* value = #C1]) → dynamic {
+static method Extension|genericWriteSetterOptional<S extends core::Object? = dynamic>([self::Extension|genericWriteSetterOptional::S? value = #C1]) → dynamic {
   self::Extension|property = value;
 }
-static method Extension|genericWriteSetterNamed<S extends core::Object* = dynamic>({self::Extension|genericWriteSetterNamed::S* value = #C1}) → dynamic {
+static method Extension|genericWriteSetterNamed<S extends core::Object? = dynamic>({self::Extension|genericWriteSetterNamed::S? value = #C1}) → dynamic {
   self::Extension|property = value;
 }
 static get Extension|tearOffGetterNoArgs() → dynamic
@@ -90,54 +80,54 @@
   return #C7;
 static get Extension|tearOffGetterGenericNamed() → dynamic
   return #C8;
-static method Extension|invocationsFromStaticContext(core::int* value) → dynamic {
+static method Extension|invocationsFromStaticContext(core::int value) → dynamic {
   self::Extension|readGetter();
   self::Extension|writeSetterRequired(value);
   self::Extension|writeSetterOptional();
   self::Extension|writeSetterOptional(value);
   self::Extension|writeSetterNamed();
   self::Extension|writeSetterNamed(value: value);
-  self::Extension|genericWriteSetterRequired<core::int*>(value);
-  self::Extension|genericWriteSetterRequired<core::int*>(value);
+  self::Extension|genericWriteSetterRequired<core::int>(value);
+  self::Extension|genericWriteSetterRequired<core::int>(value);
   self::Extension|genericWriteSetterOptional<dynamic>();
-  self::Extension|genericWriteSetterOptional<core::int*>();
-  self::Extension|genericWriteSetterOptional<core::int*>(value);
-  self::Extension|genericWriteSetterOptional<core::int*>(value);
+  self::Extension|genericWriteSetterOptional<core::int>();
+  self::Extension|genericWriteSetterOptional<core::int>(value);
+  self::Extension|genericWriteSetterOptional<core::int>(value);
   self::Extension|genericWriteSetterNamed<dynamic>();
-  self::Extension|genericWriteSetterNamed<core::int*>();
-  self::Extension|genericWriteSetterNamed<core::int*>(value: value);
-  self::Extension|genericWriteSetterNamed<core::int*>(value: value);
+  self::Extension|genericWriteSetterNamed<core::int>();
+  self::Extension|genericWriteSetterNamed<core::int>(value: value);
+  self::Extension|genericWriteSetterNamed<core::int>(value: value);
 }
-static method Extension|tearOffsFromStaticContext(core::int* value) → dynamic {
-  () →* dynamic tearOffNoArgs = #C2;
-  tearOffNoArgs(){() →* dynamic};
-  (dynamic) →* dynamic tearOffRequired = #C3;
-  tearOffRequired(value){(dynamic) →* dynamic};
-  ([dynamic]) →* dynamic tearOffOptional = #C4;
-  tearOffOptional(){([dynamic]) →* dynamic};
-  tearOffOptional(value){([dynamic]) →* dynamic};
-  ({value: dynamic}) →* dynamic tearOffNamed = #C5;
-  tearOffNamed(){({value: dynamic}) →* dynamic};
-  tearOffNamed(value: value){({value: dynamic}) →* dynamic};
-  <S extends core::Object* = dynamic>(S*) →* dynamic tearOffGenericRequired = #C6;
-  tearOffGenericRequired<core::int*>(value){(core::int*) →* dynamic};
-  tearOffGenericRequired<core::int*>(value){(core::int*) →* dynamic};
-  <S extends core::Object* = dynamic>([S*]) →* dynamic tearOffGenericOptional = #C7;
-  tearOffGenericOptional<dynamic>(){([dynamic]) →* dynamic};
-  tearOffGenericOptional<core::int*>(){([core::int*]) →* dynamic};
-  tearOffGenericOptional<core::int*>(value){([core::int*]) →* dynamic};
-  tearOffGenericOptional<core::int*>(value){([core::int*]) →* dynamic};
-  <S extends core::Object* = dynamic>({value: S*}) →* dynamic tearOffGenericNamed = #C8;
-  tearOffGenericNamed<dynamic>(){({value: dynamic}) →* dynamic};
-  tearOffGenericNamed<core::int*>(){({value: core::int*}) →* dynamic};
-  tearOffGenericNamed<core::int*>(value: value){({value: core::int*}) →* dynamic};
-  tearOffGenericNamed<core::int*>(value: value){({value: core::int*}) →* dynamic};
+static method Extension|tearOffsFromStaticContext(core::int value) → dynamic {
+  () → dynamic tearOffNoArgs = #C2;
+  tearOffNoArgs(){() → dynamic};
+  (dynamic) → dynamic tearOffRequired = #C3;
+  tearOffRequired(value){(dynamic) → dynamic};
+  ([dynamic]) → dynamic tearOffOptional = #C4;
+  tearOffOptional(){([dynamic]) → dynamic};
+  tearOffOptional(value){([dynamic]) → dynamic};
+  ({value: dynamic}) → dynamic tearOffNamed = #C5;
+  tearOffNamed(){({value: dynamic}) → dynamic};
+  tearOffNamed(value: value){({value: dynamic}) → dynamic};
+  <S extends core::Object? = dynamic>(S%) → dynamic tearOffGenericRequired = #C6;
+  tearOffGenericRequired<core::int>(value){(core::int) → dynamic};
+  tearOffGenericRequired<core::int>(value){(core::int) → dynamic};
+  <S extends core::Object? = dynamic>([S?]) → dynamic tearOffGenericOptional = #C7;
+  tearOffGenericOptional<dynamic>(){([dynamic]) → dynamic};
+  tearOffGenericOptional<core::int>(){([core::int?]) → dynamic};
+  tearOffGenericOptional<core::int>(value){([core::int?]) → dynamic};
+  tearOffGenericOptional<core::int>(value){([core::int?]) → dynamic};
+  <S extends core::Object? = dynamic>({value: S?}) → dynamic tearOffGenericNamed = #C8;
+  tearOffGenericNamed<dynamic>(){({value: dynamic}) → dynamic};
+  tearOffGenericNamed<core::int>(){({value: core::int?}) → dynamic};
+  tearOffGenericNamed<core::int>(value: value){({value: core::int?}) → dynamic};
+  tearOffGenericNamed<core::int>(value: value){({value: core::int?}) → dynamic};
 }
 static method Extension|fieldAccessFromStaticContext() → dynamic {
   self::Extension|field = self::Extension|property;
   self::Extension|property = self::Extension|field;
 }
-static method Extension|getterCallsFromStaticContext(core::int* value) → dynamic {
+static method Extension|getterCallsFromStaticContext(core::int value) → dynamic {
   self::Extension|tearOffGetterNoArgs{dynamic}.call();
   self::Extension|tearOffGetterRequired{dynamic}.call(value);
   self::Extension|tearOffGetterOptional{dynamic}.call();
@@ -145,70 +135,70 @@
   self::Extension|tearOffGetterNamed{dynamic}.call();
   self::Extension|tearOffGetterNamed{dynamic}.call(value: value);
   self::Extension|tearOffGetterGenericRequired{dynamic}.call(value);
-  self::Extension|tearOffGetterGenericRequired{dynamic}.call<core::int*>(value);
+  self::Extension|tearOffGetterGenericRequired{dynamic}.call<core::int>(value);
   self::Extension|tearOffGetterGenericOptional{dynamic}.call();
-  self::Extension|tearOffGetterGenericOptional{dynamic}.call<core::int*>();
+  self::Extension|tearOffGetterGenericOptional{dynamic}.call<core::int>();
   self::Extension|tearOffGetterGenericOptional{dynamic}.call(value);
-  self::Extension|tearOffGetterGenericOptional{dynamic}.call<core::int*>(value);
+  self::Extension|tearOffGetterGenericOptional{dynamic}.call<core::int>(value);
   self::Extension|tearOffGetterGenericNamed{dynamic}.call();
-  self::Extension|tearOffGetterGenericNamed{dynamic}.call<core::int*>();
+  self::Extension|tearOffGetterGenericNamed{dynamic}.call<core::int>();
   self::Extension|tearOffGetterGenericNamed{dynamic}.call(value: value);
-  self::Extension|tearOffGetterGenericNamed{dynamic}.call<core::int*>(value: value);
+  self::Extension|tearOffGetterGenericNamed{dynamic}.call<core::int>(value: value);
 }
-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|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();
   self::Extension|writeSetterOptional(value);
   self::Extension|writeSetterNamed();
   self::Extension|writeSetterNamed(value: value);
-  self::Extension|genericWriteSetterRequired<self::Extension|invocationsFromInstanceContext::T*>(value);
-  self::Extension|genericWriteSetterRequired<self::Extension|invocationsFromInstanceContext::T*>(value);
+  self::Extension|genericWriteSetterRequired<self::Extension|invocationsFromInstanceContext::T%>(value);
+  self::Extension|genericWriteSetterRequired<self::Extension|invocationsFromInstanceContext::T%>(value);
   self::Extension|genericWriteSetterOptional<dynamic>();
-  self::Extension|genericWriteSetterOptional<self::Extension|invocationsFromInstanceContext::T*>();
-  self::Extension|genericWriteSetterOptional<self::Extension|invocationsFromInstanceContext::T*>(value);
-  self::Extension|genericWriteSetterOptional<self::Extension|invocationsFromInstanceContext::T*>(value);
+  self::Extension|genericWriteSetterOptional<self::Extension|invocationsFromInstanceContext::T%>();
+  self::Extension|genericWriteSetterOptional<self::Extension|invocationsFromInstanceContext::T%>(value);
+  self::Extension|genericWriteSetterOptional<self::Extension|invocationsFromInstanceContext::T%>(value);
   self::Extension|genericWriteSetterNamed<dynamic>();
-  self::Extension|genericWriteSetterNamed<self::Extension|invocationsFromInstanceContext::T*>();
-  self::Extension|genericWriteSetterNamed<self::Extension|invocationsFromInstanceContext::T*>(value: value);
-  self::Extension|genericWriteSetterNamed<self::Extension|invocationsFromInstanceContext::T*>(value: value);
+  self::Extension|genericWriteSetterNamed<self::Extension|invocationsFromInstanceContext::T%>();
+  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>(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>(lowered final self::Class<self::Extension|tearOffsFromInstanceContext::T*>* #this, self::Extension|tearOffsFromInstanceContext::T* value) → dynamic {
-  () →* dynamic tearOffNoArgs = #C2;
-  tearOffNoArgs(){() →* dynamic};
-  (dynamic) →* dynamic tearOffRequired = #C3;
-  tearOffRequired(value){(dynamic) →* dynamic};
-  ([dynamic]) →* dynamic tearOffOptional = #C4;
-  tearOffOptional(){([dynamic]) →* dynamic};
-  tearOffOptional(value){([dynamic]) →* dynamic};
-  ({value: dynamic}) →* dynamic tearOffNamed = #C5;
-  tearOffNamed(){({value: dynamic}) →* dynamic};
-  tearOffNamed(value: value){({value: dynamic}) →* dynamic};
-  <S extends core::Object* = dynamic>(S*) →* dynamic tearOffGenericRequired = #C6;
-  tearOffGenericRequired<self::Extension|tearOffsFromInstanceContext::T*>(value){(self::Extension|tearOffsFromInstanceContext::T*) →* dynamic};
-  tearOffGenericRequired<self::Extension|tearOffsFromInstanceContext::T*>(value){(self::Extension|tearOffsFromInstanceContext::T*) →* dynamic};
-  <S extends core::Object* = dynamic>([S*]) →* dynamic tearOffGenericOptional = #C7;
-  tearOffGenericOptional<dynamic>(){([dynamic]) →* dynamic};
-  tearOffGenericOptional<self::Extension|tearOffsFromInstanceContext::T*>(){([self::Extension|tearOffsFromInstanceContext::T*]) →* dynamic};
-  tearOffGenericOptional<self::Extension|tearOffsFromInstanceContext::T*>(value){([self::Extension|tearOffsFromInstanceContext::T*]) →* dynamic};
-  tearOffGenericOptional<self::Extension|tearOffsFromInstanceContext::T*>(value){([self::Extension|tearOffsFromInstanceContext::T*]) →* dynamic};
-  <S extends core::Object* = dynamic>({value: S*}) →* dynamic tearOffGenericNamed = #C8;
-  tearOffGenericNamed<dynamic>(){({value: dynamic}) →* dynamic};
-  tearOffGenericNamed<self::Extension|tearOffsFromInstanceContext::T*>(){({value: self::Extension|tearOffsFromInstanceContext::T*}) →* dynamic};
-  tearOffGenericNamed<self::Extension|tearOffsFromInstanceContext::T*>(value: value){({value: self::Extension|tearOffsFromInstanceContext::T*}) →* dynamic};
-  tearOffGenericNamed<self::Extension|tearOffsFromInstanceContext::T*>(value: value){({value: self::Extension|tearOffsFromInstanceContext::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>(lowered final self::Class<self::Extension|tearOffsFromInstanceContext::T%> #this, self::Extension|tearOffsFromInstanceContext::T% value) → dynamic {
+  () → dynamic tearOffNoArgs = #C2;
+  tearOffNoArgs(){() → dynamic};
+  (dynamic) → dynamic tearOffRequired = #C3;
+  tearOffRequired(value){(dynamic) → dynamic};
+  ([dynamic]) → dynamic tearOffOptional = #C4;
+  tearOffOptional(){([dynamic]) → dynamic};
+  tearOffOptional(value){([dynamic]) → dynamic};
+  ({value: dynamic}) → dynamic tearOffNamed = #C5;
+  tearOffNamed(){({value: dynamic}) → dynamic};
+  tearOffNamed(value: value){({value: dynamic}) → dynamic};
+  <S extends core::Object? = dynamic>(S%) → dynamic tearOffGenericRequired = #C6;
+  tearOffGenericRequired<self::Extension|tearOffsFromInstanceContext::T%>(value){(self::Extension|tearOffsFromInstanceContext::T%) → dynamic};
+  tearOffGenericRequired<self::Extension|tearOffsFromInstanceContext::T%>(value){(self::Extension|tearOffsFromInstanceContext::T%) → dynamic};
+  <S extends core::Object? = dynamic>([S?]) → dynamic tearOffGenericOptional = #C7;
+  tearOffGenericOptional<dynamic>(){([dynamic]) → dynamic};
+  tearOffGenericOptional<self::Extension|tearOffsFromInstanceContext::T%>(){([self::Extension|tearOffsFromInstanceContext::T?]) → dynamic};
+  tearOffGenericOptional<self::Extension|tearOffsFromInstanceContext::T%>(value){([self::Extension|tearOffsFromInstanceContext::T?]) → dynamic};
+  tearOffGenericOptional<self::Extension|tearOffsFromInstanceContext::T%>(value){([self::Extension|tearOffsFromInstanceContext::T?]) → dynamic};
+  <S extends core::Object? = dynamic>({value: S?}) → dynamic tearOffGenericNamed = #C8;
+  tearOffGenericNamed<dynamic>(){({value: dynamic}) → dynamic};
+  tearOffGenericNamed<self::Extension|tearOffsFromInstanceContext::T%>(){({value: self::Extension|tearOffsFromInstanceContext::T?}) → dynamic};
+  tearOffGenericNamed<self::Extension|tearOffsFromInstanceContext::T%>(value: value){({value: self::Extension|tearOffsFromInstanceContext::T?}) → dynamic};
+  tearOffGenericNamed<self::Extension|tearOffsFromInstanceContext::T%>(value: value){({value: self::Extension|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>(lowered final self::Class<self::Extension|fieldAccessFromInstanceContext::T*>* #this) → 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>(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>(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>(lowered final self::Class<self::Extension|getterCallsFromInstanceContext::T*>* #this, self::Extension|getterCallsFromInstanceContext::T* value) → 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>(lowered final self::Class<self::Extension|getterCallsFromInstanceContext::T%> #this, self::Extension|getterCallsFromInstanceContext::T% value) → dynamic {
   self::Extension|tearOffGetterNoArgs{dynamic}.call();
   self::Extension|tearOffGetterRequired{dynamic}.call(value);
   self::Extension|tearOffGetterOptional{dynamic}.call();
@@ -216,18 +206,18 @@
   self::Extension|tearOffGetterNamed{dynamic}.call();
   self::Extension|tearOffGetterNamed{dynamic}.call(value: value);
   self::Extension|tearOffGetterGenericRequired{dynamic}.call(value);
-  self::Extension|tearOffGetterGenericRequired{dynamic}.call<self::Extension|getterCallsFromInstanceContext::T*>(value);
+  self::Extension|tearOffGetterGenericRequired{dynamic}.call<self::Extension|getterCallsFromInstanceContext::T%>(value);
   self::Extension|tearOffGetterGenericOptional{dynamic}.call();
-  self::Extension|tearOffGetterGenericOptional{dynamic}.call<self::Extension|getterCallsFromInstanceContext::T*>();
+  self::Extension|tearOffGetterGenericOptional{dynamic}.call<self::Extension|getterCallsFromInstanceContext::T%>();
   self::Extension|tearOffGetterGenericOptional{dynamic}.call(value);
-  self::Extension|tearOffGetterGenericOptional{dynamic}.call<self::Extension|getterCallsFromInstanceContext::T*>(value);
+  self::Extension|tearOffGetterGenericOptional{dynamic}.call<self::Extension|getterCallsFromInstanceContext::T%>(value);
   self::Extension|tearOffGetterGenericNamed{dynamic}.call();
-  self::Extension|tearOffGetterGenericNamed{dynamic}.call<self::Extension|getterCallsFromInstanceContext::T*>();
+  self::Extension|tearOffGetterGenericNamed{dynamic}.call<self::Extension|getterCallsFromInstanceContext::T%>();
   self::Extension|tearOffGetterGenericNamed{dynamic}.call(value: value);
-  self::Extension|tearOffGetterGenericNamed{dynamic}.call<self::Extension|getterCallsFromInstanceContext::T*>(value: value);
+  self::Extension|tearOffGetterGenericNamed{dynamic}.call<self::Extension|getterCallsFromInstanceContext::T%>(value: value);
 }
-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 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 {}
 
 constants  {
diff --git a/pkg/front_end/testcases/extensions/direct_static_access.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/direct_static_access.dart.weak.modular.expect
index 942973c..cb65d7c 100644
--- a/pkg/front_end/testcases/extensions/direct_static_access.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/extensions/direct_static_access.dart.weak.modular.expect
@@ -1,24 +1,14 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class Class<T extends core::Object* = dynamic> extends core::Object {
+class Class<T extends core::Object? = dynamic> extends core::Object {
   static field dynamic field = null;
-  synthetic constructor •() → self::Class<self::Class::T*>*
+  synthetic constructor •() → self::Class<self::Class::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension Extension<T extends core::Object* = dynamic> on self::Class<T*>* {
+extension Extension<T extends core::Object? = dynamic> on self::Class<T%> {
   static get property = get self::Extension|property;
   static field field = self::Extension|field;
   static method readGetter = self::Extension|readGetter;
@@ -67,13 +57,13 @@
 static method Extension|writeSetterNamed({dynamic value = #C1}) → dynamic {
   self::Extension|property = value;
 }
-static method Extension|genericWriteSetterRequired<S extends core::Object* = dynamic>(self::Extension|genericWriteSetterRequired::S* value) → dynamic {
+static method Extension|genericWriteSetterRequired<S extends core::Object? = dynamic>(self::Extension|genericWriteSetterRequired::S% value) → dynamic {
   self::Extension|property = value;
 }
-static method Extension|genericWriteSetterOptional<S extends core::Object* = dynamic>([self::Extension|genericWriteSetterOptional::S* value = #C1]) → dynamic {
+static method Extension|genericWriteSetterOptional<S extends core::Object? = dynamic>([self::Extension|genericWriteSetterOptional::S? value = #C1]) → dynamic {
   self::Extension|property = value;
 }
-static method Extension|genericWriteSetterNamed<S extends core::Object* = dynamic>({self::Extension|genericWriteSetterNamed::S* value = #C1}) → dynamic {
+static method Extension|genericWriteSetterNamed<S extends core::Object? = dynamic>({self::Extension|genericWriteSetterNamed::S? value = #C1}) → dynamic {
   self::Extension|property = value;
 }
 static get Extension|tearOffGetterNoArgs() → dynamic
@@ -90,54 +80,54 @@
   return #C7;
 static get Extension|tearOffGetterGenericNamed() → dynamic
   return #C8;
-static method Extension|invocationsFromStaticContext(core::int* value) → dynamic {
+static method Extension|invocationsFromStaticContext(core::int value) → dynamic {
   self::Extension|readGetter();
   self::Extension|writeSetterRequired(value);
   self::Extension|writeSetterOptional();
   self::Extension|writeSetterOptional(value);
   self::Extension|writeSetterNamed();
   self::Extension|writeSetterNamed(value: value);
-  self::Extension|genericWriteSetterRequired<core::int*>(value);
-  self::Extension|genericWriteSetterRequired<core::int*>(value);
+  self::Extension|genericWriteSetterRequired<core::int>(value);
+  self::Extension|genericWriteSetterRequired<core::int>(value);
   self::Extension|genericWriteSetterOptional<dynamic>();
-  self::Extension|genericWriteSetterOptional<core::int*>();
-  self::Extension|genericWriteSetterOptional<core::int*>(value);
-  self::Extension|genericWriteSetterOptional<core::int*>(value);
+  self::Extension|genericWriteSetterOptional<core::int>();
+  self::Extension|genericWriteSetterOptional<core::int>(value);
+  self::Extension|genericWriteSetterOptional<core::int>(value);
   self::Extension|genericWriteSetterNamed<dynamic>();
-  self::Extension|genericWriteSetterNamed<core::int*>();
-  self::Extension|genericWriteSetterNamed<core::int*>(value: value);
-  self::Extension|genericWriteSetterNamed<core::int*>(value: value);
+  self::Extension|genericWriteSetterNamed<core::int>();
+  self::Extension|genericWriteSetterNamed<core::int>(value: value);
+  self::Extension|genericWriteSetterNamed<core::int>(value: value);
 }
-static method Extension|tearOffsFromStaticContext(core::int* value) → dynamic {
-  () →* dynamic tearOffNoArgs = #C2;
-  tearOffNoArgs(){() →* dynamic};
-  (dynamic) →* dynamic tearOffRequired = #C3;
-  tearOffRequired(value){(dynamic) →* dynamic};
-  ([dynamic]) →* dynamic tearOffOptional = #C4;
-  tearOffOptional(){([dynamic]) →* dynamic};
-  tearOffOptional(value){([dynamic]) →* dynamic};
-  ({value: dynamic}) →* dynamic tearOffNamed = #C5;
-  tearOffNamed(){({value: dynamic}) →* dynamic};
-  tearOffNamed(value: value){({value: dynamic}) →* dynamic};
-  <S extends core::Object* = dynamic>(S*) →* dynamic tearOffGenericRequired = #C6;
-  tearOffGenericRequired<core::int*>(value){(core::int*) →* dynamic};
-  tearOffGenericRequired<core::int*>(value){(core::int*) →* dynamic};
-  <S extends core::Object* = dynamic>([S*]) →* dynamic tearOffGenericOptional = #C7;
-  tearOffGenericOptional<dynamic>(){([dynamic]) →* dynamic};
-  tearOffGenericOptional<core::int*>(){([core::int*]) →* dynamic};
-  tearOffGenericOptional<core::int*>(value){([core::int*]) →* dynamic};
-  tearOffGenericOptional<core::int*>(value){([core::int*]) →* dynamic};
-  <S extends core::Object* = dynamic>({value: S*}) →* dynamic tearOffGenericNamed = #C8;
-  tearOffGenericNamed<dynamic>(){({value: dynamic}) →* dynamic};
-  tearOffGenericNamed<core::int*>(){({value: core::int*}) →* dynamic};
-  tearOffGenericNamed<core::int*>(value: value){({value: core::int*}) →* dynamic};
-  tearOffGenericNamed<core::int*>(value: value){({value: core::int*}) →* dynamic};
+static method Extension|tearOffsFromStaticContext(core::int value) → dynamic {
+  () → dynamic tearOffNoArgs = #C2;
+  tearOffNoArgs(){() → dynamic};
+  (dynamic) → dynamic tearOffRequired = #C3;
+  tearOffRequired(value){(dynamic) → dynamic};
+  ([dynamic]) → dynamic tearOffOptional = #C4;
+  tearOffOptional(){([dynamic]) → dynamic};
+  tearOffOptional(value){([dynamic]) → dynamic};
+  ({value: dynamic}) → dynamic tearOffNamed = #C5;
+  tearOffNamed(){({value: dynamic}) → dynamic};
+  tearOffNamed(value: value){({value: dynamic}) → dynamic};
+  <S extends core::Object? = dynamic>(S%) → dynamic tearOffGenericRequired = #C6;
+  tearOffGenericRequired<core::int>(value){(core::int) → dynamic};
+  tearOffGenericRequired<core::int>(value){(core::int) → dynamic};
+  <S extends core::Object? = dynamic>([S?]) → dynamic tearOffGenericOptional = #C7;
+  tearOffGenericOptional<dynamic>(){([dynamic]) → dynamic};
+  tearOffGenericOptional<core::int>(){([core::int?]) → dynamic};
+  tearOffGenericOptional<core::int>(value){([core::int?]) → dynamic};
+  tearOffGenericOptional<core::int>(value){([core::int?]) → dynamic};
+  <S extends core::Object? = dynamic>({value: S?}) → dynamic tearOffGenericNamed = #C8;
+  tearOffGenericNamed<dynamic>(){({value: dynamic}) → dynamic};
+  tearOffGenericNamed<core::int>(){({value: core::int?}) → dynamic};
+  tearOffGenericNamed<core::int>(value: value){({value: core::int?}) → dynamic};
+  tearOffGenericNamed<core::int>(value: value){({value: core::int?}) → dynamic};
 }
 static method Extension|fieldAccessFromStaticContext() → dynamic {
   self::Extension|field = self::Extension|property;
   self::Extension|property = self::Extension|field;
 }
-static method Extension|getterCallsFromStaticContext(core::int* value) → dynamic {
+static method Extension|getterCallsFromStaticContext(core::int value) → dynamic {
   self::Extension|tearOffGetterNoArgs{dynamic}.call();
   self::Extension|tearOffGetterRequired{dynamic}.call(value);
   self::Extension|tearOffGetterOptional{dynamic}.call();
@@ -145,70 +135,70 @@
   self::Extension|tearOffGetterNamed{dynamic}.call();
   self::Extension|tearOffGetterNamed{dynamic}.call(value: value);
   self::Extension|tearOffGetterGenericRequired{dynamic}.call(value);
-  self::Extension|tearOffGetterGenericRequired{dynamic}.call<core::int*>(value);
+  self::Extension|tearOffGetterGenericRequired{dynamic}.call<core::int>(value);
   self::Extension|tearOffGetterGenericOptional{dynamic}.call();
-  self::Extension|tearOffGetterGenericOptional{dynamic}.call<core::int*>();
+  self::Extension|tearOffGetterGenericOptional{dynamic}.call<core::int>();
   self::Extension|tearOffGetterGenericOptional{dynamic}.call(value);
-  self::Extension|tearOffGetterGenericOptional{dynamic}.call<core::int*>(value);
+  self::Extension|tearOffGetterGenericOptional{dynamic}.call<core::int>(value);
   self::Extension|tearOffGetterGenericNamed{dynamic}.call();
-  self::Extension|tearOffGetterGenericNamed{dynamic}.call<core::int*>();
+  self::Extension|tearOffGetterGenericNamed{dynamic}.call<core::int>();
   self::Extension|tearOffGetterGenericNamed{dynamic}.call(value: value);
-  self::Extension|tearOffGetterGenericNamed{dynamic}.call<core::int*>(value: value);
+  self::Extension|tearOffGetterGenericNamed{dynamic}.call<core::int>(value: value);
 }
-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|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();
   self::Extension|writeSetterOptional(value);
   self::Extension|writeSetterNamed();
   self::Extension|writeSetterNamed(value: value);
-  self::Extension|genericWriteSetterRequired<self::Extension|invocationsFromInstanceContext::T*>(value);
-  self::Extension|genericWriteSetterRequired<self::Extension|invocationsFromInstanceContext::T*>(value);
+  self::Extension|genericWriteSetterRequired<self::Extension|invocationsFromInstanceContext::T%>(value);
+  self::Extension|genericWriteSetterRequired<self::Extension|invocationsFromInstanceContext::T%>(value);
   self::Extension|genericWriteSetterOptional<dynamic>();
-  self::Extension|genericWriteSetterOptional<self::Extension|invocationsFromInstanceContext::T*>();
-  self::Extension|genericWriteSetterOptional<self::Extension|invocationsFromInstanceContext::T*>(value);
-  self::Extension|genericWriteSetterOptional<self::Extension|invocationsFromInstanceContext::T*>(value);
+  self::Extension|genericWriteSetterOptional<self::Extension|invocationsFromInstanceContext::T%>();
+  self::Extension|genericWriteSetterOptional<self::Extension|invocationsFromInstanceContext::T%>(value);
+  self::Extension|genericWriteSetterOptional<self::Extension|invocationsFromInstanceContext::T%>(value);
   self::Extension|genericWriteSetterNamed<dynamic>();
-  self::Extension|genericWriteSetterNamed<self::Extension|invocationsFromInstanceContext::T*>();
-  self::Extension|genericWriteSetterNamed<self::Extension|invocationsFromInstanceContext::T*>(value: value);
-  self::Extension|genericWriteSetterNamed<self::Extension|invocationsFromInstanceContext::T*>(value: value);
+  self::Extension|genericWriteSetterNamed<self::Extension|invocationsFromInstanceContext::T%>();
+  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>(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>(lowered final self::Class<self::Extension|tearOffsFromInstanceContext::T*>* #this, self::Extension|tearOffsFromInstanceContext::T* value) → dynamic {
-  () →* dynamic tearOffNoArgs = #C2;
-  tearOffNoArgs(){() →* dynamic};
-  (dynamic) →* dynamic tearOffRequired = #C3;
-  tearOffRequired(value){(dynamic) →* dynamic};
-  ([dynamic]) →* dynamic tearOffOptional = #C4;
-  tearOffOptional(){([dynamic]) →* dynamic};
-  tearOffOptional(value){([dynamic]) →* dynamic};
-  ({value: dynamic}) →* dynamic tearOffNamed = #C5;
-  tearOffNamed(){({value: dynamic}) →* dynamic};
-  tearOffNamed(value: value){({value: dynamic}) →* dynamic};
-  <S extends core::Object* = dynamic>(S*) →* dynamic tearOffGenericRequired = #C6;
-  tearOffGenericRequired<self::Extension|tearOffsFromInstanceContext::T*>(value){(self::Extension|tearOffsFromInstanceContext::T*) →* dynamic};
-  tearOffGenericRequired<self::Extension|tearOffsFromInstanceContext::T*>(value){(self::Extension|tearOffsFromInstanceContext::T*) →* dynamic};
-  <S extends core::Object* = dynamic>([S*]) →* dynamic tearOffGenericOptional = #C7;
-  tearOffGenericOptional<dynamic>(){([dynamic]) →* dynamic};
-  tearOffGenericOptional<self::Extension|tearOffsFromInstanceContext::T*>(){([self::Extension|tearOffsFromInstanceContext::T*]) →* dynamic};
-  tearOffGenericOptional<self::Extension|tearOffsFromInstanceContext::T*>(value){([self::Extension|tearOffsFromInstanceContext::T*]) →* dynamic};
-  tearOffGenericOptional<self::Extension|tearOffsFromInstanceContext::T*>(value){([self::Extension|tearOffsFromInstanceContext::T*]) →* dynamic};
-  <S extends core::Object* = dynamic>({value: S*}) →* dynamic tearOffGenericNamed = #C8;
-  tearOffGenericNamed<dynamic>(){({value: dynamic}) →* dynamic};
-  tearOffGenericNamed<self::Extension|tearOffsFromInstanceContext::T*>(){({value: self::Extension|tearOffsFromInstanceContext::T*}) →* dynamic};
-  tearOffGenericNamed<self::Extension|tearOffsFromInstanceContext::T*>(value: value){({value: self::Extension|tearOffsFromInstanceContext::T*}) →* dynamic};
-  tearOffGenericNamed<self::Extension|tearOffsFromInstanceContext::T*>(value: value){({value: self::Extension|tearOffsFromInstanceContext::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>(lowered final self::Class<self::Extension|tearOffsFromInstanceContext::T%> #this, self::Extension|tearOffsFromInstanceContext::T% value) → dynamic {
+  () → dynamic tearOffNoArgs = #C2;
+  tearOffNoArgs(){() → dynamic};
+  (dynamic) → dynamic tearOffRequired = #C3;
+  tearOffRequired(value){(dynamic) → dynamic};
+  ([dynamic]) → dynamic tearOffOptional = #C4;
+  tearOffOptional(){([dynamic]) → dynamic};
+  tearOffOptional(value){([dynamic]) → dynamic};
+  ({value: dynamic}) → dynamic tearOffNamed = #C5;
+  tearOffNamed(){({value: dynamic}) → dynamic};
+  tearOffNamed(value: value){({value: dynamic}) → dynamic};
+  <S extends core::Object? = dynamic>(S%) → dynamic tearOffGenericRequired = #C6;
+  tearOffGenericRequired<self::Extension|tearOffsFromInstanceContext::T%>(value){(self::Extension|tearOffsFromInstanceContext::T%) → dynamic};
+  tearOffGenericRequired<self::Extension|tearOffsFromInstanceContext::T%>(value){(self::Extension|tearOffsFromInstanceContext::T%) → dynamic};
+  <S extends core::Object? = dynamic>([S?]) → dynamic tearOffGenericOptional = #C7;
+  tearOffGenericOptional<dynamic>(){([dynamic]) → dynamic};
+  tearOffGenericOptional<self::Extension|tearOffsFromInstanceContext::T%>(){([self::Extension|tearOffsFromInstanceContext::T?]) → dynamic};
+  tearOffGenericOptional<self::Extension|tearOffsFromInstanceContext::T%>(value){([self::Extension|tearOffsFromInstanceContext::T?]) → dynamic};
+  tearOffGenericOptional<self::Extension|tearOffsFromInstanceContext::T%>(value){([self::Extension|tearOffsFromInstanceContext::T?]) → dynamic};
+  <S extends core::Object? = dynamic>({value: S?}) → dynamic tearOffGenericNamed = #C8;
+  tearOffGenericNamed<dynamic>(){({value: dynamic}) → dynamic};
+  tearOffGenericNamed<self::Extension|tearOffsFromInstanceContext::T%>(){({value: self::Extension|tearOffsFromInstanceContext::T?}) → dynamic};
+  tearOffGenericNamed<self::Extension|tearOffsFromInstanceContext::T%>(value: value){({value: self::Extension|tearOffsFromInstanceContext::T?}) → dynamic};
+  tearOffGenericNamed<self::Extension|tearOffsFromInstanceContext::T%>(value: value){({value: self::Extension|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>(lowered final self::Class<self::Extension|fieldAccessFromInstanceContext::T*>* #this) → 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>(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>(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>(lowered final self::Class<self::Extension|getterCallsFromInstanceContext::T*>* #this, self::Extension|getterCallsFromInstanceContext::T* value) → 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>(lowered final self::Class<self::Extension|getterCallsFromInstanceContext::T%> #this, self::Extension|getterCallsFromInstanceContext::T% value) → dynamic {
   self::Extension|tearOffGetterNoArgs{dynamic}.call();
   self::Extension|tearOffGetterRequired{dynamic}.call(value);
   self::Extension|tearOffGetterOptional{dynamic}.call();
@@ -216,18 +206,18 @@
   self::Extension|tearOffGetterNamed{dynamic}.call();
   self::Extension|tearOffGetterNamed{dynamic}.call(value: value);
   self::Extension|tearOffGetterGenericRequired{dynamic}.call(value);
-  self::Extension|tearOffGetterGenericRequired{dynamic}.call<self::Extension|getterCallsFromInstanceContext::T*>(value);
+  self::Extension|tearOffGetterGenericRequired{dynamic}.call<self::Extension|getterCallsFromInstanceContext::T%>(value);
   self::Extension|tearOffGetterGenericOptional{dynamic}.call();
-  self::Extension|tearOffGetterGenericOptional{dynamic}.call<self::Extension|getterCallsFromInstanceContext::T*>();
+  self::Extension|tearOffGetterGenericOptional{dynamic}.call<self::Extension|getterCallsFromInstanceContext::T%>();
   self::Extension|tearOffGetterGenericOptional{dynamic}.call(value);
-  self::Extension|tearOffGetterGenericOptional{dynamic}.call<self::Extension|getterCallsFromInstanceContext::T*>(value);
+  self::Extension|tearOffGetterGenericOptional{dynamic}.call<self::Extension|getterCallsFromInstanceContext::T%>(value);
   self::Extension|tearOffGetterGenericNamed{dynamic}.call();
-  self::Extension|tearOffGetterGenericNamed{dynamic}.call<self::Extension|getterCallsFromInstanceContext::T*>();
+  self::Extension|tearOffGetterGenericNamed{dynamic}.call<self::Extension|getterCallsFromInstanceContext::T%>();
   self::Extension|tearOffGetterGenericNamed{dynamic}.call(value: value);
-  self::Extension|tearOffGetterGenericNamed{dynamic}.call<self::Extension|getterCallsFromInstanceContext::T*>(value: value);
+  self::Extension|tearOffGetterGenericNamed{dynamic}.call<self::Extension|getterCallsFromInstanceContext::T%>(value: value);
 }
-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 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 {}
 
 constants  {
diff --git a/pkg/front_end/testcases/extensions/direct_static_access.dart.weak.outline.expect b/pkg/front_end/testcases/extensions/direct_static_access.dart.weak.outline.expect
index 4453608..0f7ea93 100644
--- a/pkg/front_end/testcases/extensions/direct_static_access.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extensions/direct_static_access.dart.weak.outline.expect
@@ -1,23 +1,13 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class Class<T extends core::Object* = dynamic> extends core::Object {
+class Class<T extends core::Object? = dynamic> extends core::Object {
   static field dynamic field;
-  synthetic constructor •() → self::Class<self::Class::T*>*
+  synthetic constructor •() → self::Class<self::Class::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension Extension<T extends core::Object* = dynamic> on self::Class<T*>* {
+extension Extension<T extends core::Object? = dynamic> on self::Class<T%> {
   static get property = get self::Extension|property;
   static field field = self::Extension|field;
   static method readGetter = self::Extension|readGetter;
@@ -61,11 +51,11 @@
   ;
 static method Extension|writeSetterNamed({dynamic value}) → dynamic
   ;
-static method Extension|genericWriteSetterRequired<S extends core::Object* = dynamic>(self::Extension|genericWriteSetterRequired::S* value) → dynamic
+static method Extension|genericWriteSetterRequired<S extends core::Object? = dynamic>(self::Extension|genericWriteSetterRequired::S% value) → dynamic
   ;
-static method Extension|genericWriteSetterOptional<S extends core::Object* = dynamic>([self::Extension|genericWriteSetterOptional::S* value]) → dynamic
+static method Extension|genericWriteSetterOptional<S extends core::Object? = dynamic>([self::Extension|genericWriteSetterOptional::S? value]) → dynamic
   ;
-static method Extension|genericWriteSetterNamed<S extends core::Object* = dynamic>({self::Extension|genericWriteSetterNamed::S* value}) → dynamic
+static method Extension|genericWriteSetterNamed<S extends core::Object? = dynamic>({self::Extension|genericWriteSetterNamed::S? value}) → dynamic
   ;
 static get Extension|tearOffGetterNoArgs() → dynamic
   ;
@@ -81,29 +71,29 @@
   ;
 static get Extension|tearOffGetterGenericNamed() → dynamic
   ;
-static method Extension|invocationsFromStaticContext(core::int* value) → dynamic
+static method Extension|invocationsFromStaticContext(core::int value) → dynamic
   ;
-static method Extension|tearOffsFromStaticContext(core::int* value) → dynamic
+static method Extension|tearOffsFromStaticContext(core::int value) → dynamic
   ;
 static method Extension|fieldAccessFromStaticContext() → dynamic
   ;
-static method Extension|getterCallsFromStaticContext(core::int* value) → dynamic
+static method Extension|getterCallsFromStaticContext(core::int 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|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>(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>(lowered final self::Class<self::Extension|tearOffsFromInstanceContext::T*>* #this, self::Extension|tearOffsFromInstanceContext::T* value) → 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>(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>(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>(lowered final self::Class<self::Extension|fieldAccessFromInstanceContext::T*>* #this) → 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>(lowered final self::Class<self::Extension|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>(lowered final self::Class<self::Extension|getterCallsFromInstanceContext::T*>* #this, self::Extension|getterCallsFromInstanceContext::T* value) → 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>(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>(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 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.weak.transformed.expect b/pkg/front_end/testcases/extensions/direct_static_access.dart.weak.transformed.expect
index 942973c..cb65d7c 100644
--- a/pkg/front_end/testcases/extensions/direct_static_access.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/direct_static_access.dart.weak.transformed.expect
@@ -1,24 +1,14 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class Class<T extends core::Object* = dynamic> extends core::Object {
+class Class<T extends core::Object? = dynamic> extends core::Object {
   static field dynamic field = null;
-  synthetic constructor •() → self::Class<self::Class::T*>*
+  synthetic constructor •() → self::Class<self::Class::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension Extension<T extends core::Object* = dynamic> on self::Class<T*>* {
+extension Extension<T extends core::Object? = dynamic> on self::Class<T%> {
   static get property = get self::Extension|property;
   static field field = self::Extension|field;
   static method readGetter = self::Extension|readGetter;
@@ -67,13 +57,13 @@
 static method Extension|writeSetterNamed({dynamic value = #C1}) → dynamic {
   self::Extension|property = value;
 }
-static method Extension|genericWriteSetterRequired<S extends core::Object* = dynamic>(self::Extension|genericWriteSetterRequired::S* value) → dynamic {
+static method Extension|genericWriteSetterRequired<S extends core::Object? = dynamic>(self::Extension|genericWriteSetterRequired::S% value) → dynamic {
   self::Extension|property = value;
 }
-static method Extension|genericWriteSetterOptional<S extends core::Object* = dynamic>([self::Extension|genericWriteSetterOptional::S* value = #C1]) → dynamic {
+static method Extension|genericWriteSetterOptional<S extends core::Object? = dynamic>([self::Extension|genericWriteSetterOptional::S? value = #C1]) → dynamic {
   self::Extension|property = value;
 }
-static method Extension|genericWriteSetterNamed<S extends core::Object* = dynamic>({self::Extension|genericWriteSetterNamed::S* value = #C1}) → dynamic {
+static method Extension|genericWriteSetterNamed<S extends core::Object? = dynamic>({self::Extension|genericWriteSetterNamed::S? value = #C1}) → dynamic {
   self::Extension|property = value;
 }
 static get Extension|tearOffGetterNoArgs() → dynamic
@@ -90,54 +80,54 @@
   return #C7;
 static get Extension|tearOffGetterGenericNamed() → dynamic
   return #C8;
-static method Extension|invocationsFromStaticContext(core::int* value) → dynamic {
+static method Extension|invocationsFromStaticContext(core::int value) → dynamic {
   self::Extension|readGetter();
   self::Extension|writeSetterRequired(value);
   self::Extension|writeSetterOptional();
   self::Extension|writeSetterOptional(value);
   self::Extension|writeSetterNamed();
   self::Extension|writeSetterNamed(value: value);
-  self::Extension|genericWriteSetterRequired<core::int*>(value);
-  self::Extension|genericWriteSetterRequired<core::int*>(value);
+  self::Extension|genericWriteSetterRequired<core::int>(value);
+  self::Extension|genericWriteSetterRequired<core::int>(value);
   self::Extension|genericWriteSetterOptional<dynamic>();
-  self::Extension|genericWriteSetterOptional<core::int*>();
-  self::Extension|genericWriteSetterOptional<core::int*>(value);
-  self::Extension|genericWriteSetterOptional<core::int*>(value);
+  self::Extension|genericWriteSetterOptional<core::int>();
+  self::Extension|genericWriteSetterOptional<core::int>(value);
+  self::Extension|genericWriteSetterOptional<core::int>(value);
   self::Extension|genericWriteSetterNamed<dynamic>();
-  self::Extension|genericWriteSetterNamed<core::int*>();
-  self::Extension|genericWriteSetterNamed<core::int*>(value: value);
-  self::Extension|genericWriteSetterNamed<core::int*>(value: value);
+  self::Extension|genericWriteSetterNamed<core::int>();
+  self::Extension|genericWriteSetterNamed<core::int>(value: value);
+  self::Extension|genericWriteSetterNamed<core::int>(value: value);
 }
-static method Extension|tearOffsFromStaticContext(core::int* value) → dynamic {
-  () →* dynamic tearOffNoArgs = #C2;
-  tearOffNoArgs(){() →* dynamic};
-  (dynamic) →* dynamic tearOffRequired = #C3;
-  tearOffRequired(value){(dynamic) →* dynamic};
-  ([dynamic]) →* dynamic tearOffOptional = #C4;
-  tearOffOptional(){([dynamic]) →* dynamic};
-  tearOffOptional(value){([dynamic]) →* dynamic};
-  ({value: dynamic}) →* dynamic tearOffNamed = #C5;
-  tearOffNamed(){({value: dynamic}) →* dynamic};
-  tearOffNamed(value: value){({value: dynamic}) →* dynamic};
-  <S extends core::Object* = dynamic>(S*) →* dynamic tearOffGenericRequired = #C6;
-  tearOffGenericRequired<core::int*>(value){(core::int*) →* dynamic};
-  tearOffGenericRequired<core::int*>(value){(core::int*) →* dynamic};
-  <S extends core::Object* = dynamic>([S*]) →* dynamic tearOffGenericOptional = #C7;
-  tearOffGenericOptional<dynamic>(){([dynamic]) →* dynamic};
-  tearOffGenericOptional<core::int*>(){([core::int*]) →* dynamic};
-  tearOffGenericOptional<core::int*>(value){([core::int*]) →* dynamic};
-  tearOffGenericOptional<core::int*>(value){([core::int*]) →* dynamic};
-  <S extends core::Object* = dynamic>({value: S*}) →* dynamic tearOffGenericNamed = #C8;
-  tearOffGenericNamed<dynamic>(){({value: dynamic}) →* dynamic};
-  tearOffGenericNamed<core::int*>(){({value: core::int*}) →* dynamic};
-  tearOffGenericNamed<core::int*>(value: value){({value: core::int*}) →* dynamic};
-  tearOffGenericNamed<core::int*>(value: value){({value: core::int*}) →* dynamic};
+static method Extension|tearOffsFromStaticContext(core::int value) → dynamic {
+  () → dynamic tearOffNoArgs = #C2;
+  tearOffNoArgs(){() → dynamic};
+  (dynamic) → dynamic tearOffRequired = #C3;
+  tearOffRequired(value){(dynamic) → dynamic};
+  ([dynamic]) → dynamic tearOffOptional = #C4;
+  tearOffOptional(){([dynamic]) → dynamic};
+  tearOffOptional(value){([dynamic]) → dynamic};
+  ({value: dynamic}) → dynamic tearOffNamed = #C5;
+  tearOffNamed(){({value: dynamic}) → dynamic};
+  tearOffNamed(value: value){({value: dynamic}) → dynamic};
+  <S extends core::Object? = dynamic>(S%) → dynamic tearOffGenericRequired = #C6;
+  tearOffGenericRequired<core::int>(value){(core::int) → dynamic};
+  tearOffGenericRequired<core::int>(value){(core::int) → dynamic};
+  <S extends core::Object? = dynamic>([S?]) → dynamic tearOffGenericOptional = #C7;
+  tearOffGenericOptional<dynamic>(){([dynamic]) → dynamic};
+  tearOffGenericOptional<core::int>(){([core::int?]) → dynamic};
+  tearOffGenericOptional<core::int>(value){([core::int?]) → dynamic};
+  tearOffGenericOptional<core::int>(value){([core::int?]) → dynamic};
+  <S extends core::Object? = dynamic>({value: S?}) → dynamic tearOffGenericNamed = #C8;
+  tearOffGenericNamed<dynamic>(){({value: dynamic}) → dynamic};
+  tearOffGenericNamed<core::int>(){({value: core::int?}) → dynamic};
+  tearOffGenericNamed<core::int>(value: value){({value: core::int?}) → dynamic};
+  tearOffGenericNamed<core::int>(value: value){({value: core::int?}) → dynamic};
 }
 static method Extension|fieldAccessFromStaticContext() → dynamic {
   self::Extension|field = self::Extension|property;
   self::Extension|property = self::Extension|field;
 }
-static method Extension|getterCallsFromStaticContext(core::int* value) → dynamic {
+static method Extension|getterCallsFromStaticContext(core::int value) → dynamic {
   self::Extension|tearOffGetterNoArgs{dynamic}.call();
   self::Extension|tearOffGetterRequired{dynamic}.call(value);
   self::Extension|tearOffGetterOptional{dynamic}.call();
@@ -145,70 +135,70 @@
   self::Extension|tearOffGetterNamed{dynamic}.call();
   self::Extension|tearOffGetterNamed{dynamic}.call(value: value);
   self::Extension|tearOffGetterGenericRequired{dynamic}.call(value);
-  self::Extension|tearOffGetterGenericRequired{dynamic}.call<core::int*>(value);
+  self::Extension|tearOffGetterGenericRequired{dynamic}.call<core::int>(value);
   self::Extension|tearOffGetterGenericOptional{dynamic}.call();
-  self::Extension|tearOffGetterGenericOptional{dynamic}.call<core::int*>();
+  self::Extension|tearOffGetterGenericOptional{dynamic}.call<core::int>();
   self::Extension|tearOffGetterGenericOptional{dynamic}.call(value);
-  self::Extension|tearOffGetterGenericOptional{dynamic}.call<core::int*>(value);
+  self::Extension|tearOffGetterGenericOptional{dynamic}.call<core::int>(value);
   self::Extension|tearOffGetterGenericNamed{dynamic}.call();
-  self::Extension|tearOffGetterGenericNamed{dynamic}.call<core::int*>();
+  self::Extension|tearOffGetterGenericNamed{dynamic}.call<core::int>();
   self::Extension|tearOffGetterGenericNamed{dynamic}.call(value: value);
-  self::Extension|tearOffGetterGenericNamed{dynamic}.call<core::int*>(value: value);
+  self::Extension|tearOffGetterGenericNamed{dynamic}.call<core::int>(value: value);
 }
-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|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();
   self::Extension|writeSetterOptional(value);
   self::Extension|writeSetterNamed();
   self::Extension|writeSetterNamed(value: value);
-  self::Extension|genericWriteSetterRequired<self::Extension|invocationsFromInstanceContext::T*>(value);
-  self::Extension|genericWriteSetterRequired<self::Extension|invocationsFromInstanceContext::T*>(value);
+  self::Extension|genericWriteSetterRequired<self::Extension|invocationsFromInstanceContext::T%>(value);
+  self::Extension|genericWriteSetterRequired<self::Extension|invocationsFromInstanceContext::T%>(value);
   self::Extension|genericWriteSetterOptional<dynamic>();
-  self::Extension|genericWriteSetterOptional<self::Extension|invocationsFromInstanceContext::T*>();
-  self::Extension|genericWriteSetterOptional<self::Extension|invocationsFromInstanceContext::T*>(value);
-  self::Extension|genericWriteSetterOptional<self::Extension|invocationsFromInstanceContext::T*>(value);
+  self::Extension|genericWriteSetterOptional<self::Extension|invocationsFromInstanceContext::T%>();
+  self::Extension|genericWriteSetterOptional<self::Extension|invocationsFromInstanceContext::T%>(value);
+  self::Extension|genericWriteSetterOptional<self::Extension|invocationsFromInstanceContext::T%>(value);
   self::Extension|genericWriteSetterNamed<dynamic>();
-  self::Extension|genericWriteSetterNamed<self::Extension|invocationsFromInstanceContext::T*>();
-  self::Extension|genericWriteSetterNamed<self::Extension|invocationsFromInstanceContext::T*>(value: value);
-  self::Extension|genericWriteSetterNamed<self::Extension|invocationsFromInstanceContext::T*>(value: value);
+  self::Extension|genericWriteSetterNamed<self::Extension|invocationsFromInstanceContext::T%>();
+  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>(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>(lowered final self::Class<self::Extension|tearOffsFromInstanceContext::T*>* #this, self::Extension|tearOffsFromInstanceContext::T* value) → dynamic {
-  () →* dynamic tearOffNoArgs = #C2;
-  tearOffNoArgs(){() →* dynamic};
-  (dynamic) →* dynamic tearOffRequired = #C3;
-  tearOffRequired(value){(dynamic) →* dynamic};
-  ([dynamic]) →* dynamic tearOffOptional = #C4;
-  tearOffOptional(){([dynamic]) →* dynamic};
-  tearOffOptional(value){([dynamic]) →* dynamic};
-  ({value: dynamic}) →* dynamic tearOffNamed = #C5;
-  tearOffNamed(){({value: dynamic}) →* dynamic};
-  tearOffNamed(value: value){({value: dynamic}) →* dynamic};
-  <S extends core::Object* = dynamic>(S*) →* dynamic tearOffGenericRequired = #C6;
-  tearOffGenericRequired<self::Extension|tearOffsFromInstanceContext::T*>(value){(self::Extension|tearOffsFromInstanceContext::T*) →* dynamic};
-  tearOffGenericRequired<self::Extension|tearOffsFromInstanceContext::T*>(value){(self::Extension|tearOffsFromInstanceContext::T*) →* dynamic};
-  <S extends core::Object* = dynamic>([S*]) →* dynamic tearOffGenericOptional = #C7;
-  tearOffGenericOptional<dynamic>(){([dynamic]) →* dynamic};
-  tearOffGenericOptional<self::Extension|tearOffsFromInstanceContext::T*>(){([self::Extension|tearOffsFromInstanceContext::T*]) →* dynamic};
-  tearOffGenericOptional<self::Extension|tearOffsFromInstanceContext::T*>(value){([self::Extension|tearOffsFromInstanceContext::T*]) →* dynamic};
-  tearOffGenericOptional<self::Extension|tearOffsFromInstanceContext::T*>(value){([self::Extension|tearOffsFromInstanceContext::T*]) →* dynamic};
-  <S extends core::Object* = dynamic>({value: S*}) →* dynamic tearOffGenericNamed = #C8;
-  tearOffGenericNamed<dynamic>(){({value: dynamic}) →* dynamic};
-  tearOffGenericNamed<self::Extension|tearOffsFromInstanceContext::T*>(){({value: self::Extension|tearOffsFromInstanceContext::T*}) →* dynamic};
-  tearOffGenericNamed<self::Extension|tearOffsFromInstanceContext::T*>(value: value){({value: self::Extension|tearOffsFromInstanceContext::T*}) →* dynamic};
-  tearOffGenericNamed<self::Extension|tearOffsFromInstanceContext::T*>(value: value){({value: self::Extension|tearOffsFromInstanceContext::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>(lowered final self::Class<self::Extension|tearOffsFromInstanceContext::T%> #this, self::Extension|tearOffsFromInstanceContext::T% value) → dynamic {
+  () → dynamic tearOffNoArgs = #C2;
+  tearOffNoArgs(){() → dynamic};
+  (dynamic) → dynamic tearOffRequired = #C3;
+  tearOffRequired(value){(dynamic) → dynamic};
+  ([dynamic]) → dynamic tearOffOptional = #C4;
+  tearOffOptional(){([dynamic]) → dynamic};
+  tearOffOptional(value){([dynamic]) → dynamic};
+  ({value: dynamic}) → dynamic tearOffNamed = #C5;
+  tearOffNamed(){({value: dynamic}) → dynamic};
+  tearOffNamed(value: value){({value: dynamic}) → dynamic};
+  <S extends core::Object? = dynamic>(S%) → dynamic tearOffGenericRequired = #C6;
+  tearOffGenericRequired<self::Extension|tearOffsFromInstanceContext::T%>(value){(self::Extension|tearOffsFromInstanceContext::T%) → dynamic};
+  tearOffGenericRequired<self::Extension|tearOffsFromInstanceContext::T%>(value){(self::Extension|tearOffsFromInstanceContext::T%) → dynamic};
+  <S extends core::Object? = dynamic>([S?]) → dynamic tearOffGenericOptional = #C7;
+  tearOffGenericOptional<dynamic>(){([dynamic]) → dynamic};
+  tearOffGenericOptional<self::Extension|tearOffsFromInstanceContext::T%>(){([self::Extension|tearOffsFromInstanceContext::T?]) → dynamic};
+  tearOffGenericOptional<self::Extension|tearOffsFromInstanceContext::T%>(value){([self::Extension|tearOffsFromInstanceContext::T?]) → dynamic};
+  tearOffGenericOptional<self::Extension|tearOffsFromInstanceContext::T%>(value){([self::Extension|tearOffsFromInstanceContext::T?]) → dynamic};
+  <S extends core::Object? = dynamic>({value: S?}) → dynamic tearOffGenericNamed = #C8;
+  tearOffGenericNamed<dynamic>(){({value: dynamic}) → dynamic};
+  tearOffGenericNamed<self::Extension|tearOffsFromInstanceContext::T%>(){({value: self::Extension|tearOffsFromInstanceContext::T?}) → dynamic};
+  tearOffGenericNamed<self::Extension|tearOffsFromInstanceContext::T%>(value: value){({value: self::Extension|tearOffsFromInstanceContext::T?}) → dynamic};
+  tearOffGenericNamed<self::Extension|tearOffsFromInstanceContext::T%>(value: value){({value: self::Extension|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>(lowered final self::Class<self::Extension|fieldAccessFromInstanceContext::T*>* #this) → 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>(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>(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>(lowered final self::Class<self::Extension|getterCallsFromInstanceContext::T*>* #this, self::Extension|getterCallsFromInstanceContext::T* value) → 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>(lowered final self::Class<self::Extension|getterCallsFromInstanceContext::T%> #this, self::Extension|getterCallsFromInstanceContext::T% value) → dynamic {
   self::Extension|tearOffGetterNoArgs{dynamic}.call();
   self::Extension|tearOffGetterRequired{dynamic}.call(value);
   self::Extension|tearOffGetterOptional{dynamic}.call();
@@ -216,18 +206,18 @@
   self::Extension|tearOffGetterNamed{dynamic}.call();
   self::Extension|tearOffGetterNamed{dynamic}.call(value: value);
   self::Extension|tearOffGetterGenericRequired{dynamic}.call(value);
-  self::Extension|tearOffGetterGenericRequired{dynamic}.call<self::Extension|getterCallsFromInstanceContext::T*>(value);
+  self::Extension|tearOffGetterGenericRequired{dynamic}.call<self::Extension|getterCallsFromInstanceContext::T%>(value);
   self::Extension|tearOffGetterGenericOptional{dynamic}.call();
-  self::Extension|tearOffGetterGenericOptional{dynamic}.call<self::Extension|getterCallsFromInstanceContext::T*>();
+  self::Extension|tearOffGetterGenericOptional{dynamic}.call<self::Extension|getterCallsFromInstanceContext::T%>();
   self::Extension|tearOffGetterGenericOptional{dynamic}.call(value);
-  self::Extension|tearOffGetterGenericOptional{dynamic}.call<self::Extension|getterCallsFromInstanceContext::T*>(value);
+  self::Extension|tearOffGetterGenericOptional{dynamic}.call<self::Extension|getterCallsFromInstanceContext::T%>(value);
   self::Extension|tearOffGetterGenericNamed{dynamic}.call();
-  self::Extension|tearOffGetterGenericNamed{dynamic}.call<self::Extension|getterCallsFromInstanceContext::T*>();
+  self::Extension|tearOffGetterGenericNamed{dynamic}.call<self::Extension|getterCallsFromInstanceContext::T%>();
   self::Extension|tearOffGetterGenericNamed{dynamic}.call(value: value);
-  self::Extension|tearOffGetterGenericNamed{dynamic}.call<self::Extension|getterCallsFromInstanceContext::T*>(value: value);
+  self::Extension|tearOffGetterGenericNamed{dynamic}.call<self::Extension|getterCallsFromInstanceContext::T%>(value: value);
 }
-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 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 {}
 
 constants  {
diff --git a/pkg/front_end/testcases/extensions/dynamic_invoke.dart b/pkg/front_end/testcases/extensions/dynamic_invoke.dart
index c449576..bd327b7 100644
--- a/pkg/front_end/testcases/extensions/dynamic_invoke.dart
+++ b/pkg/front_end/testcases/extensions/dynamic_invoke.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2019, 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.
-// @dart=2.9
+
 class Class {
   noSuchMethod(Invocation i) => 123;
 }
diff --git a/pkg/front_end/testcases/extensions/dynamic_invoke.dart.textual_outline.expect b/pkg/front_end/testcases/extensions/dynamic_invoke.dart.textual_outline.expect
index de6b9c9..5ee7ab2 100644
--- a/pkg/front_end/testcases/extensions/dynamic_invoke.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/extensions/dynamic_invoke.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Class {
   noSuchMethod(Invocation i) => 123;
 }
diff --git a/pkg/front_end/testcases/extensions/dynamic_invoke.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/extensions/dynamic_invoke.dart.textual_outline_modelled.expect
index ab98ca8..df09e5e 100644
--- a/pkg/front_end/testcases/extensions/dynamic_invoke.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/extensions/dynamic_invoke.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Class {
   noSuchMethod(Invocation i) => 123;
 }
diff --git a/pkg/front_end/testcases/extensions/dynamic_invoke.dart.weak.expect b/pkg/front_end/testcases/extensions/dynamic_invoke.dart.weak.expect
index 8289cb4..7f2c062 100644
--- a/pkg/front_end/testcases/extensions/dynamic_invoke.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/dynamic_invoke.dart.weak.expect
@@ -1,24 +1,15 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Class extends core::Object {
-  synthetic constructor •() → self::Class*
+  synthetic constructor •() → self::Class
     : super core::Object::•()
     ;
-  method noSuchMethod(core::Invocation* i) → dynamic
+  method noSuchMethod(core::Invocation i) → dynamic
     return 123;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension ClassExtension on self::Class* {
+extension ClassExtension on self::Class {
   method method = self::ClassExtension|method;
   tearoff method = self::ClassExtension|get#method;
 }
@@ -26,24 +17,24 @@
   method method = self::Extension|method;
   tearoff method = self::Extension|get#method;
 }
-static method ClassExtension|method(lowered final self::Class* #this) → core::int*
+static method ClassExtension|method(lowered final self::Class #this) → core::int
   return 42;
-static method ClassExtension|get#method(lowered final self::Class* #this) → () →* core::int*
-  return () → core::int* => self::ClassExtension|method(#this);
-static method Extension|method(lowered final dynamic #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(lowered final dynamic #this) → core::int
   return 87;
-static method Extension|get#method(lowered final dynamic #this) → () →* core::int*
-  return () → core::int* => self::Extension|method(#this);
+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::•();
-  core::Object* c1 = new self::Class::•();
-  self::Class* c2 = new self::Class::•();
+  core::Object c1 = new self::Class::•();
+  self::Class c2 = new self::Class::•();
   self::expect(123, c0{dynamic}.method());
   self::expect(87, self::Extension|method(c1));
   self::expect(42, self::ClassExtension|method(c2));
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual)) {
     throw "Mismatch: expected=${expected}, actual=${actual}";
   }
 }
diff --git a/pkg/front_end/testcases/extensions/dynamic_invoke.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/dynamic_invoke.dart.weak.modular.expect
index 8289cb4..7f2c062 100644
--- a/pkg/front_end/testcases/extensions/dynamic_invoke.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/extensions/dynamic_invoke.dart.weak.modular.expect
@@ -1,24 +1,15 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Class extends core::Object {
-  synthetic constructor •() → self::Class*
+  synthetic constructor •() → self::Class
     : super core::Object::•()
     ;
-  method noSuchMethod(core::Invocation* i) → dynamic
+  method noSuchMethod(core::Invocation i) → dynamic
     return 123;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension ClassExtension on self::Class* {
+extension ClassExtension on self::Class {
   method method = self::ClassExtension|method;
   tearoff method = self::ClassExtension|get#method;
 }
@@ -26,24 +17,24 @@
   method method = self::Extension|method;
   tearoff method = self::Extension|get#method;
 }
-static method ClassExtension|method(lowered final self::Class* #this) → core::int*
+static method ClassExtension|method(lowered final self::Class #this) → core::int
   return 42;
-static method ClassExtension|get#method(lowered final self::Class* #this) → () →* core::int*
-  return () → core::int* => self::ClassExtension|method(#this);
-static method Extension|method(lowered final dynamic #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(lowered final dynamic #this) → core::int
   return 87;
-static method Extension|get#method(lowered final dynamic #this) → () →* core::int*
-  return () → core::int* => self::Extension|method(#this);
+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::•();
-  core::Object* c1 = new self::Class::•();
-  self::Class* c2 = new self::Class::•();
+  core::Object c1 = new self::Class::•();
+  self::Class c2 = new self::Class::•();
   self::expect(123, c0{dynamic}.method());
   self::expect(87, self::Extension|method(c1));
   self::expect(42, self::ClassExtension|method(c2));
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual)) {
     throw "Mismatch: expected=${expected}, actual=${actual}";
   }
 }
diff --git a/pkg/front_end/testcases/extensions/dynamic_invoke.dart.weak.outline.expect b/pkg/front_end/testcases/extensions/dynamic_invoke.dart.weak.outline.expect
index 1f8c07d..c33f586 100644
--- a/pkg/front_end/testcases/extensions/dynamic_invoke.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extensions/dynamic_invoke.dart.weak.outline.expect
@@ -1,23 +1,14 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Class extends core::Object {
-  synthetic constructor •() → self::Class*
+  synthetic constructor •() → self::Class
     ;
-  method noSuchMethod(core::Invocation* i) → dynamic
+  method noSuchMethod(core::Invocation i) → dynamic
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension ClassExtension on self::Class* {
+extension ClassExtension on self::Class {
   method method = self::ClassExtension|method;
   tearoff method = self::ClassExtension|get#method;
 }
@@ -25,14 +16,14 @@
   method method = self::Extension|method;
   tearoff method = self::Extension|get#method;
 }
-static method ClassExtension|method(lowered final self::Class* #this) → core::int*
+static method ClassExtension|method(lowered 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(lowered final dynamic #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(lowered 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 Extension|get#method(lowered final dynamic #this) → () → core::int
+  return () → core::int => self::Extension|method(#this);
 static method main() → dynamic
   ;
 static method expect(dynamic expected, dynamic actual) → dynamic
diff --git a/pkg/front_end/testcases/extensions/dynamic_invoke.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/dynamic_invoke.dart.weak.transformed.expect
index 8289cb4..7f2c062 100644
--- a/pkg/front_end/testcases/extensions/dynamic_invoke.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/dynamic_invoke.dart.weak.transformed.expect
@@ -1,24 +1,15 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Class extends core::Object {
-  synthetic constructor •() → self::Class*
+  synthetic constructor •() → self::Class
     : super core::Object::•()
     ;
-  method noSuchMethod(core::Invocation* i) → dynamic
+  method noSuchMethod(core::Invocation i) → dynamic
     return 123;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension ClassExtension on self::Class* {
+extension ClassExtension on self::Class {
   method method = self::ClassExtension|method;
   tearoff method = self::ClassExtension|get#method;
 }
@@ -26,24 +17,24 @@
   method method = self::Extension|method;
   tearoff method = self::Extension|get#method;
 }
-static method ClassExtension|method(lowered final self::Class* #this) → core::int*
+static method ClassExtension|method(lowered final self::Class #this) → core::int
   return 42;
-static method ClassExtension|get#method(lowered final self::Class* #this) → () →* core::int*
-  return () → core::int* => self::ClassExtension|method(#this);
-static method Extension|method(lowered final dynamic #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(lowered final dynamic #this) → core::int
   return 87;
-static method Extension|get#method(lowered final dynamic #this) → () →* core::int*
-  return () → core::int* => self::Extension|method(#this);
+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::•();
-  core::Object* c1 = new self::Class::•();
-  self::Class* c2 = new self::Class::•();
+  core::Object c1 = new self::Class::•();
+  self::Class c2 = new self::Class::•();
   self::expect(123, c0{dynamic}.method());
   self::expect(87, self::Extension|method(c1));
   self::expect(42, self::ClassExtension|method(c2));
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual)) {
     throw "Mismatch: expected=${expected}, actual=${actual}";
   }
 }
diff --git a/pkg/front_end/testcases/extensions/explicit_extension_access.dart b/pkg/front_end/testcases/extensions/explicit_extension_access.dart
index 88b2d04..dc5a1e5 100644
--- a/pkg/front_end/testcases/extensions/explicit_extension_access.dart
+++ b/pkg/front_end/testcases/extensions/explicit_extension_access.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2019, 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.
-// @dart=2.9
+
 class Class {
   int field1 = 42;
   int field2 = 87;
@@ -13,7 +13,7 @@
     field1 = value;
   }
   int method() => field1;
-  int genericMethod<T extends num>(T t) => field1 + t;
+  num genericMethod<T extends num>(T t) => field1 + t;
 }
 
 extension Extension2 on Class {
@@ -22,7 +22,7 @@
     field2 = value;
   }
   int method() => field2;
-  int genericMethod<T extends num>(T t) => field2 + t;
+  num genericMethod<T extends num>(T t) => field2 + t;
 }
 
 main() {
diff --git a/pkg/front_end/testcases/extensions/explicit_extension_access.dart.textual_outline.expect b/pkg/front_end/testcases/extensions/explicit_extension_access.dart.textual_outline.expect
index 7d088c6..94ec7bc 100644
--- a/pkg/front_end/testcases/extensions/explicit_extension_access.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/extensions/explicit_extension_access.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Class {
   int field1 = 42;
   int field2 = 87;
@@ -8,14 +7,14 @@
   int get field => field1;
   void set field(int value) {}
   int method() => field1;
-  int genericMethod<T extends num>(T t) => field1 + t;
+  num genericMethod<T extends num>(T t) => field1 + t;
 }
 
 extension Extension2 on Class {
   int get field => field2;
   void set field(int value) {}
   int method() => field2;
-  int genericMethod<T extends num>(T t) => field2 + t;
+  num genericMethod<T extends num>(T t) => field2 + t;
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/extensions/explicit_extension_access.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/extensions/explicit_extension_access.dart.textual_outline_modelled.expect
index 6e3b6e5..a014681 100644
--- a/pkg/front_end/testcases/extensions/explicit_extension_access.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/extensions/explicit_extension_access.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Class {
   int field1 = 42;
   int field2 = 87;
@@ -7,16 +6,16 @@
 expect(expected, actual) {}
 
 extension Extension1 on Class {
-  int genericMethod<T extends num>(T t) => field1 + t;
   int get field => field1;
   int method() => field1;
+  num genericMethod<T extends num>(T t) => field1 + t;
   void set field(int value) {}
 }
 
 extension Extension2 on Class {
-  int genericMethod<T extends num>(T t) => field2 + t;
   int get field => field2;
   int method() => field2;
+  num genericMethod<T extends num>(T t) => field2 + t;
   void set field(int value) {}
 }
 
diff --git a/pkg/front_end/testcases/extensions/explicit_extension_access.dart.weak.expect b/pkg/front_end/testcases/extensions/explicit_extension_access.dart.weak.expect
index b2bd40c..4af2463 100644
--- a/pkg/front_end/testcases/extensions/explicit_extension_access.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/explicit_extension_access.dart.weak.expect
@@ -1,25 +1,15 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Class extends core::Object {
-  field core::int* field1 = 42;
-  field core::int* field2 = 87;
-  synthetic constructor •() → self::Class*
+  field core::int field1 = 42;
+  field core::int field2 = 87;
+  synthetic constructor •() → self::Class
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension Extension1 on self::Class* {
+extension Extension1 on self::Class {
   get field = self::Extension1|get#field;
   method method = self::Extension1|method;
   tearoff method = self::Extension1|get#method;
@@ -27,7 +17,7 @@
   tearoff genericMethod = self::Extension1|get#genericMethod;
   set field = self::Extension1|set#field;
 }
-extension Extension2 on self::Class* {
+extension Extension2 on self::Class {
   get field = self::Extension2|get#field;
   method method = self::Extension2|method;
   tearoff method = self::Extension2|get#method;
@@ -35,59 +25,59 @@
   tearoff genericMethod = self::Extension2|get#genericMethod;
   set field = self::Extension2|set#field;
 }
-static method Extension1|get#field(lowered final self::Class* #this) → core::int*
-  return #this.{self::Class::field1}{core::int*};
-static method Extension1|set#field(lowered final self::Class* #this, core::int* value) → void {
+static method Extension1|get#field(lowered final self::Class #this) → core::int
+  return #this.{self::Class::field1}{core::int};
+static method Extension1|set#field(lowered final self::Class #this, core::int value) → void {
   #this.{self::Class::field1} = value;
 }
-static method Extension1|method(lowered final self::Class* #this) → core::int*
-  return #this.{self::Class::field1}{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*>(lowered final self::Class* #this, self::Extension1|genericMethod::T* t) → core::int*
-  return #this.{self::Class::field1}{core::int*}.{core::num::+}(t){(core::num*) →* core::num*} as{TypeError} core::int*;
-static method Extension1|get#genericMethod(lowered final self::Class* #this) → <T extends core::num*>(T*) →* core::int*
-  return <T extends core::num*>(T* t) → core::int* => self::Extension1|genericMethod<T*>(#this, t);
-static method Extension2|get#field(lowered final self::Class* #this) → core::int*
-  return #this.{self::Class::field2}{core::int*};
-static method Extension2|set#field(lowered final self::Class* #this, core::int* value) → void {
+static method Extension1|method(lowered final self::Class #this) → core::int
+  return #this.{self::Class::field1}{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>(lowered final self::Class #this, self::Extension1|genericMethod::T t) → core::num
+  return #this.{self::Class::field1}{core::int}.{core::num::+}(t){(core::num) → core::num};
+static method Extension1|get#genericMethod(lowered final self::Class #this) → <T extends core::num>(T) → core::num
+  return <T extends core::num>(T t) → core::num => self::Extension1|genericMethod<T>(#this, t);
+static method Extension2|get#field(lowered final self::Class #this) → core::int
+  return #this.{self::Class::field2}{core::int};
+static method Extension2|set#field(lowered final self::Class #this, core::int value) → void {
   #this.{self::Class::field2} = value;
 }
-static method Extension2|method(lowered final self::Class* #this) → core::int*
-  return #this.{self::Class::field2}{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*>(lowered final self::Class* #this, self::Extension2|genericMethod::T* t) → core::int*
-  return #this.{self::Class::field2}{core::int*}.{core::num::+}(t){(core::num*) →* core::num*} as{TypeError} core::int*;
-static method Extension2|get#genericMethod(lowered final self::Class* #this) → <T extends core::num*>(T*) →* core::int*
-  return <T extends core::num*>(T* t) → core::int* => self::Extension2|genericMethod<T*>(#this, t);
+static method Extension2|method(lowered final self::Class #this) → core::int
+  return #this.{self::Class::field2}{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>(lowered final self::Class #this, self::Extension2|genericMethod::T t) → core::num
+  return #this.{self::Class::field2}{core::int}.{core::num::+}(t){(core::num) → core::num};
+static method Extension2|get#genericMethod(lowered final self::Class #this) → <T extends core::num>(T) → core::num
+  return <T extends core::num>(T t) → core::num => self::Extension2|genericMethod<T>(#this, t);
 static method main() → dynamic {
-  self::Class* c = new self::Class::•();
+  self::Class c = new self::Class::•();
   self::expect(42, self::Extension1|get#field(c));
   self::expect(87, self::Extension2|get#field(c));
   self::expect(42, self::Extension1|method(c));
   self::expect(87, self::Extension2|method(c));
-  () →* core::int* tearOff1 = self::Extension1|get#method(c);
-  () →* core::int* tearOff2 = self::Extension2|get#method(c);
-  self::expect(42, tearOff1(){() →* core::int*});
-  self::expect(87, tearOff2(){() →* core::int*});
-  self::expect(52, self::Extension1|genericMethod<core::int*>(c, 10));
-  self::expect(97, self::Extension2|genericMethod<core::int*>(c, 10));
-  self::expect(52, self::Extension1|genericMethod<core::num*>(c, 10));
-  self::expect(97, self::Extension2|genericMethod<core::num*>(c, 10));
-  <T extends core::num*>(T*) →* core::int* genericTearOff1 = self::Extension1|get#genericMethod(c);
-  <T extends core::num*>(T*) →* core::int* genericTearOff2 = self::Extension2|get#genericMethod(c);
-  self::expect(52, genericTearOff1<core::int*>(10){(core::int*) →* core::int*});
-  self::expect(97, genericTearOff2<core::int*>(10){(core::int*) →* core::int*});
-  self::expect(52, genericTearOff1<core::num*>(10){(core::num*) →* core::int*});
-  self::expect(97, genericTearOff2<core::num*>(10){(core::num*) →* core::int*});
-  self::expect(23, let final self::Class* #t1 = c in let final core::int* #t2 = 23 in let final void #t3 = self::Extension1|set#field(#t1, #t2) in #t2);
-  self::expect(67, let final self::Class* #t4 = c in let final core::int* #t5 = 67 in let final void #t6 = self::Extension2|set#field(#t4, #t5) in #t5);
+  () → core::int tearOff1 = self::Extension1|get#method(c);
+  () → core::int tearOff2 = self::Extension2|get#method(c);
+  self::expect(42, tearOff1(){() → core::int});
+  self::expect(87, tearOff2(){() → core::int});
+  self::expect(52, self::Extension1|genericMethod<core::int>(c, 10));
+  self::expect(97, self::Extension2|genericMethod<core::int>(c, 10));
+  self::expect(52, self::Extension1|genericMethod<core::num>(c, 10));
+  self::expect(97, self::Extension2|genericMethod<core::num>(c, 10));
+  <T extends core::num>(T) → core::num genericTearOff1 = self::Extension1|get#genericMethod(c);
+  <T extends core::num>(T) → core::num genericTearOff2 = self::Extension2|get#genericMethod(c);
+  self::expect(52, genericTearOff1<core::int>(10){(core::int) → core::num});
+  self::expect(97, genericTearOff2<core::int>(10){(core::int) → core::num});
+  self::expect(52, genericTearOff1<core::num>(10){(core::num) → core::num});
+  self::expect(97, genericTearOff2<core::num>(10){(core::num) → core::num});
+  self::expect(23, let final self::Class #t1 = c in let final core::int #t2 = 23 in let final void #t3 = self::Extension1|set#field(#t1, #t2) in #t2);
+  self::expect(67, let final self::Class #t4 = c in let final core::int #t5 = 67 in let final void #t6 = self::Extension2|set#field(#t4, #t5) in #t5);
   self::expect(23, self::Extension1|get#field(c));
   self::expect(67, self::Extension2|get#field(c));
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual)) {
     throw "Mismatch: expected=${expected}, actual=${actual}";
   }
 }
diff --git a/pkg/front_end/testcases/extensions/explicit_extension_access.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/explicit_extension_access.dart.weak.modular.expect
index b2bd40c..4af2463 100644
--- a/pkg/front_end/testcases/extensions/explicit_extension_access.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/extensions/explicit_extension_access.dart.weak.modular.expect
@@ -1,25 +1,15 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Class extends core::Object {
-  field core::int* field1 = 42;
-  field core::int* field2 = 87;
-  synthetic constructor •() → self::Class*
+  field core::int field1 = 42;
+  field core::int field2 = 87;
+  synthetic constructor •() → self::Class
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension Extension1 on self::Class* {
+extension Extension1 on self::Class {
   get field = self::Extension1|get#field;
   method method = self::Extension1|method;
   tearoff method = self::Extension1|get#method;
@@ -27,7 +17,7 @@
   tearoff genericMethod = self::Extension1|get#genericMethod;
   set field = self::Extension1|set#field;
 }
-extension Extension2 on self::Class* {
+extension Extension2 on self::Class {
   get field = self::Extension2|get#field;
   method method = self::Extension2|method;
   tearoff method = self::Extension2|get#method;
@@ -35,59 +25,59 @@
   tearoff genericMethod = self::Extension2|get#genericMethod;
   set field = self::Extension2|set#field;
 }
-static method Extension1|get#field(lowered final self::Class* #this) → core::int*
-  return #this.{self::Class::field1}{core::int*};
-static method Extension1|set#field(lowered final self::Class* #this, core::int* value) → void {
+static method Extension1|get#field(lowered final self::Class #this) → core::int
+  return #this.{self::Class::field1}{core::int};
+static method Extension1|set#field(lowered final self::Class #this, core::int value) → void {
   #this.{self::Class::field1} = value;
 }
-static method Extension1|method(lowered final self::Class* #this) → core::int*
-  return #this.{self::Class::field1}{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*>(lowered final self::Class* #this, self::Extension1|genericMethod::T* t) → core::int*
-  return #this.{self::Class::field1}{core::int*}.{core::num::+}(t){(core::num*) →* core::num*} as{TypeError} core::int*;
-static method Extension1|get#genericMethod(lowered final self::Class* #this) → <T extends core::num*>(T*) →* core::int*
-  return <T extends core::num*>(T* t) → core::int* => self::Extension1|genericMethod<T*>(#this, t);
-static method Extension2|get#field(lowered final self::Class* #this) → core::int*
-  return #this.{self::Class::field2}{core::int*};
-static method Extension2|set#field(lowered final self::Class* #this, core::int* value) → void {
+static method Extension1|method(lowered final self::Class #this) → core::int
+  return #this.{self::Class::field1}{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>(lowered final self::Class #this, self::Extension1|genericMethod::T t) → core::num
+  return #this.{self::Class::field1}{core::int}.{core::num::+}(t){(core::num) → core::num};
+static method Extension1|get#genericMethod(lowered final self::Class #this) → <T extends core::num>(T) → core::num
+  return <T extends core::num>(T t) → core::num => self::Extension1|genericMethod<T>(#this, t);
+static method Extension2|get#field(lowered final self::Class #this) → core::int
+  return #this.{self::Class::field2}{core::int};
+static method Extension2|set#field(lowered final self::Class #this, core::int value) → void {
   #this.{self::Class::field2} = value;
 }
-static method Extension2|method(lowered final self::Class* #this) → core::int*
-  return #this.{self::Class::field2}{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*>(lowered final self::Class* #this, self::Extension2|genericMethod::T* t) → core::int*
-  return #this.{self::Class::field2}{core::int*}.{core::num::+}(t){(core::num*) →* core::num*} as{TypeError} core::int*;
-static method Extension2|get#genericMethod(lowered final self::Class* #this) → <T extends core::num*>(T*) →* core::int*
-  return <T extends core::num*>(T* t) → core::int* => self::Extension2|genericMethod<T*>(#this, t);
+static method Extension2|method(lowered final self::Class #this) → core::int
+  return #this.{self::Class::field2}{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>(lowered final self::Class #this, self::Extension2|genericMethod::T t) → core::num
+  return #this.{self::Class::field2}{core::int}.{core::num::+}(t){(core::num) → core::num};
+static method Extension2|get#genericMethod(lowered final self::Class #this) → <T extends core::num>(T) → core::num
+  return <T extends core::num>(T t) → core::num => self::Extension2|genericMethod<T>(#this, t);
 static method main() → dynamic {
-  self::Class* c = new self::Class::•();
+  self::Class c = new self::Class::•();
   self::expect(42, self::Extension1|get#field(c));
   self::expect(87, self::Extension2|get#field(c));
   self::expect(42, self::Extension1|method(c));
   self::expect(87, self::Extension2|method(c));
-  () →* core::int* tearOff1 = self::Extension1|get#method(c);
-  () →* core::int* tearOff2 = self::Extension2|get#method(c);
-  self::expect(42, tearOff1(){() →* core::int*});
-  self::expect(87, tearOff2(){() →* core::int*});
-  self::expect(52, self::Extension1|genericMethod<core::int*>(c, 10));
-  self::expect(97, self::Extension2|genericMethod<core::int*>(c, 10));
-  self::expect(52, self::Extension1|genericMethod<core::num*>(c, 10));
-  self::expect(97, self::Extension2|genericMethod<core::num*>(c, 10));
-  <T extends core::num*>(T*) →* core::int* genericTearOff1 = self::Extension1|get#genericMethod(c);
-  <T extends core::num*>(T*) →* core::int* genericTearOff2 = self::Extension2|get#genericMethod(c);
-  self::expect(52, genericTearOff1<core::int*>(10){(core::int*) →* core::int*});
-  self::expect(97, genericTearOff2<core::int*>(10){(core::int*) →* core::int*});
-  self::expect(52, genericTearOff1<core::num*>(10){(core::num*) →* core::int*});
-  self::expect(97, genericTearOff2<core::num*>(10){(core::num*) →* core::int*});
-  self::expect(23, let final self::Class* #t1 = c in let final core::int* #t2 = 23 in let final void #t3 = self::Extension1|set#field(#t1, #t2) in #t2);
-  self::expect(67, let final self::Class* #t4 = c in let final core::int* #t5 = 67 in let final void #t6 = self::Extension2|set#field(#t4, #t5) in #t5);
+  () → core::int tearOff1 = self::Extension1|get#method(c);
+  () → core::int tearOff2 = self::Extension2|get#method(c);
+  self::expect(42, tearOff1(){() → core::int});
+  self::expect(87, tearOff2(){() → core::int});
+  self::expect(52, self::Extension1|genericMethod<core::int>(c, 10));
+  self::expect(97, self::Extension2|genericMethod<core::int>(c, 10));
+  self::expect(52, self::Extension1|genericMethod<core::num>(c, 10));
+  self::expect(97, self::Extension2|genericMethod<core::num>(c, 10));
+  <T extends core::num>(T) → core::num genericTearOff1 = self::Extension1|get#genericMethod(c);
+  <T extends core::num>(T) → core::num genericTearOff2 = self::Extension2|get#genericMethod(c);
+  self::expect(52, genericTearOff1<core::int>(10){(core::int) → core::num});
+  self::expect(97, genericTearOff2<core::int>(10){(core::int) → core::num});
+  self::expect(52, genericTearOff1<core::num>(10){(core::num) → core::num});
+  self::expect(97, genericTearOff2<core::num>(10){(core::num) → core::num});
+  self::expect(23, let final self::Class #t1 = c in let final core::int #t2 = 23 in let final void #t3 = self::Extension1|set#field(#t1, #t2) in #t2);
+  self::expect(67, let final self::Class #t4 = c in let final core::int #t5 = 67 in let final void #t6 = self::Extension2|set#field(#t4, #t5) in #t5);
   self::expect(23, self::Extension1|get#field(c));
   self::expect(67, self::Extension2|get#field(c));
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual)) {
     throw "Mismatch: expected=${expected}, actual=${actual}";
   }
 }
diff --git a/pkg/front_end/testcases/extensions/explicit_extension_access.dart.weak.outline.expect b/pkg/front_end/testcases/extensions/explicit_extension_access.dart.weak.outline.expect
index a5c90f6..28875a9 100644
--- a/pkg/front_end/testcases/extensions/explicit_extension_access.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extensions/explicit_extension_access.dart.weak.outline.expect
@@ -1,24 +1,14 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Class extends core::Object {
-  field core::int* field1;
-  field core::int* field2;
-  synthetic constructor •() → self::Class*
+  field core::int field1;
+  field core::int field2;
+  synthetic constructor •() → self::Class
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension Extension1 on self::Class* {
+extension Extension1 on self::Class {
   get field = self::Extension1|get#field;
   method method = self::Extension1|method;
   tearoff method = self::Extension1|get#method;
@@ -26,7 +16,7 @@
   tearoff genericMethod = self::Extension1|get#genericMethod;
   set field = self::Extension1|set#field;
 }
-extension Extension2 on self::Class* {
+extension Extension2 on self::Class {
   get field = self::Extension2|get#field;
   method method = self::Extension2|method;
   tearoff method = self::Extension2|get#method;
@@ -34,30 +24,30 @@
   tearoff genericMethod = self::Extension2|get#genericMethod;
   set field = self::Extension2|set#field;
 }
-static method Extension1|get#field(lowered final self::Class* #this) → core::int*
+static method Extension1|get#field(lowered final self::Class #this) → core::int
   ;
-static method Extension1|set#field(lowered 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(lowered final self::Class* #this) → core::int*
+static method Extension1|method(lowered 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*>(lowered final self::Class* #this, self::Extension1|genericMethod::T* t) → 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>(lowered final self::Class #this, self::Extension1|genericMethod::T t) → core::num
   ;
-static method Extension1|get#genericMethod(lowered final self::Class* #this) → <T extends core::num*>(T*) →* core::int*
-  return <T extends core::num*>(T* t) → core::int* => self::Extension1|genericMethod<T*>(#this, t);
-static method Extension2|get#field(lowered final self::Class* #this) → core::int*
+static method Extension1|get#genericMethod(lowered final self::Class #this) → <T extends core::num>(T) → core::num
+  return <T extends core::num>(T t) → core::num => self::Extension1|genericMethod<T>(#this, t);
+static method Extension2|get#field(lowered final self::Class #this) → core::int
   ;
-static method Extension2|set#field(lowered 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(lowered final self::Class* #this) → core::int*
+static method Extension2|method(lowered 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*>(lowered final self::Class* #this, self::Extension2|genericMethod::T* t) → 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>(lowered final self::Class #this, self::Extension2|genericMethod::T t) → core::num
   ;
-static method Extension2|get#genericMethod(lowered final self::Class* #this) → <T extends core::num*>(T*) →* core::int*
-  return <T extends core::num*>(T* t) → core::int* => self::Extension2|genericMethod<T*>(#this, t);
+static method Extension2|get#genericMethod(lowered final self::Class #this) → <T extends core::num>(T) → core::num
+  return <T extends core::num>(T t) → core::num => self::Extension2|genericMethod<T>(#this, t);
 static method main() → dynamic
   ;
 static method expect(dynamic expected, dynamic actual) → dynamic
diff --git a/pkg/front_end/testcases/extensions/explicit_extension_access.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/explicit_extension_access.dart.weak.transformed.expect
index 5beead8..aac476a 100644
--- a/pkg/front_end/testcases/extensions/explicit_extension_access.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/explicit_extension_access.dart.weak.transformed.expect
@@ -1,25 +1,15 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Class extends core::Object {
-  field core::int* field1 = 42;
-  field core::int* field2 = 87;
-  synthetic constructor •() → self::Class*
+  field core::int field1 = 42;
+  field core::int field2 = 87;
+  synthetic constructor •() → self::Class
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension Extension1 on self::Class* {
+extension Extension1 on self::Class {
   get field = self::Extension1|get#field;
   method method = self::Extension1|method;
   tearoff method = self::Extension1|get#method;
@@ -27,7 +17,7 @@
   tearoff genericMethod = self::Extension1|get#genericMethod;
   set field = self::Extension1|set#field;
 }
-extension Extension2 on self::Class* {
+extension Extension2 on self::Class {
   get field = self::Extension2|get#field;
   method method = self::Extension2|method;
   tearoff method = self::Extension2|get#method;
@@ -35,59 +25,59 @@
   tearoff genericMethod = self::Extension2|get#genericMethod;
   set field = self::Extension2|set#field;
 }
-static method Extension1|get#field(lowered final self::Class* #this) → core::int*
-  return #this.{self::Class::field1}{core::int*};
-static method Extension1|set#field(lowered final self::Class* #this, core::int* value) → void {
+static method Extension1|get#field(lowered final self::Class #this) → core::int
+  return #this.{self::Class::field1}{core::int};
+static method Extension1|set#field(lowered final self::Class #this, core::int value) → void {
   #this.{self::Class::field1} = value;
 }
-static method Extension1|method(lowered final self::Class* #this) → core::int*
-  return #this.{self::Class::field1}{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*>(lowered final self::Class* #this, self::Extension1|genericMethod::T* t) → core::int*
-  return #this.{self::Class::field1}{core::int*}.{core::num::+}(t){(core::num*) →* core::num*} as{TypeError} core::int*;
-static method Extension1|get#genericMethod(lowered final self::Class* #this) → <T extends core::num*>(T*) →* core::int*
-  return <T extends core::num*>(T* t) → core::int* => self::Extension1|genericMethod<T*>(#this, t);
-static method Extension2|get#field(lowered final self::Class* #this) → core::int*
-  return #this.{self::Class::field2}{core::int*};
-static method Extension2|set#field(lowered final self::Class* #this, core::int* value) → void {
+static method Extension1|method(lowered final self::Class #this) → core::int
+  return #this.{self::Class::field1}{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>(lowered final self::Class #this, self::Extension1|genericMethod::T t) → core::num
+  return #this.{self::Class::field1}{core::int}.{core::num::+}(t){(core::num) → core::num};
+static method Extension1|get#genericMethod(lowered final self::Class #this) → <T extends core::num>(T) → core::num
+  return <T extends core::num>(T t) → core::num => self::Extension1|genericMethod<T>(#this, t);
+static method Extension2|get#field(lowered final self::Class #this) → core::int
+  return #this.{self::Class::field2}{core::int};
+static method Extension2|set#field(lowered final self::Class #this, core::int value) → void {
   #this.{self::Class::field2} = value;
 }
-static method Extension2|method(lowered final self::Class* #this) → core::int*
-  return #this.{self::Class::field2}{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*>(lowered final self::Class* #this, self::Extension2|genericMethod::T* t) → core::int*
-  return #this.{self::Class::field2}{core::int*}.{core::num::+}(t){(core::num*) →* core::num*} as{TypeError} core::int*;
-static method Extension2|get#genericMethod(lowered final self::Class* #this) → <T extends core::num*>(T*) →* core::int*
-  return <T extends core::num*>(T* t) → core::int* => self::Extension2|genericMethod<T*>(#this, t);
+static method Extension2|method(lowered final self::Class #this) → core::int
+  return #this.{self::Class::field2}{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>(lowered final self::Class #this, self::Extension2|genericMethod::T t) → core::num
+  return #this.{self::Class::field2}{core::int}.{core::num::+}(t){(core::num) → core::num};
+static method Extension2|get#genericMethod(lowered final self::Class #this) → <T extends core::num>(T) → core::num
+  return <T extends core::num>(T t) → core::num => self::Extension2|genericMethod<T>(#this, t);
 static method main() → dynamic {
-  self::Class* c = new self::Class::•();
+  self::Class c = new self::Class::•();
   self::expect(42, self::Extension1|get#field(c));
   self::expect(87, self::Extension2|get#field(c));
   self::expect(42, self::Extension1|method(c));
   self::expect(87, self::Extension2|method(c));
-  () →* core::int* tearOff1 = self::Extension1|get#method(c);
-  () →* core::int* tearOff2 = self::Extension2|get#method(c);
-  self::expect(42, tearOff1(){() →* core::int*});
-  self::expect(87, tearOff2(){() →* core::int*});
-  self::expect(52, self::Extension1|genericMethod<core::int*>(c, 10));
-  self::expect(97, self::Extension2|genericMethod<core::int*>(c, 10));
-  self::expect(52, self::Extension1|genericMethod<core::num*>(c, 10));
-  self::expect(97, self::Extension2|genericMethod<core::num*>(c, 10));
-  <T extends core::num*>(T*) →* core::int* genericTearOff1 = self::Extension1|get#genericMethod(c);
-  <T extends core::num*>(T*) →* core::int* genericTearOff2 = self::Extension2|get#genericMethod(c);
-  self::expect(52, genericTearOff1<core::int*>(10){(core::int*) →* core::int*});
-  self::expect(97, genericTearOff2<core::int*>(10){(core::int*) →* core::int*});
-  self::expect(52, genericTearOff1<core::num*>(10){(core::num*) →* core::int*});
-  self::expect(97, genericTearOff2<core::num*>(10){(core::num*) →* core::int*});
-  self::expect(23, let final self::Class* #t1 = c in let final core::int* #t2 = 23 in let final void #t3 = self::Extension1|set#field(#t1, #t2) in #t2);
-  self::expect(67, let final self::Class* #t4 = c in let final core::int* #t5 = 67 in let final void #t6 = self::Extension2|set#field(#t4, #t5) in #t5);
+  () → core::int tearOff1 = self::Extension1|get#method(c);
+  () → core::int tearOff2 = self::Extension2|get#method(c);
+  self::expect(42, tearOff1(){() → core::int});
+  self::expect(87, tearOff2(){() → core::int});
+  self::expect(52, self::Extension1|genericMethod<core::int>(c, 10));
+  self::expect(97, self::Extension2|genericMethod<core::int>(c, 10));
+  self::expect(52, self::Extension1|genericMethod<core::num>(c, 10));
+  self::expect(97, self::Extension2|genericMethod<core::num>(c, 10));
+  <T extends core::num>(T) → core::num genericTearOff1 = self::Extension1|get#genericMethod(c);
+  <T extends core::num>(T) → core::num genericTearOff2 = self::Extension2|get#genericMethod(c);
+  self::expect(52, genericTearOff1<core::int>(10){(core::int) → core::num});
+  self::expect(97, genericTearOff2<core::int>(10){(core::int) → core::num});
+  self::expect(52, genericTearOff1<core::num>(10){(core::num) → core::num});
+  self::expect(97, genericTearOff2<core::num>(10){(core::num) → core::num});
+  self::expect(23, let final self::Class #t1 = c in let final core::int #t2 = 23 in let final void #t3 = self::Extension1|set#field(#t1, #t2) in #t2);
+  self::expect(67, let final self::Class #t4 = c in let final core::int #t5 = 67 in let final void #t6 = self::Extension2|set#field(#t4, #t5) in #t5);
   self::expect(23, self::Extension1|get#field(c));
   self::expect(67, self::Extension2|get#field(c));
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual)) {
     throw "Mismatch: expected=${expected}, actual=${actual}";
   }
 }
@@ -98,4 +88,4 @@
 Evaluated: VariableGet @ org-dartlang-testcase:///explicit_extension_access.dart:48:36 -> IntConstant(23)
 Evaluated: VariableGet @ org-dartlang-testcase:///explicit_extension_access.dart:49:36 -> IntConstant(67)
 Evaluated: VariableGet @ org-dartlang-testcase:///explicit_extension_access.dart:49:36 -> IntConstant(67)
-Extra constant evaluation: evaluated: 121, effectively constant: 4
+Extra constant evaluation: evaluated: 119, effectively constant: 4
diff --git a/pkg/front_end/testcases/extensions/explicit_extension_inference.dart b/pkg/front_end/testcases/extensions/explicit_extension_inference.dart
index a8ea3d7..55b65e2 100644
--- a/pkg/front_end/testcases/extensions/explicit_extension_inference.dart
+++ b/pkg/front_end/testcases/extensions/explicit_extension_inference.dart
@@ -1,7 +1,9 @@
 // Copyright (c) 2019, 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.
+
 // @dart=2.9
+
 class A {}
 class B extends A {}
 class C extends B {}
diff --git a/pkg/front_end/testcases/extensions/explicit_extension_inference2.dart b/pkg/front_end/testcases/extensions/explicit_extension_inference2.dart
new file mode 100644
index 0000000..cf078bd
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/explicit_extension_inference2.dart
@@ -0,0 +1,92 @@
+// Copyright (c) 2019, 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.
+
+class A {}
+
+class B extends A {}
+
+class C extends B {}
+
+class GenericClass<T> {}
+
+extension GenericExtension<T> on GenericClass<T>? {
+  T? get property => null;
+
+  T? method(T? t) => null;
+
+  S? genericMethod1<S>(S? s) => null;
+}
+
+main() {
+  A? aVariable;
+  B? bVariable;
+  C? cVariable;
+
+  GenericClass<A> aClass = new GenericClass<A>();
+  GenericClass<B> bClass = new GenericClass<B>();
+  GenericClass<C> cClass = new GenericClass<C>();
+
+  aVariable = GenericExtension(aClass).property;
+  aVariable = GenericExtension<A>(aClass).property;
+
+  bVariable = GenericExtension(bClass).property;
+  aVariable = GenericExtension<A>(bClass).property;
+  bVariable = GenericExtension<B>(bClass).property;
+
+  cVariable = GenericExtension(cClass).property;
+  aVariable = GenericExtension<A>(cClass).property;
+  bVariable = GenericExtension<B>(cClass).property;
+  cVariable = GenericExtension<C>(cClass).property;
+
+  aVariable = GenericExtension(aClass).method(aVariable);
+  aVariable = GenericExtension<A>(aClass).method(aVariable);
+
+  bVariable = GenericExtension(bClass).method(bVariable);
+  aVariable = GenericExtension<A>(bClass).method(aVariable);
+  bVariable = GenericExtension<B>(bClass).method(bVariable);
+
+  cVariable = GenericExtension(cClass).method(cVariable);
+  aVariable = GenericExtension<A>(cClass).method(aVariable);
+  bVariable = GenericExtension<B>(cClass).method(bVariable);
+  cVariable = GenericExtension<C>(cClass).method(cVariable);
+
+  cVariable = GenericExtension(aClass).genericMethod1(cVariable);
+  aVariable = GenericExtension(aClass).genericMethod1<A>(cVariable);
+  bVariable = GenericExtension(aClass).genericMethod1<B>(cVariable);
+  cVariable = GenericExtension(aClass).genericMethod1<C>(cVariable);
+  cVariable = GenericExtension<A>(aClass).genericMethod1(cVariable);
+  aVariable = GenericExtension<A>(aClass).genericMethod1<A>(cVariable);
+  bVariable = GenericExtension<A>(aClass).genericMethod1<B>(cVariable);
+  cVariable = GenericExtension<A>(aClass).genericMethod1<C>(cVariable);
+
+  cVariable = GenericExtension(bClass).genericMethod1(cVariable);
+  aVariable = GenericExtension(bClass).genericMethod1<A>(cVariable);
+  bVariable = GenericExtension(bClass).genericMethod1<B>(cVariable);
+  cVariable = GenericExtension(bClass).genericMethod1<C>(cVariable);
+  cVariable = GenericExtension<A>(bClass).genericMethod1(cVariable);
+  aVariable = GenericExtension<A>(bClass).genericMethod1<A>(cVariable);
+  bVariable = GenericExtension<A>(bClass).genericMethod1<B>(cVariable);
+  cVariable = GenericExtension<A>(bClass).genericMethod1<C>(cVariable);
+  cVariable = GenericExtension<B>(bClass).genericMethod1(cVariable);
+  aVariable = GenericExtension<B>(bClass).genericMethod1<A>(cVariable);
+  bVariable = GenericExtension<B>(bClass).genericMethod1<B>(cVariable);
+  cVariable = GenericExtension<B>(bClass).genericMethod1<C>(cVariable);
+
+  cVariable = GenericExtension(cClass).genericMethod1(cVariable);
+  aVariable = GenericExtension(cClass).genericMethod1<A>(cVariable);
+  bVariable = GenericExtension(cClass).genericMethod1<B>(cVariable);
+  cVariable = GenericExtension(cClass).genericMethod1<C>(cVariable);
+  cVariable = GenericExtension<A>(cClass).genericMethod1(cVariable);
+  aVariable = GenericExtension<A>(cClass).genericMethod1<A>(cVariable);
+  bVariable = GenericExtension<A>(cClass).genericMethod1<B>(cVariable);
+  cVariable = GenericExtension<A>(cClass).genericMethod1<C>(cVariable);
+  cVariable = GenericExtension<B>(cClass).genericMethod1(cVariable);
+  aVariable = GenericExtension<B>(cClass).genericMethod1<A>(cVariable);
+  bVariable = GenericExtension<B>(cClass).genericMethod1<B>(cVariable);
+  cVariable = GenericExtension<B>(cClass).genericMethod1<C>(cVariable);
+  cVariable = GenericExtension<C>(cClass).genericMethod1(cVariable);
+  aVariable = GenericExtension<C>(cClass).genericMethod1<A>(cVariable);
+  bVariable = GenericExtension<C>(cClass).genericMethod1<B>(cVariable);
+  cVariable = GenericExtension<C>(cClass).genericMethod1<C>(cVariable);
+}
diff --git a/pkg/front_end/testcases/extensions/explicit_extension_inference2.dart.textual_outline.expect b/pkg/front_end/testcases/extensions/explicit_extension_inference2.dart.textual_outline.expect
new file mode 100644
index 0000000..3b9c293
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/explicit_extension_inference2.dart.textual_outline.expect
@@ -0,0 +1,15 @@
+class A {}
+
+class B extends A {}
+
+class C extends B {}
+
+class GenericClass<T> {}
+
+extension GenericExtension<T> on GenericClass<T>? {
+  T? get property => null;
+  T? method(T? t) => null;
+  S? genericMethod1<S>(S? s) => null;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/extensions/explicit_extension_inference2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/extensions/explicit_extension_inference2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..0afc203
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/explicit_extension_inference2.dart.textual_outline_modelled.expect
@@ -0,0 +1,15 @@
+class A {}
+
+class B extends A {}
+
+class C extends B {}
+
+class GenericClass<T> {}
+
+extension GenericExtension<T> on GenericClass<T>? {
+  S? genericMethod1<S>(S? s) => null;
+  T? get property => null;
+  T? method(T? t) => null;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/extensions/explicit_extension_inference2.dart.weak.expect b/pkg/front_end/testcases/extensions/explicit_extension_inference2.dart.weak.expect
new file mode 100644
index 0000000..88c6eb7
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/explicit_extension_inference2.dart.weak.expect
@@ -0,0 +1,103 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    : super self::A::•()
+    ;
+}
+class C extends self::B {
+  synthetic constructor •() → self::C
+    : super self::B::•()
+    ;
+}
+class GenericClass<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::GenericClass<self::GenericClass::T%>
+    : super core::Object::•()
+    ;
+}
+extension GenericExtension<T extends core::Object? = dynamic> on self::GenericClass<T%>? {
+  get property = self::GenericExtension|get#property;
+  method method = self::GenericExtension|method;
+  tearoff method = self::GenericExtension|get#method;
+  method genericMethod1 = self::GenericExtension|genericMethod1;
+  tearoff genericMethod1 = self::GenericExtension|get#genericMethod1;
+}
+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>(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>(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>(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>(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;
+  self::B? bVariable;
+  self::C? cVariable;
+  self::GenericClass<self::A> aClass = new self::GenericClass::•<self::A>();
+  self::GenericClass<self::B> bClass = new self::GenericClass::•<self::B>();
+  self::GenericClass<self::C> cClass = new self::GenericClass::•<self::C>();
+  aVariable = self::GenericExtension|get#property<self::A>(aClass);
+  aVariable = self::GenericExtension|get#property<self::A>(aClass);
+  bVariable = self::GenericExtension|get#property<self::B>(bClass);
+  aVariable = self::GenericExtension|get#property<self::A>(bClass);
+  bVariable = self::GenericExtension|get#property<self::B>(bClass);
+  cVariable = self::GenericExtension|get#property<self::C>(cClass);
+  aVariable = self::GenericExtension|get#property<self::A>(cClass);
+  bVariable = self::GenericExtension|get#property<self::B>(cClass);
+  cVariable = self::GenericExtension|get#property<self::C>(cClass);
+  aVariable = self::GenericExtension|method<self::A>(aClass, aVariable);
+  aVariable = self::GenericExtension|method<self::A>(aClass, aVariable);
+  bVariable = self::GenericExtension|method<self::B>(bClass, bVariable);
+  aVariable = self::GenericExtension|method<self::A>(bClass, aVariable);
+  bVariable = self::GenericExtension|method<self::B>(bClass, bVariable);
+  cVariable = self::GenericExtension|method<self::C>(cClass, cVariable);
+  aVariable = self::GenericExtension|method<self::A>(cClass, aVariable);
+  bVariable = self::GenericExtension|method<self::B>(cClass, bVariable);
+  cVariable = self::GenericExtension|method<self::C>(cClass, cVariable);
+  cVariable = self::GenericExtension|genericMethod1<self::A, self::C>(aClass, cVariable);
+  aVariable = self::GenericExtension|genericMethod1<self::A, self::A>(aClass, cVariable);
+  bVariable = self::GenericExtension|genericMethod1<self::A, self::B>(aClass, cVariable);
+  cVariable = self::GenericExtension|genericMethod1<self::A, self::C>(aClass, cVariable);
+  cVariable = self::GenericExtension|genericMethod1<self::A, self::C>(aClass, cVariable);
+  aVariable = self::GenericExtension|genericMethod1<self::A, self::A>(aClass, cVariable);
+  bVariable = self::GenericExtension|genericMethod1<self::A, self::B>(aClass, cVariable);
+  cVariable = self::GenericExtension|genericMethod1<self::A, self::C>(aClass, cVariable);
+  cVariable = self::GenericExtension|genericMethod1<self::B, self::C>(bClass, cVariable);
+  aVariable = self::GenericExtension|genericMethod1<self::B, self::A>(bClass, cVariable);
+  bVariable = self::GenericExtension|genericMethod1<self::B, self::B>(bClass, cVariable);
+  cVariable = self::GenericExtension|genericMethod1<self::B, self::C>(bClass, cVariable);
+  cVariable = self::GenericExtension|genericMethod1<self::A, self::C>(bClass, cVariable);
+  aVariable = self::GenericExtension|genericMethod1<self::A, self::A>(bClass, cVariable);
+  bVariable = self::GenericExtension|genericMethod1<self::A, self::B>(bClass, cVariable);
+  cVariable = self::GenericExtension|genericMethod1<self::A, self::C>(bClass, cVariable);
+  cVariable = self::GenericExtension|genericMethod1<self::B, self::C>(bClass, cVariable);
+  aVariable = self::GenericExtension|genericMethod1<self::B, self::A>(bClass, cVariable);
+  bVariable = self::GenericExtension|genericMethod1<self::B, self::B>(bClass, cVariable);
+  cVariable = self::GenericExtension|genericMethod1<self::B, self::C>(bClass, cVariable);
+  cVariable = self::GenericExtension|genericMethod1<self::C, self::C>(cClass, cVariable);
+  aVariable = self::GenericExtension|genericMethod1<self::C, self::A>(cClass, cVariable);
+  bVariable = self::GenericExtension|genericMethod1<self::C, self::B>(cClass, cVariable);
+  cVariable = self::GenericExtension|genericMethod1<self::C, self::C>(cClass, cVariable);
+  cVariable = self::GenericExtension|genericMethod1<self::A, self::C>(cClass, cVariable);
+  aVariable = self::GenericExtension|genericMethod1<self::A, self::A>(cClass, cVariable);
+  bVariable = self::GenericExtension|genericMethod1<self::A, self::B>(cClass, cVariable);
+  cVariable = self::GenericExtension|genericMethod1<self::A, self::C>(cClass, cVariable);
+  cVariable = self::GenericExtension|genericMethod1<self::B, self::C>(cClass, cVariable);
+  aVariable = self::GenericExtension|genericMethod1<self::B, self::A>(cClass, cVariable);
+  bVariable = self::GenericExtension|genericMethod1<self::B, self::B>(cClass, cVariable);
+  cVariable = self::GenericExtension|genericMethod1<self::B, self::C>(cClass, cVariable);
+  cVariable = self::GenericExtension|genericMethod1<self::C, self::C>(cClass, cVariable);
+  aVariable = self::GenericExtension|genericMethod1<self::C, self::A>(cClass, cVariable);
+  bVariable = self::GenericExtension|genericMethod1<self::C, self::B>(cClass, cVariable);
+  cVariable = self::GenericExtension|genericMethod1<self::C, self::C>(cClass, cVariable);
+}
diff --git a/pkg/front_end/testcases/extensions/explicit_extension_inference2.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/explicit_extension_inference2.dart.weak.modular.expect
new file mode 100644
index 0000000..88c6eb7
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/explicit_extension_inference2.dart.weak.modular.expect
@@ -0,0 +1,103 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    : super self::A::•()
+    ;
+}
+class C extends self::B {
+  synthetic constructor •() → self::C
+    : super self::B::•()
+    ;
+}
+class GenericClass<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::GenericClass<self::GenericClass::T%>
+    : super core::Object::•()
+    ;
+}
+extension GenericExtension<T extends core::Object? = dynamic> on self::GenericClass<T%>? {
+  get property = self::GenericExtension|get#property;
+  method method = self::GenericExtension|method;
+  tearoff method = self::GenericExtension|get#method;
+  method genericMethod1 = self::GenericExtension|genericMethod1;
+  tearoff genericMethod1 = self::GenericExtension|get#genericMethod1;
+}
+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>(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>(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>(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>(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;
+  self::B? bVariable;
+  self::C? cVariable;
+  self::GenericClass<self::A> aClass = new self::GenericClass::•<self::A>();
+  self::GenericClass<self::B> bClass = new self::GenericClass::•<self::B>();
+  self::GenericClass<self::C> cClass = new self::GenericClass::•<self::C>();
+  aVariable = self::GenericExtension|get#property<self::A>(aClass);
+  aVariable = self::GenericExtension|get#property<self::A>(aClass);
+  bVariable = self::GenericExtension|get#property<self::B>(bClass);
+  aVariable = self::GenericExtension|get#property<self::A>(bClass);
+  bVariable = self::GenericExtension|get#property<self::B>(bClass);
+  cVariable = self::GenericExtension|get#property<self::C>(cClass);
+  aVariable = self::GenericExtension|get#property<self::A>(cClass);
+  bVariable = self::GenericExtension|get#property<self::B>(cClass);
+  cVariable = self::GenericExtension|get#property<self::C>(cClass);
+  aVariable = self::GenericExtension|method<self::A>(aClass, aVariable);
+  aVariable = self::GenericExtension|method<self::A>(aClass, aVariable);
+  bVariable = self::GenericExtension|method<self::B>(bClass, bVariable);
+  aVariable = self::GenericExtension|method<self::A>(bClass, aVariable);
+  bVariable = self::GenericExtension|method<self::B>(bClass, bVariable);
+  cVariable = self::GenericExtension|method<self::C>(cClass, cVariable);
+  aVariable = self::GenericExtension|method<self::A>(cClass, aVariable);
+  bVariable = self::GenericExtension|method<self::B>(cClass, bVariable);
+  cVariable = self::GenericExtension|method<self::C>(cClass, cVariable);
+  cVariable = self::GenericExtension|genericMethod1<self::A, self::C>(aClass, cVariable);
+  aVariable = self::GenericExtension|genericMethod1<self::A, self::A>(aClass, cVariable);
+  bVariable = self::GenericExtension|genericMethod1<self::A, self::B>(aClass, cVariable);
+  cVariable = self::GenericExtension|genericMethod1<self::A, self::C>(aClass, cVariable);
+  cVariable = self::GenericExtension|genericMethod1<self::A, self::C>(aClass, cVariable);
+  aVariable = self::GenericExtension|genericMethod1<self::A, self::A>(aClass, cVariable);
+  bVariable = self::GenericExtension|genericMethod1<self::A, self::B>(aClass, cVariable);
+  cVariable = self::GenericExtension|genericMethod1<self::A, self::C>(aClass, cVariable);
+  cVariable = self::GenericExtension|genericMethod1<self::B, self::C>(bClass, cVariable);
+  aVariable = self::GenericExtension|genericMethod1<self::B, self::A>(bClass, cVariable);
+  bVariable = self::GenericExtension|genericMethod1<self::B, self::B>(bClass, cVariable);
+  cVariable = self::GenericExtension|genericMethod1<self::B, self::C>(bClass, cVariable);
+  cVariable = self::GenericExtension|genericMethod1<self::A, self::C>(bClass, cVariable);
+  aVariable = self::GenericExtension|genericMethod1<self::A, self::A>(bClass, cVariable);
+  bVariable = self::GenericExtension|genericMethod1<self::A, self::B>(bClass, cVariable);
+  cVariable = self::GenericExtension|genericMethod1<self::A, self::C>(bClass, cVariable);
+  cVariable = self::GenericExtension|genericMethod1<self::B, self::C>(bClass, cVariable);
+  aVariable = self::GenericExtension|genericMethod1<self::B, self::A>(bClass, cVariable);
+  bVariable = self::GenericExtension|genericMethod1<self::B, self::B>(bClass, cVariable);
+  cVariable = self::GenericExtension|genericMethod1<self::B, self::C>(bClass, cVariable);
+  cVariable = self::GenericExtension|genericMethod1<self::C, self::C>(cClass, cVariable);
+  aVariable = self::GenericExtension|genericMethod1<self::C, self::A>(cClass, cVariable);
+  bVariable = self::GenericExtension|genericMethod1<self::C, self::B>(cClass, cVariable);
+  cVariable = self::GenericExtension|genericMethod1<self::C, self::C>(cClass, cVariable);
+  cVariable = self::GenericExtension|genericMethod1<self::A, self::C>(cClass, cVariable);
+  aVariable = self::GenericExtension|genericMethod1<self::A, self::A>(cClass, cVariable);
+  bVariable = self::GenericExtension|genericMethod1<self::A, self::B>(cClass, cVariable);
+  cVariable = self::GenericExtension|genericMethod1<self::A, self::C>(cClass, cVariable);
+  cVariable = self::GenericExtension|genericMethod1<self::B, self::C>(cClass, cVariable);
+  aVariable = self::GenericExtension|genericMethod1<self::B, self::A>(cClass, cVariable);
+  bVariable = self::GenericExtension|genericMethod1<self::B, self::B>(cClass, cVariable);
+  cVariable = self::GenericExtension|genericMethod1<self::B, self::C>(cClass, cVariable);
+  cVariable = self::GenericExtension|genericMethod1<self::C, self::C>(cClass, cVariable);
+  aVariable = self::GenericExtension|genericMethod1<self::C, self::A>(cClass, cVariable);
+  bVariable = self::GenericExtension|genericMethod1<self::C, self::B>(cClass, cVariable);
+  cVariable = self::GenericExtension|genericMethod1<self::C, self::C>(cClass, cVariable);
+}
diff --git a/pkg/front_end/testcases/extensions/explicit_extension_inference2.dart.weak.outline.expect b/pkg/front_end/testcases/extensions/explicit_extension_inference2.dart.weak.outline.expect
new file mode 100644
index 0000000..056d4a3
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/explicit_extension_inference2.dart.weak.outline.expect
@@ -0,0 +1,39 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    ;
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    ;
+}
+class C extends self::B {
+  synthetic constructor •() → self::C
+    ;
+}
+class GenericClass<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::GenericClass<self::GenericClass::T%>
+    ;
+}
+extension GenericExtension<T extends core::Object? = dynamic> on self::GenericClass<T%>? {
+  get property = self::GenericExtension|get#property;
+  method method = self::GenericExtension|method;
+  tearoff method = self::GenericExtension|get#method;
+  method genericMethod1 = self::GenericExtension|genericMethod1;
+  tearoff genericMethod1 = self::GenericExtension|get#genericMethod1;
+}
+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>(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>(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>(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>(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_inference2.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/explicit_extension_inference2.dart.weak.transformed.expect
new file mode 100644
index 0000000..88c6eb7
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/explicit_extension_inference2.dart.weak.transformed.expect
@@ -0,0 +1,103 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    : super self::A::•()
+    ;
+}
+class C extends self::B {
+  synthetic constructor •() → self::C
+    : super self::B::•()
+    ;
+}
+class GenericClass<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::GenericClass<self::GenericClass::T%>
+    : super core::Object::•()
+    ;
+}
+extension GenericExtension<T extends core::Object? = dynamic> on self::GenericClass<T%>? {
+  get property = self::GenericExtension|get#property;
+  method method = self::GenericExtension|method;
+  tearoff method = self::GenericExtension|get#method;
+  method genericMethod1 = self::GenericExtension|genericMethod1;
+  tearoff genericMethod1 = self::GenericExtension|get#genericMethod1;
+}
+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>(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>(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>(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>(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;
+  self::B? bVariable;
+  self::C? cVariable;
+  self::GenericClass<self::A> aClass = new self::GenericClass::•<self::A>();
+  self::GenericClass<self::B> bClass = new self::GenericClass::•<self::B>();
+  self::GenericClass<self::C> cClass = new self::GenericClass::•<self::C>();
+  aVariable = self::GenericExtension|get#property<self::A>(aClass);
+  aVariable = self::GenericExtension|get#property<self::A>(aClass);
+  bVariable = self::GenericExtension|get#property<self::B>(bClass);
+  aVariable = self::GenericExtension|get#property<self::A>(bClass);
+  bVariable = self::GenericExtension|get#property<self::B>(bClass);
+  cVariable = self::GenericExtension|get#property<self::C>(cClass);
+  aVariable = self::GenericExtension|get#property<self::A>(cClass);
+  bVariable = self::GenericExtension|get#property<self::B>(cClass);
+  cVariable = self::GenericExtension|get#property<self::C>(cClass);
+  aVariable = self::GenericExtension|method<self::A>(aClass, aVariable);
+  aVariable = self::GenericExtension|method<self::A>(aClass, aVariable);
+  bVariable = self::GenericExtension|method<self::B>(bClass, bVariable);
+  aVariable = self::GenericExtension|method<self::A>(bClass, aVariable);
+  bVariable = self::GenericExtension|method<self::B>(bClass, bVariable);
+  cVariable = self::GenericExtension|method<self::C>(cClass, cVariable);
+  aVariable = self::GenericExtension|method<self::A>(cClass, aVariable);
+  bVariable = self::GenericExtension|method<self::B>(cClass, bVariable);
+  cVariable = self::GenericExtension|method<self::C>(cClass, cVariable);
+  cVariable = self::GenericExtension|genericMethod1<self::A, self::C>(aClass, cVariable);
+  aVariable = self::GenericExtension|genericMethod1<self::A, self::A>(aClass, cVariable);
+  bVariable = self::GenericExtension|genericMethod1<self::A, self::B>(aClass, cVariable);
+  cVariable = self::GenericExtension|genericMethod1<self::A, self::C>(aClass, cVariable);
+  cVariable = self::GenericExtension|genericMethod1<self::A, self::C>(aClass, cVariable);
+  aVariable = self::GenericExtension|genericMethod1<self::A, self::A>(aClass, cVariable);
+  bVariable = self::GenericExtension|genericMethod1<self::A, self::B>(aClass, cVariable);
+  cVariable = self::GenericExtension|genericMethod1<self::A, self::C>(aClass, cVariable);
+  cVariable = self::GenericExtension|genericMethod1<self::B, self::C>(bClass, cVariable);
+  aVariable = self::GenericExtension|genericMethod1<self::B, self::A>(bClass, cVariable);
+  bVariable = self::GenericExtension|genericMethod1<self::B, self::B>(bClass, cVariable);
+  cVariable = self::GenericExtension|genericMethod1<self::B, self::C>(bClass, cVariable);
+  cVariable = self::GenericExtension|genericMethod1<self::A, self::C>(bClass, cVariable);
+  aVariable = self::GenericExtension|genericMethod1<self::A, self::A>(bClass, cVariable);
+  bVariable = self::GenericExtension|genericMethod1<self::A, self::B>(bClass, cVariable);
+  cVariable = self::GenericExtension|genericMethod1<self::A, self::C>(bClass, cVariable);
+  cVariable = self::GenericExtension|genericMethod1<self::B, self::C>(bClass, cVariable);
+  aVariable = self::GenericExtension|genericMethod1<self::B, self::A>(bClass, cVariable);
+  bVariable = self::GenericExtension|genericMethod1<self::B, self::B>(bClass, cVariable);
+  cVariable = self::GenericExtension|genericMethod1<self::B, self::C>(bClass, cVariable);
+  cVariable = self::GenericExtension|genericMethod1<self::C, self::C>(cClass, cVariable);
+  aVariable = self::GenericExtension|genericMethod1<self::C, self::A>(cClass, cVariable);
+  bVariable = self::GenericExtension|genericMethod1<self::C, self::B>(cClass, cVariable);
+  cVariable = self::GenericExtension|genericMethod1<self::C, self::C>(cClass, cVariable);
+  cVariable = self::GenericExtension|genericMethod1<self::A, self::C>(cClass, cVariable);
+  aVariable = self::GenericExtension|genericMethod1<self::A, self::A>(cClass, cVariable);
+  bVariable = self::GenericExtension|genericMethod1<self::A, self::B>(cClass, cVariable);
+  cVariable = self::GenericExtension|genericMethod1<self::A, self::C>(cClass, cVariable);
+  cVariable = self::GenericExtension|genericMethod1<self::B, self::C>(cClass, cVariable);
+  aVariable = self::GenericExtension|genericMethod1<self::B, self::A>(cClass, cVariable);
+  bVariable = self::GenericExtension|genericMethod1<self::B, self::B>(cClass, cVariable);
+  cVariable = self::GenericExtension|genericMethod1<self::B, self::C>(cClass, cVariable);
+  cVariable = self::GenericExtension|genericMethod1<self::C, self::C>(cClass, cVariable);
+  aVariable = self::GenericExtension|genericMethod1<self::C, self::A>(cClass, cVariable);
+  bVariable = self::GenericExtension|genericMethod1<self::C, self::B>(cClass, cVariable);
+  cVariable = self::GenericExtension|genericMethod1<self::C, self::C>(cClass, cVariable);
+}
diff --git a/pkg/front_end/testcases/extensions/explicit_generic_extension_access.dart b/pkg/front_end/testcases/extensions/explicit_generic_extension_access.dart
index 7cde52c..3cc9224 100644
--- a/pkg/front_end/testcases/extensions/explicit_generic_extension_access.dart
+++ b/pkg/front_end/testcases/extensions/explicit_generic_extension_access.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2019, 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.
-// @dart=2.9
+
 class Class<T extends num> {
   T field1;
   T field2;
@@ -10,7 +10,7 @@
 }
 
 extension Extension1<T extends num> on Class<T> {
-  static String latestType;
+  static String? latestType;
   T get field {
     latestType = '$T';
     return field1;
@@ -25,7 +25,7 @@
   }
   T genericMethod<S extends num>(S t) {
     latestType = '$T:$S';
-    return field1 + t;
+    return (field1 + t) as T;
   }
 }
 
@@ -35,7 +35,7 @@
     field2 = value;
   }
   T method() => field2;
-  T genericMethod<S extends num>(S t) => field2 + t;
+  T genericMethod<S extends num>(S t) => (field2 + t) as T;
 }
 
 main() {
diff --git a/pkg/front_end/testcases/extensions/explicit_generic_extension_access.dart.textual_outline.expect b/pkg/front_end/testcases/extensions/explicit_generic_extension_access.dart.textual_outline.expect
index 90dcfe1..f7cbe30 100644
--- a/pkg/front_end/testcases/extensions/explicit_generic_extension_access.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/extensions/explicit_generic_extension_access.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Class<T extends num> {
   T field1;
   T field2;
@@ -6,7 +5,7 @@
 }
 
 extension Extension1<T extends num> on Class<T> {
-  static String latestType;
+  static String? latestType;
   T get field {}
   void set field(T value) {}
   T method() {}
@@ -17,7 +16,7 @@
   T get field => field2;
   void set field(T value) {}
   T method() => field2;
-  T genericMethod<S extends num>(S t) => field2 + t;
+  T genericMethod<S extends num>(S t) => (field2 + t) as T;
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/extensions/explicit_generic_extension_access.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/extensions/explicit_generic_extension_access.dart.textual_outline_modelled.expect
index 11d1037..69276f1 100644
--- a/pkg/front_end/testcases/extensions/explicit_generic_extension_access.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/extensions/explicit_generic_extension_access.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Class<T extends num> {
   Class(this.field1, this.field2);
   T field1;
@@ -11,12 +10,12 @@
   T genericMethod<S extends num>(S t) {}
   T get field {}
   T method() {}
-  static String latestType;
+  static String? latestType;
   void set field(T value) {}
 }
 
 extension Extension2<T extends num> on Class<T> {
-  T genericMethod<S extends num>(S t) => field2 + t;
+  T genericMethod<S extends num>(S t) => (field2 + t) as T;
   T get field => field2;
   T method() => field2;
   void set field(T value) {}
diff --git a/pkg/front_end/testcases/extensions/explicit_generic_extension_access.dart.weak.expect b/pkg/front_end/testcases/extensions/explicit_generic_extension_access.dart.weak.expect
index ad69a00..44f1f384 100644
--- a/pkg/front_end/testcases/extensions/explicit_generic_extension_access.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/explicit_generic_extension_access.dart.weak.expect
@@ -1,25 +1,15 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class Class<T extends core::num*> extends core::Object {
-  covariant-by-class field self::Class::T* field1;
-  covariant-by-class field self::Class::T* field2;
-  constructor •(self::Class::T* field1, self::Class::T* field2) → self::Class<self::Class::T*>*
+class Class<T extends core::num> extends core::Object {
+  covariant-by-class field self::Class::T field1;
+  covariant-by-class field self::Class::T field2;
+  constructor •(self::Class::T field1, self::Class::T field2) → self::Class<self::Class::T>
     : self::Class::field1 = field1, self::Class::field2 = field2, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension Extension1<T extends core::num*> on self::Class<T*>* {
+extension Extension1<T extends core::num> on self::Class<T> {
   static field latestType = self::Extension1|latestType;
   get field = self::Extension1|get#field;
   method method = self::Extension1|method;
@@ -28,7 +18,7 @@
   tearoff genericMethod = self::Extension1|get#genericMethod;
   set field = self::Extension1|set#field;
 }
-extension Extension2<T extends core::num*> on self::Class<T*>* {
+extension Extension2<T extends core::num> on self::Class<T> {
   get field = self::Extension2|get#field;
   method method = self::Extension2|method;
   tearoff method = self::Extension2|get#method;
@@ -36,99 +26,99 @@
   tearoff genericMethod = self::Extension2|get#genericMethod;
   set field = self::Extension2|set#field;
 }
-static field core::String* Extension1|latestType;
-static method Extension1|get#field<T extends 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}{self::Extension1|get#field::T*};
+static field core::String? Extension1|latestType;
+static method Extension1|get#field<T extends 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}{self::Extension1|get#field::T};
 }
-static method Extension1|set#field<T extends 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*}";
+static method Extension1|set#field<T extends 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*>(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}{self::Extension1|method::T*};
+static method Extension1|method<T extends 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}{self::Extension1|method::T};
 }
-static method Extension1|get#method<T extends 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*, S extends 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}{self::Extension1|genericMethod::T*}.{core::num::+}(t){(core::num*) →* core::num*} as{TypeError} self::Extension1|genericMethod::T*;
+static method Extension1|get#method<T extends 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, S extends 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}{self::Extension1|genericMethod::T}.{core::num::+}(t){(core::num) → core::num} as{ForNonNullableByDefault} self::Extension1|genericMethod::T;
 }
-static method Extension1|get#genericMethod<T extends core::num*>(lowered final self::Class<self::Extension1|get#genericMethod::T*>* #this) → <S extends core::num*>(S*) →* self::Extension1|get#genericMethod::T*
-  return <S extends 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*>(lowered final self::Class<self::Extension2|get#field::T*>* #this) → self::Extension2|get#field::T*
-  return #this.{self::Class::field2}{self::Extension2|get#field::T*};
-static method Extension2|set#field<T extends core::num*>(lowered final self::Class<self::Extension2|set#field::T*>* #this, self::Extension2|set#field::T* value) → void {
+static method Extension1|get#genericMethod<T extends core::num>(lowered final self::Class<self::Extension1|get#genericMethod::T> #this) → <S extends core::num>(S) → self::Extension1|get#genericMethod::T
+  return <S extends 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>(lowered final self::Class<self::Extension2|get#field::T> #this) → self::Extension2|get#field::T
+  return #this.{self::Class::field2}{self::Extension2|get#field::T};
+static method Extension2|set#field<T extends 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*>(lowered final self::Class<self::Extension2|method::T*>* #this) → self::Extension2|method::T*
-  return #this.{self::Class::field2}{self::Extension2|method::T*};
-static method Extension2|get#method<T extends 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*, S extends 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}{self::Extension2|genericMethod::T*}.{core::num::+}(t){(core::num*) →* core::num*} as{TypeError} self::Extension2|genericMethod::T*;
-static method Extension2|get#genericMethod<T extends core::num*>(lowered final self::Class<self::Extension2|get#genericMethod::T*>* #this) → <S extends core::num*>(S*) →* self::Extension2|get#genericMethod::T*
-  return <S extends core::num*>(S* t) → self::Extension2|get#genericMethod::T* => self::Extension2|genericMethod<self::Extension2|get#genericMethod::T*, S*>(#this, t);
+static method Extension2|method<T extends core::num>(lowered final self::Class<self::Extension2|method::T> #this) → self::Extension2|method::T
+  return #this.{self::Class::field2}{self::Extension2|method::T};
+static method Extension2|get#method<T extends 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, S extends 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}{self::Extension2|genericMethod::T}.{core::num::+}(t){(core::num) → core::num} as{ForNonNullableByDefault} self::Extension2|genericMethod::T;
+static method Extension2|get#genericMethod<T extends core::num>(lowered final self::Class<self::Extension2|get#genericMethod::T> #this) → <S extends core::num>(S) → self::Extension2|get#genericMethod::T
+  return <S extends 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);
-  self::expect(42, self::Extension1|get#field<core::num*>(c));
+  self::Class<core::int> c = new self::Class::•<core::int>(42, 87);
+  self::expect(42, self::Extension1|get#field<core::num>(c));
   self::expect("num", self::Extension1|latestType);
-  self::expect(42, self::Extension1|get#field<core::int*>(c));
+  self::expect(42, self::Extension1|get#field<core::int>(c));
   self::expect("int", self::Extension1|latestType);
-  self::expect(87, self::Extension2|get#field<core::num*>(c));
-  self::expect(42, self::Extension1|method<core::num*>(c));
+  self::expect(87, self::Extension2|get#field<core::num>(c));
+  self::expect(42, self::Extension1|method<core::num>(c));
   self::expect("num", self::Extension1|latestType);
-  self::expect(42, self::Extension1|method<core::int*>(c));
+  self::expect(42, self::Extension1|method<core::int>(c));
   self::expect("int", self::Extension1|latestType);
-  self::expect(87, self::Extension2|method<core::num*>(c));
-  () →* core::num* tearOffNumber1 = self::Extension1|get#method<core::num*>(c);
-  () →* core::int* tearOffInteger1 = self::Extension1|get#method<core::int*>(c);
-  () →* core::num* tearOff2 = self::Extension2|get#method<core::num*>(c);
-  self::expect(42, tearOffNumber1(){() →* core::num*});
+  self::expect(87, self::Extension2|method<core::num>(c));
+  () → core::num tearOffNumber1 = self::Extension1|get#method<core::num>(c);
+  () → core::int tearOffInteger1 = self::Extension1|get#method<core::int>(c);
+  () → core::num tearOff2 = self::Extension2|get#method<core::num>(c);
+  self::expect(42, tearOffNumber1(){() → core::num});
   self::expect("num", self::Extension1|latestType);
-  self::expect(42, tearOffInteger1(){() →* core::int*});
+  self::expect(42, tearOffInteger1(){() → core::int});
   self::expect("int", self::Extension1|latestType);
-  self::expect(87, tearOff2(){() →* core::num*});
-  self::expect(52, self::Extension1|genericMethod<core::num*, core::int*>(c, 10));
+  self::expect(87, tearOff2(){() → core::num});
+  self::expect(52, self::Extension1|genericMethod<core::num, core::int>(c, 10));
   self::expect("num:int", self::Extension1|latestType);
-  self::expect(52, self::Extension1|genericMethod<core::int*, core::int*>(c, 10));
+  self::expect(52, self::Extension1|genericMethod<core::int, core::int>(c, 10));
   self::expect("int:int", self::Extension1|latestType);
-  self::expect(97, self::Extension2|genericMethod<core::num*, core::int*>(c, 10));
-  self::expect(52, self::Extension1|genericMethod<core::num*, core::num*>(c, 10));
+  self::expect(97, self::Extension2|genericMethod<core::num, core::int>(c, 10));
+  self::expect(52, self::Extension1|genericMethod<core::num, core::num>(c, 10));
   self::expect("num:num", self::Extension1|latestType);
-  self::expect(52, self::Extension1|genericMethod<core::int*, core::num*>(c, 10));
+  self::expect(52, self::Extension1|genericMethod<core::int, core::num>(c, 10));
   self::expect("int:num", self::Extension1|latestType);
-  self::expect(97, self::Extension2|genericMethod<core::num*, core::num*>(c, 10));
-  self::expect(52, self::Extension1|genericMethod<core::int*, core::int*>(c, 10));
+  self::expect(97, self::Extension2|genericMethod<core::num, core::num>(c, 10));
+  self::expect(52, self::Extension1|genericMethod<core::int, core::int>(c, 10));
   self::expect("int:int", self::Extension1|latestType);
-  self::expect(52, self::Extension1|genericMethod<core::int*, core::num*>(c, 10));
+  self::expect(52, self::Extension1|genericMethod<core::int, core::num>(c, 10));
   self::expect("int:num", self::Extension1|latestType);
-  self::expect(52, self::Extension1|genericMethod<core::int*, core::int*>(c, 10));
+  self::expect(52, self::Extension1|genericMethod<core::int, core::int>(c, 10));
   self::expect("int:int", self::Extension1|latestType);
-  <S extends core::num*>(S*) →* core::num* genericTearOffNumber1 = self::Extension1|get#genericMethod<core::num*>(c);
-  <S extends core::num*>(S*) →* core::int* genericTearOffInteger1 = self::Extension1|get#genericMethod<core::int*>(c);
-  <S extends core::num*>(S*) →* core::num* genericTearOff2 = self::Extension2|get#genericMethod<core::num*>(c);
-  self::expect(52, genericTearOffNumber1<core::int*>(10){(core::int*) →* core::num*});
+  <S extends core::num>(S) → core::num genericTearOffNumber1 = self::Extension1|get#genericMethod<core::num>(c);
+  <S extends core::num>(S) → core::int genericTearOffInteger1 = self::Extension1|get#genericMethod<core::int>(c);
+  <S extends core::num>(S) → core::num genericTearOff2 = self::Extension2|get#genericMethod<core::num>(c);
+  self::expect(52, genericTearOffNumber1<core::int>(10){(core::int) → core::num});
   self::expect("num:int", self::Extension1|latestType);
-  self::expect(52, genericTearOffInteger1<core::int*>(10){(core::int*) →* core::int*});
+  self::expect(52, genericTearOffInteger1<core::int>(10){(core::int) → core::int});
   self::expect("int:int", self::Extension1|latestType);
-  self::expect(97, genericTearOff2<core::int*>(10){(core::int*) →* core::num*});
-  self::expect(52, genericTearOffNumber1<core::num*>(10){(core::num*) →* core::num*});
+  self::expect(97, genericTearOff2<core::int>(10){(core::int) → core::num});
+  self::expect(52, genericTearOffNumber1<core::num>(10){(core::num) → core::num});
   self::expect("num:num", self::Extension1|latestType);
-  self::expect(52, genericTearOffInteger1<core::num*>(10){(core::num*) →* core::int*});
+  self::expect(52, genericTearOffInteger1<core::num>(10){(core::num) → core::int});
   self::expect("int:num", self::Extension1|latestType);
-  self::expect(97, genericTearOff2<core::num*>(10){(core::num*) →* core::num*});
-  self::expect(23, let final self::Class<core::int*>* #t1 = c in let final core::int* #t2 = 23 in let final void #t3 = self::Extension1|set#field<core::num*>(#t1, #t2) in #t2);
+  self::expect(97, genericTearOff2<core::num>(10){(core::num) → core::num});
+  self::expect(23, let final self::Class<core::int> #t1 = c in let final core::int #t2 = 23 in let final void #t3 = self::Extension1|set#field<core::num>(#t1, #t2) in #t2);
   self::expect("num", self::Extension1|latestType);
-  self::expect(23, let final self::Class<core::int*>* #t4 = c in let final core::int* #t5 = 23 in let final void #t6 = self::Extension1|set#field<core::int*>(#t4, #t5) in #t5);
+  self::expect(23, let final self::Class<core::int> #t4 = c in let final core::int #t5 = 23 in let final void #t6 = self::Extension1|set#field<core::int>(#t4, #t5) in #t5);
   self::expect("int", self::Extension1|latestType);
-  self::expect(67, let final self::Class<core::int*>* #t7 = c in let final core::int* #t8 = 67 in let final void #t9 = self::Extension2|set#field<core::num*>(#t7, #t8) in #t8);
-  self::expect(23, self::Extension1|get#field<core::num*>(c));
-  self::expect(67, self::Extension2|get#field<core::num*>(c));
+  self::expect(67, let final self::Class<core::int> #t7 = c in let final core::int #t8 = 67 in let final void #t9 = self::Extension2|set#field<core::num>(#t7, #t8) in #t8);
+  self::expect(23, self::Extension1|get#field<core::num>(c));
+  self::expect(67, self::Extension2|get#field<core::num>(c));
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual)) {
     throw "Mismatch: expected=${expected}, actual=${actual}";
   }
 }
diff --git a/pkg/front_end/testcases/extensions/explicit_generic_extension_access.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/explicit_generic_extension_access.dart.weak.modular.expect
index ad69a00..44f1f384 100644
--- a/pkg/front_end/testcases/extensions/explicit_generic_extension_access.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/extensions/explicit_generic_extension_access.dart.weak.modular.expect
@@ -1,25 +1,15 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class Class<T extends core::num*> extends core::Object {
-  covariant-by-class field self::Class::T* field1;
-  covariant-by-class field self::Class::T* field2;
-  constructor •(self::Class::T* field1, self::Class::T* field2) → self::Class<self::Class::T*>*
+class Class<T extends core::num> extends core::Object {
+  covariant-by-class field self::Class::T field1;
+  covariant-by-class field self::Class::T field2;
+  constructor •(self::Class::T field1, self::Class::T field2) → self::Class<self::Class::T>
     : self::Class::field1 = field1, self::Class::field2 = field2, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension Extension1<T extends core::num*> on self::Class<T*>* {
+extension Extension1<T extends core::num> on self::Class<T> {
   static field latestType = self::Extension1|latestType;
   get field = self::Extension1|get#field;
   method method = self::Extension1|method;
@@ -28,7 +18,7 @@
   tearoff genericMethod = self::Extension1|get#genericMethod;
   set field = self::Extension1|set#field;
 }
-extension Extension2<T extends core::num*> on self::Class<T*>* {
+extension Extension2<T extends core::num> on self::Class<T> {
   get field = self::Extension2|get#field;
   method method = self::Extension2|method;
   tearoff method = self::Extension2|get#method;
@@ -36,99 +26,99 @@
   tearoff genericMethod = self::Extension2|get#genericMethod;
   set field = self::Extension2|set#field;
 }
-static field core::String* Extension1|latestType;
-static method Extension1|get#field<T extends 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}{self::Extension1|get#field::T*};
+static field core::String? Extension1|latestType;
+static method Extension1|get#field<T extends 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}{self::Extension1|get#field::T};
 }
-static method Extension1|set#field<T extends 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*}";
+static method Extension1|set#field<T extends 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*>(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}{self::Extension1|method::T*};
+static method Extension1|method<T extends 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}{self::Extension1|method::T};
 }
-static method Extension1|get#method<T extends 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*, S extends 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}{self::Extension1|genericMethod::T*}.{core::num::+}(t){(core::num*) →* core::num*} as{TypeError} self::Extension1|genericMethod::T*;
+static method Extension1|get#method<T extends 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, S extends 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}{self::Extension1|genericMethod::T}.{core::num::+}(t){(core::num) → core::num} as{ForNonNullableByDefault} self::Extension1|genericMethod::T;
 }
-static method Extension1|get#genericMethod<T extends core::num*>(lowered final self::Class<self::Extension1|get#genericMethod::T*>* #this) → <S extends core::num*>(S*) →* self::Extension1|get#genericMethod::T*
-  return <S extends 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*>(lowered final self::Class<self::Extension2|get#field::T*>* #this) → self::Extension2|get#field::T*
-  return #this.{self::Class::field2}{self::Extension2|get#field::T*};
-static method Extension2|set#field<T extends core::num*>(lowered final self::Class<self::Extension2|set#field::T*>* #this, self::Extension2|set#field::T* value) → void {
+static method Extension1|get#genericMethod<T extends core::num>(lowered final self::Class<self::Extension1|get#genericMethod::T> #this) → <S extends core::num>(S) → self::Extension1|get#genericMethod::T
+  return <S extends 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>(lowered final self::Class<self::Extension2|get#field::T> #this) → self::Extension2|get#field::T
+  return #this.{self::Class::field2}{self::Extension2|get#field::T};
+static method Extension2|set#field<T extends 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*>(lowered final self::Class<self::Extension2|method::T*>* #this) → self::Extension2|method::T*
-  return #this.{self::Class::field2}{self::Extension2|method::T*};
-static method Extension2|get#method<T extends 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*, S extends 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}{self::Extension2|genericMethod::T*}.{core::num::+}(t){(core::num*) →* core::num*} as{TypeError} self::Extension2|genericMethod::T*;
-static method Extension2|get#genericMethod<T extends core::num*>(lowered final self::Class<self::Extension2|get#genericMethod::T*>* #this) → <S extends core::num*>(S*) →* self::Extension2|get#genericMethod::T*
-  return <S extends core::num*>(S* t) → self::Extension2|get#genericMethod::T* => self::Extension2|genericMethod<self::Extension2|get#genericMethod::T*, S*>(#this, t);
+static method Extension2|method<T extends core::num>(lowered final self::Class<self::Extension2|method::T> #this) → self::Extension2|method::T
+  return #this.{self::Class::field2}{self::Extension2|method::T};
+static method Extension2|get#method<T extends 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, S extends 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}{self::Extension2|genericMethod::T}.{core::num::+}(t){(core::num) → core::num} as{ForNonNullableByDefault} self::Extension2|genericMethod::T;
+static method Extension2|get#genericMethod<T extends core::num>(lowered final self::Class<self::Extension2|get#genericMethod::T> #this) → <S extends core::num>(S) → self::Extension2|get#genericMethod::T
+  return <S extends 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);
-  self::expect(42, self::Extension1|get#field<core::num*>(c));
+  self::Class<core::int> c = new self::Class::•<core::int>(42, 87);
+  self::expect(42, self::Extension1|get#field<core::num>(c));
   self::expect("num", self::Extension1|latestType);
-  self::expect(42, self::Extension1|get#field<core::int*>(c));
+  self::expect(42, self::Extension1|get#field<core::int>(c));
   self::expect("int", self::Extension1|latestType);
-  self::expect(87, self::Extension2|get#field<core::num*>(c));
-  self::expect(42, self::Extension1|method<core::num*>(c));
+  self::expect(87, self::Extension2|get#field<core::num>(c));
+  self::expect(42, self::Extension1|method<core::num>(c));
   self::expect("num", self::Extension1|latestType);
-  self::expect(42, self::Extension1|method<core::int*>(c));
+  self::expect(42, self::Extension1|method<core::int>(c));
   self::expect("int", self::Extension1|latestType);
-  self::expect(87, self::Extension2|method<core::num*>(c));
-  () →* core::num* tearOffNumber1 = self::Extension1|get#method<core::num*>(c);
-  () →* core::int* tearOffInteger1 = self::Extension1|get#method<core::int*>(c);
-  () →* core::num* tearOff2 = self::Extension2|get#method<core::num*>(c);
-  self::expect(42, tearOffNumber1(){() →* core::num*});
+  self::expect(87, self::Extension2|method<core::num>(c));
+  () → core::num tearOffNumber1 = self::Extension1|get#method<core::num>(c);
+  () → core::int tearOffInteger1 = self::Extension1|get#method<core::int>(c);
+  () → core::num tearOff2 = self::Extension2|get#method<core::num>(c);
+  self::expect(42, tearOffNumber1(){() → core::num});
   self::expect("num", self::Extension1|latestType);
-  self::expect(42, tearOffInteger1(){() →* core::int*});
+  self::expect(42, tearOffInteger1(){() → core::int});
   self::expect("int", self::Extension1|latestType);
-  self::expect(87, tearOff2(){() →* core::num*});
-  self::expect(52, self::Extension1|genericMethod<core::num*, core::int*>(c, 10));
+  self::expect(87, tearOff2(){() → core::num});
+  self::expect(52, self::Extension1|genericMethod<core::num, core::int>(c, 10));
   self::expect("num:int", self::Extension1|latestType);
-  self::expect(52, self::Extension1|genericMethod<core::int*, core::int*>(c, 10));
+  self::expect(52, self::Extension1|genericMethod<core::int, core::int>(c, 10));
   self::expect("int:int", self::Extension1|latestType);
-  self::expect(97, self::Extension2|genericMethod<core::num*, core::int*>(c, 10));
-  self::expect(52, self::Extension1|genericMethod<core::num*, core::num*>(c, 10));
+  self::expect(97, self::Extension2|genericMethod<core::num, core::int>(c, 10));
+  self::expect(52, self::Extension1|genericMethod<core::num, core::num>(c, 10));
   self::expect("num:num", self::Extension1|latestType);
-  self::expect(52, self::Extension1|genericMethod<core::int*, core::num*>(c, 10));
+  self::expect(52, self::Extension1|genericMethod<core::int, core::num>(c, 10));
   self::expect("int:num", self::Extension1|latestType);
-  self::expect(97, self::Extension2|genericMethod<core::num*, core::num*>(c, 10));
-  self::expect(52, self::Extension1|genericMethod<core::int*, core::int*>(c, 10));
+  self::expect(97, self::Extension2|genericMethod<core::num, core::num>(c, 10));
+  self::expect(52, self::Extension1|genericMethod<core::int, core::int>(c, 10));
   self::expect("int:int", self::Extension1|latestType);
-  self::expect(52, self::Extension1|genericMethod<core::int*, core::num*>(c, 10));
+  self::expect(52, self::Extension1|genericMethod<core::int, core::num>(c, 10));
   self::expect("int:num", self::Extension1|latestType);
-  self::expect(52, self::Extension1|genericMethod<core::int*, core::int*>(c, 10));
+  self::expect(52, self::Extension1|genericMethod<core::int, core::int>(c, 10));
   self::expect("int:int", self::Extension1|latestType);
-  <S extends core::num*>(S*) →* core::num* genericTearOffNumber1 = self::Extension1|get#genericMethod<core::num*>(c);
-  <S extends core::num*>(S*) →* core::int* genericTearOffInteger1 = self::Extension1|get#genericMethod<core::int*>(c);
-  <S extends core::num*>(S*) →* core::num* genericTearOff2 = self::Extension2|get#genericMethod<core::num*>(c);
-  self::expect(52, genericTearOffNumber1<core::int*>(10){(core::int*) →* core::num*});
+  <S extends core::num>(S) → core::num genericTearOffNumber1 = self::Extension1|get#genericMethod<core::num>(c);
+  <S extends core::num>(S) → core::int genericTearOffInteger1 = self::Extension1|get#genericMethod<core::int>(c);
+  <S extends core::num>(S) → core::num genericTearOff2 = self::Extension2|get#genericMethod<core::num>(c);
+  self::expect(52, genericTearOffNumber1<core::int>(10){(core::int) → core::num});
   self::expect("num:int", self::Extension1|latestType);
-  self::expect(52, genericTearOffInteger1<core::int*>(10){(core::int*) →* core::int*});
+  self::expect(52, genericTearOffInteger1<core::int>(10){(core::int) → core::int});
   self::expect("int:int", self::Extension1|latestType);
-  self::expect(97, genericTearOff2<core::int*>(10){(core::int*) →* core::num*});
-  self::expect(52, genericTearOffNumber1<core::num*>(10){(core::num*) →* core::num*});
+  self::expect(97, genericTearOff2<core::int>(10){(core::int) → core::num});
+  self::expect(52, genericTearOffNumber1<core::num>(10){(core::num) → core::num});
   self::expect("num:num", self::Extension1|latestType);
-  self::expect(52, genericTearOffInteger1<core::num*>(10){(core::num*) →* core::int*});
+  self::expect(52, genericTearOffInteger1<core::num>(10){(core::num) → core::int});
   self::expect("int:num", self::Extension1|latestType);
-  self::expect(97, genericTearOff2<core::num*>(10){(core::num*) →* core::num*});
-  self::expect(23, let final self::Class<core::int*>* #t1 = c in let final core::int* #t2 = 23 in let final void #t3 = self::Extension1|set#field<core::num*>(#t1, #t2) in #t2);
+  self::expect(97, genericTearOff2<core::num>(10){(core::num) → core::num});
+  self::expect(23, let final self::Class<core::int> #t1 = c in let final core::int #t2 = 23 in let final void #t3 = self::Extension1|set#field<core::num>(#t1, #t2) in #t2);
   self::expect("num", self::Extension1|latestType);
-  self::expect(23, let final self::Class<core::int*>* #t4 = c in let final core::int* #t5 = 23 in let final void #t6 = self::Extension1|set#field<core::int*>(#t4, #t5) in #t5);
+  self::expect(23, let final self::Class<core::int> #t4 = c in let final core::int #t5 = 23 in let final void #t6 = self::Extension1|set#field<core::int>(#t4, #t5) in #t5);
   self::expect("int", self::Extension1|latestType);
-  self::expect(67, let final self::Class<core::int*>* #t7 = c in let final core::int* #t8 = 67 in let final void #t9 = self::Extension2|set#field<core::num*>(#t7, #t8) in #t8);
-  self::expect(23, self::Extension1|get#field<core::num*>(c));
-  self::expect(67, self::Extension2|get#field<core::num*>(c));
+  self::expect(67, let final self::Class<core::int> #t7 = c in let final core::int #t8 = 67 in let final void #t9 = self::Extension2|set#field<core::num>(#t7, #t8) in #t8);
+  self::expect(23, self::Extension1|get#field<core::num>(c));
+  self::expect(67, self::Extension2|get#field<core::num>(c));
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual)) {
     throw "Mismatch: expected=${expected}, actual=${actual}";
   }
 }
diff --git a/pkg/front_end/testcases/extensions/explicit_generic_extension_access.dart.weak.outline.expect b/pkg/front_end/testcases/extensions/explicit_generic_extension_access.dart.weak.outline.expect
index 322d3b1..17ed754 100644
--- a/pkg/front_end/testcases/extensions/explicit_generic_extension_access.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extensions/explicit_generic_extension_access.dart.weak.outline.expect
@@ -1,24 +1,14 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class Class<T extends core::num*> extends core::Object {
-  covariant-by-class field self::Class::T* field1;
-  covariant-by-class field self::Class::T* field2;
-  constructor •(self::Class::T* field1, self::Class::T* field2) → self::Class<self::Class::T*>*
+class Class<T extends core::num> extends core::Object {
+  covariant-by-class field self::Class::T field1;
+  covariant-by-class field self::Class::T field2;
+  constructor •(self::Class::T field1, self::Class::T field2) → self::Class<self::Class::T>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension Extension1<T extends core::num*> on self::Class<T*>* {
+extension Extension1<T extends core::num> on self::Class<T> {
   static field latestType = self::Extension1|latestType;
   get field = self::Extension1|get#field;
   method method = self::Extension1|method;
@@ -27,7 +17,7 @@
   tearoff genericMethod = self::Extension1|get#genericMethod;
   set field = self::Extension1|set#field;
 }
-extension Extension2<T extends core::num*> on self::Class<T*>* {
+extension Extension2<T extends core::num> on self::Class<T> {
   get field = self::Extension2|get#field;
   method method = self::Extension2|method;
   tearoff method = self::Extension2|get#method;
@@ -35,31 +25,31 @@
   tearoff genericMethod = self::Extension2|get#genericMethod;
   set field = self::Extension2|set#field;
 }
-static field core::String* Extension1|latestType;
-static method Extension1|get#field<T extends core::num*>(lowered final self::Class<self::Extension1|get#field::T*>* #this) → self::Extension1|get#field::T*
+static field core::String? Extension1|latestType;
+static method Extension1|get#field<T extends 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*>(lowered 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>(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*>(lowered final self::Class<self::Extension1|method::T*>* #this) → self::Extension1|method::T*
+static method Extension1|method<T extends core::num>(lowered final self::Class<self::Extension1|method::T> #this) → self::Extension1|method::T
   ;
-static method Extension1|get#method<T extends 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*, S extends core::num*>(lowered final self::Class<self::Extension1|genericMethod::T*>* #this, self::Extension1|genericMethod::S* t) → self::Extension1|genericMethod::T*
+static method Extension1|get#method<T extends 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, S extends 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*>(lowered final self::Class<self::Extension1|get#genericMethod::T*>* #this) → <S extends core::num*>(S*) →* self::Extension1|get#genericMethod::T*
-  return <S extends 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*>(lowered final self::Class<self::Extension2|get#field::T*>* #this) → self::Extension2|get#field::T*
+static method Extension1|get#genericMethod<T extends core::num>(lowered final self::Class<self::Extension1|get#genericMethod::T> #this) → <S extends core::num>(S) → self::Extension1|get#genericMethod::T
+  return <S extends 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>(lowered final self::Class<self::Extension2|get#field::T> #this) → self::Extension2|get#field::T
   ;
-static method Extension2|set#field<T extends core::num*>(lowered 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>(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*>(lowered final self::Class<self::Extension2|method::T*>* #this) → self::Extension2|method::T*
+static method Extension2|method<T extends core::num>(lowered final self::Class<self::Extension2|method::T> #this) → self::Extension2|method::T
   ;
-static method Extension2|get#method<T extends 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*, S extends core::num*>(lowered final self::Class<self::Extension2|genericMethod::T*>* #this, self::Extension2|genericMethod::S* t) → self::Extension2|genericMethod::T*
+static method Extension2|get#method<T extends 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, S extends 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*>(lowered final self::Class<self::Extension2|get#genericMethod::T*>* #this) → <S extends core::num*>(S*) →* self::Extension2|get#genericMethod::T*
-  return <S extends core::num*>(S* t) → self::Extension2|get#genericMethod::T* => self::Extension2|genericMethod<self::Extension2|get#genericMethod::T*, S*>(#this, t);
+static method Extension2|get#genericMethod<T extends core::num>(lowered final self::Class<self::Extension2|get#genericMethod::T> #this) → <S extends core::num>(S) → self::Extension2|get#genericMethod::T
+  return <S extends core::num>(S t) → self::Extension2|get#genericMethod::T => self::Extension2|genericMethod<self::Extension2|get#genericMethod::T, S>(#this, t);
 static method main() → dynamic
   ;
 static method expect(dynamic expected, dynamic actual) → dynamic
diff --git a/pkg/front_end/testcases/extensions/explicit_generic_extension_access.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/explicit_generic_extension_access.dart.weak.transformed.expect
index 225240c..911b823 100644
--- a/pkg/front_end/testcases/extensions/explicit_generic_extension_access.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/explicit_generic_extension_access.dart.weak.transformed.expect
@@ -1,25 +1,15 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class Class<T extends core::num*> extends core::Object {
-  covariant-by-class field self::Class::T* field1;
-  covariant-by-class field self::Class::T* field2;
-  constructor •(self::Class::T* field1, self::Class::T* field2) → self::Class<self::Class::T*>*
+class Class<T extends core::num> extends core::Object {
+  covariant-by-class field self::Class::T field1;
+  covariant-by-class field self::Class::T field2;
+  constructor •(self::Class::T field1, self::Class::T field2) → self::Class<self::Class::T>
     : self::Class::field1 = field1, self::Class::field2 = field2, super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension Extension1<T extends core::num*> on self::Class<T*>* {
+extension Extension1<T extends core::num> on self::Class<T> {
   static field latestType = self::Extension1|latestType;
   get field = self::Extension1|get#field;
   method method = self::Extension1|method;
@@ -28,7 +18,7 @@
   tearoff genericMethod = self::Extension1|get#genericMethod;
   set field = self::Extension1|set#field;
 }
-extension Extension2<T extends core::num*> on self::Class<T*>* {
+extension Extension2<T extends core::num> on self::Class<T> {
   get field = self::Extension2|get#field;
   method method = self::Extension2|method;
   tearoff method = self::Extension2|get#method;
@@ -36,99 +26,99 @@
   tearoff genericMethod = self::Extension2|get#genericMethod;
   set field = self::Extension2|set#field;
 }
-static field core::String* Extension1|latestType;
-static method Extension1|get#field<T extends 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}{self::Extension1|get#field::T*};
+static field core::String? Extension1|latestType;
+static method Extension1|get#field<T extends 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}{self::Extension1|get#field::T};
 }
-static method Extension1|set#field<T extends 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*}";
+static method Extension1|set#field<T extends 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*>(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}{self::Extension1|method::T*};
+static method Extension1|method<T extends 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}{self::Extension1|method::T};
 }
-static method Extension1|get#method<T extends 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*, S extends 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}{self::Extension1|genericMethod::T*}.{core::num::+}(t){(core::num*) →* core::num*} as{TypeError} self::Extension1|genericMethod::T*;
+static method Extension1|get#method<T extends 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, S extends 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}{self::Extension1|genericMethod::T}.{core::num::+}(t){(core::num) → core::num} as{ForNonNullableByDefault} self::Extension1|genericMethod::T;
 }
-static method Extension1|get#genericMethod<T extends core::num*>(lowered final self::Class<self::Extension1|get#genericMethod::T*>* #this) → <S extends core::num*>(S*) →* self::Extension1|get#genericMethod::T*
-  return <S extends 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*>(lowered final self::Class<self::Extension2|get#field::T*>* #this) → self::Extension2|get#field::T*
-  return #this.{self::Class::field2}{self::Extension2|get#field::T*};
-static method Extension2|set#field<T extends core::num*>(lowered final self::Class<self::Extension2|set#field::T*>* #this, self::Extension2|set#field::T* value) → void {
+static method Extension1|get#genericMethod<T extends core::num>(lowered final self::Class<self::Extension1|get#genericMethod::T> #this) → <S extends core::num>(S) → self::Extension1|get#genericMethod::T
+  return <S extends 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>(lowered final self::Class<self::Extension2|get#field::T> #this) → self::Extension2|get#field::T
+  return #this.{self::Class::field2}{self::Extension2|get#field::T};
+static method Extension2|set#field<T extends 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*>(lowered final self::Class<self::Extension2|method::T*>* #this) → self::Extension2|method::T*
-  return #this.{self::Class::field2}{self::Extension2|method::T*};
-static method Extension2|get#method<T extends 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*, S extends 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}{self::Extension2|genericMethod::T*}.{core::num::+}(t){(core::num*) →* core::num*} as{TypeError} self::Extension2|genericMethod::T*;
-static method Extension2|get#genericMethod<T extends core::num*>(lowered final self::Class<self::Extension2|get#genericMethod::T*>* #this) → <S extends core::num*>(S*) →* self::Extension2|get#genericMethod::T*
-  return <S extends core::num*>(S* t) → self::Extension2|get#genericMethod::T* => self::Extension2|genericMethod<self::Extension2|get#genericMethod::T*, S*>(#this, t);
+static method Extension2|method<T extends core::num>(lowered final self::Class<self::Extension2|method::T> #this) → self::Extension2|method::T
+  return #this.{self::Class::field2}{self::Extension2|method::T};
+static method Extension2|get#method<T extends 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, S extends 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}{self::Extension2|genericMethod::T}.{core::num::+}(t){(core::num) → core::num} as{ForNonNullableByDefault} self::Extension2|genericMethod::T;
+static method Extension2|get#genericMethod<T extends core::num>(lowered final self::Class<self::Extension2|get#genericMethod::T> #this) → <S extends core::num>(S) → self::Extension2|get#genericMethod::T
+  return <S extends 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);
-  self::expect(42, self::Extension1|get#field<core::num*>(c));
+  self::Class<core::int> c = new self::Class::•<core::int>(42, 87);
+  self::expect(42, self::Extension1|get#field<core::num>(c));
   self::expect("num", self::Extension1|latestType);
-  self::expect(42, self::Extension1|get#field<core::int*>(c));
+  self::expect(42, self::Extension1|get#field<core::int>(c));
   self::expect("int", self::Extension1|latestType);
-  self::expect(87, self::Extension2|get#field<core::num*>(c));
-  self::expect(42, self::Extension1|method<core::num*>(c));
+  self::expect(87, self::Extension2|get#field<core::num>(c));
+  self::expect(42, self::Extension1|method<core::num>(c));
   self::expect("num", self::Extension1|latestType);
-  self::expect(42, self::Extension1|method<core::int*>(c));
+  self::expect(42, self::Extension1|method<core::int>(c));
   self::expect("int", self::Extension1|latestType);
-  self::expect(87, self::Extension2|method<core::num*>(c));
-  () →* core::num* tearOffNumber1 = self::Extension1|get#method<core::num*>(c);
-  () →* core::int* tearOffInteger1 = self::Extension1|get#method<core::int*>(c);
-  () →* core::num* tearOff2 = self::Extension2|get#method<core::num*>(c);
-  self::expect(42, tearOffNumber1(){() →* core::num*});
+  self::expect(87, self::Extension2|method<core::num>(c));
+  () → core::num tearOffNumber1 = self::Extension1|get#method<core::num>(c);
+  () → core::int tearOffInteger1 = self::Extension1|get#method<core::int>(c);
+  () → core::num tearOff2 = self::Extension2|get#method<core::num>(c);
+  self::expect(42, tearOffNumber1(){() → core::num});
   self::expect("num", self::Extension1|latestType);
-  self::expect(42, tearOffInteger1(){() →* core::int*});
+  self::expect(42, tearOffInteger1(){() → core::int});
   self::expect("int", self::Extension1|latestType);
-  self::expect(87, tearOff2(){() →* core::num*});
-  self::expect(52, self::Extension1|genericMethod<core::num*, core::int*>(c, 10));
+  self::expect(87, tearOff2(){() → core::num});
+  self::expect(52, self::Extension1|genericMethod<core::num, core::int>(c, 10));
   self::expect("num:int", self::Extension1|latestType);
-  self::expect(52, self::Extension1|genericMethod<core::int*, core::int*>(c, 10));
+  self::expect(52, self::Extension1|genericMethod<core::int, core::int>(c, 10));
   self::expect("int:int", self::Extension1|latestType);
-  self::expect(97, self::Extension2|genericMethod<core::num*, core::int*>(c, 10));
-  self::expect(52, self::Extension1|genericMethod<core::num*, core::num*>(c, 10));
+  self::expect(97, self::Extension2|genericMethod<core::num, core::int>(c, 10));
+  self::expect(52, self::Extension1|genericMethod<core::num, core::num>(c, 10));
   self::expect("num:num", self::Extension1|latestType);
-  self::expect(52, self::Extension1|genericMethod<core::int*, core::num*>(c, 10));
+  self::expect(52, self::Extension1|genericMethod<core::int, core::num>(c, 10));
   self::expect("int:num", self::Extension1|latestType);
-  self::expect(97, self::Extension2|genericMethod<core::num*, core::num*>(c, 10));
-  self::expect(52, self::Extension1|genericMethod<core::int*, core::int*>(c, 10));
+  self::expect(97, self::Extension2|genericMethod<core::num, core::num>(c, 10));
+  self::expect(52, self::Extension1|genericMethod<core::int, core::int>(c, 10));
   self::expect("int:int", self::Extension1|latestType);
-  self::expect(52, self::Extension1|genericMethod<core::int*, core::num*>(c, 10));
+  self::expect(52, self::Extension1|genericMethod<core::int, core::num>(c, 10));
   self::expect("int:num", self::Extension1|latestType);
-  self::expect(52, self::Extension1|genericMethod<core::int*, core::int*>(c, 10));
+  self::expect(52, self::Extension1|genericMethod<core::int, core::int>(c, 10));
   self::expect("int:int", self::Extension1|latestType);
-  <S extends core::num*>(S*) →* core::num* genericTearOffNumber1 = self::Extension1|get#genericMethod<core::num*>(c);
-  <S extends core::num*>(S*) →* core::int* genericTearOffInteger1 = self::Extension1|get#genericMethod<core::int*>(c);
-  <S extends core::num*>(S*) →* core::num* genericTearOff2 = self::Extension2|get#genericMethod<core::num*>(c);
-  self::expect(52, genericTearOffNumber1<core::int*>(10){(core::int*) →* core::num*});
+  <S extends core::num>(S) → core::num genericTearOffNumber1 = self::Extension1|get#genericMethod<core::num>(c);
+  <S extends core::num>(S) → core::int genericTearOffInteger1 = self::Extension1|get#genericMethod<core::int>(c);
+  <S extends core::num>(S) → core::num genericTearOff2 = self::Extension2|get#genericMethod<core::num>(c);
+  self::expect(52, genericTearOffNumber1<core::int>(10){(core::int) → core::num});
   self::expect("num:int", self::Extension1|latestType);
-  self::expect(52, genericTearOffInteger1<core::int*>(10){(core::int*) →* core::int*});
+  self::expect(52, genericTearOffInteger1<core::int>(10){(core::int) → core::int});
   self::expect("int:int", self::Extension1|latestType);
-  self::expect(97, genericTearOff2<core::int*>(10){(core::int*) →* core::num*});
-  self::expect(52, genericTearOffNumber1<core::num*>(10){(core::num*) →* core::num*});
+  self::expect(97, genericTearOff2<core::int>(10){(core::int) → core::num});
+  self::expect(52, genericTearOffNumber1<core::num>(10){(core::num) → core::num});
   self::expect("num:num", self::Extension1|latestType);
-  self::expect(52, genericTearOffInteger1<core::num*>(10){(core::num*) →* core::int*});
+  self::expect(52, genericTearOffInteger1<core::num>(10){(core::num) → core::int});
   self::expect("int:num", self::Extension1|latestType);
-  self::expect(97, genericTearOff2<core::num*>(10){(core::num*) →* core::num*});
-  self::expect(23, let final self::Class<core::int*>* #t1 = c in let final core::int* #t2 = 23 in let final void #t3 = self::Extension1|set#field<core::num*>(#t1, #t2) in #t2);
+  self::expect(97, genericTearOff2<core::num>(10){(core::num) → core::num});
+  self::expect(23, let final self::Class<core::int> #t1 = c in let final core::int #t2 = 23 in let final void #t3 = self::Extension1|set#field<core::num>(#t1, #t2) in #t2);
   self::expect("num", self::Extension1|latestType);
-  self::expect(23, let final self::Class<core::int*>* #t4 = c in let final core::int* #t5 = 23 in let final void #t6 = self::Extension1|set#field<core::int*>(#t4, #t5) in #t5);
+  self::expect(23, let final self::Class<core::int> #t4 = c in let final core::int #t5 = 23 in let final void #t6 = self::Extension1|set#field<core::int>(#t4, #t5) in #t5);
   self::expect("int", self::Extension1|latestType);
-  self::expect(67, let final self::Class<core::int*>* #t7 = c in let final core::int* #t8 = 67 in let final void #t9 = self::Extension2|set#field<core::num*>(#t7, #t8) in #t8);
-  self::expect(23, self::Extension1|get#field<core::num*>(c));
-  self::expect(67, self::Extension2|get#field<core::num*>(c));
+  self::expect(67, let final self::Class<core::int> #t7 = c in let final core::int #t8 = 67 in let final void #t9 = self::Extension2|set#field<core::num>(#t7, #t8) in #t8);
+  self::expect(23, self::Extension1|get#field<core::num>(c));
+  self::expect(67, self::Extension2|get#field<core::num>(c));
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual)) {
     throw "Mismatch: expected=${expected}, actual=${actual}";
   }
 }
diff --git a/pkg/front_end/testcases/extensions/explicit_invalid_access.dart b/pkg/front_end/testcases/extensions/explicit_invalid_access.dart
index 64a0534..fc8cd69 100644
--- a/pkg/front_end/testcases/extensions/explicit_invalid_access.dart
+++ b/pkg/front_end/testcases/extensions/explicit_invalid_access.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2019, 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.
-// @dart=2.9
+
 class Class {}
 
 extension Extension on Class {}
diff --git a/pkg/front_end/testcases/extensions/explicit_invalid_access.dart.textual_outline.expect b/pkg/front_end/testcases/extensions/explicit_invalid_access.dart.textual_outline.expect
index e158dbb..c1b8b08 100644
--- a/pkg/front_end/testcases/extensions/explicit_invalid_access.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/extensions/explicit_invalid_access.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Class {}
 
 extension Extension on Class {}
diff --git a/pkg/front_end/testcases/extensions/explicit_invalid_access.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/extensions/explicit_invalid_access.dart.textual_outline_modelled.expect
index 311863a..43c658b 100644
--- a/pkg/front_end/testcases/extensions/explicit_invalid_access.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/extensions/explicit_invalid_access.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Class {}
 
 errors(Class c) {}
diff --git a/pkg/front_end/testcases/extensions/explicit_invalid_access.dart.weak.expect b/pkg/front_end/testcases/extensions/explicit_invalid_access.dart.weak.expect
index f0bae7e..a22bd35 100644
--- a/pkg/front_end/testcases/extensions/explicit_invalid_access.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/explicit_invalid_access.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -26,23 +26,13 @@
 import "dart:core" as core;
 
 class Class extends core::Object {
-  synthetic constructor •() → self::Class*
+  synthetic constructor •() → self::Class
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension Extension on self::Class* {
+extension Extension on self::Class {
 }
-static method errors(self::Class* c) → dynamic {
+static method errors(self::Class c) → dynamic {
   invalid-expression "pkg/front_end/testcases/extensions/explicit_invalid_access.dart:10:3: Error: Explicit extension application cannot be used as an expression.
   Extension(c);
   ^^^^^^^^^";
diff --git a/pkg/front_end/testcases/extensions/explicit_invalid_access.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/explicit_invalid_access.dart.weak.modular.expect
index f0bae7e..a22bd35 100644
--- a/pkg/front_end/testcases/extensions/explicit_invalid_access.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/extensions/explicit_invalid_access.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -26,23 +26,13 @@
 import "dart:core" as core;
 
 class Class extends core::Object {
-  synthetic constructor •() → self::Class*
+  synthetic constructor •() → self::Class
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension Extension on self::Class* {
+extension Extension on self::Class {
 }
-static method errors(self::Class* c) → dynamic {
+static method errors(self::Class c) → dynamic {
   invalid-expression "pkg/front_end/testcases/extensions/explicit_invalid_access.dart:10:3: Error: Explicit extension application cannot be used as an expression.
   Extension(c);
   ^^^^^^^^^";
diff --git a/pkg/front_end/testcases/extensions/explicit_invalid_access.dart.weak.outline.expect b/pkg/front_end/testcases/extensions/explicit_invalid_access.dart.weak.outline.expect
index f5961c4..bb12384 100644
--- a/pkg/front_end/testcases/extensions/explicit_invalid_access.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extensions/explicit_invalid_access.dart.weak.outline.expect
@@ -1,24 +1,14 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Class extends core::Object {
-  synthetic constructor •() → self::Class*
+  synthetic constructor •() → self::Class
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension Extension on self::Class* {
+extension Extension on self::Class {
 }
-static method errors(self::Class* c) → dynamic
+static method errors(self::Class c) → dynamic
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/extensions/explicit_invalid_access.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/explicit_invalid_access.dart.weak.transformed.expect
index f0bae7e..a22bd35 100644
--- a/pkg/front_end/testcases/extensions/explicit_invalid_access.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/explicit_invalid_access.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -26,23 +26,13 @@
 import "dart:core" as core;
 
 class Class extends core::Object {
-  synthetic constructor •() → self::Class*
+  synthetic constructor •() → self::Class
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension Extension on self::Class* {
+extension Extension on self::Class {
 }
-static method errors(self::Class* c) → dynamic {
+static method errors(self::Class c) → dynamic {
   invalid-expression "pkg/front_end/testcases/extensions/explicit_invalid_access.dart:10:3: Error: Explicit extension application cannot be used as an expression.
   Extension(c);
   ^^^^^^^^^";
diff --git a/pkg/front_end/testcases/extensions/explicit_this.dart b/pkg/front_end/testcases/extensions/explicit_this.dart
index 8557323..6e444df 100644
--- a/pkg/front_end/testcases/extensions/explicit_this.dart
+++ b/pkg/front_end/testcases/extensions/explicit_this.dart
@@ -1,16 +1,16 @@
 // Copyright (c) 2019, 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.
-// @dart=2.9
+
 class A1 {
-  Object field;
+  Object? field;
   void method1() {}
 }
 
 extension A2 on A1 {
   void method2() => this.method1();
 
-  Object method3() => this.field;
+  Object? method3() => this.field;
 
   void method4(Object o) {
     this.field = o;
diff --git a/pkg/front_end/testcases/extensions/explicit_this.dart.textual_outline.expect b/pkg/front_end/testcases/extensions/explicit_this.dart.textual_outline.expect
index 63c3acd..67d83c3 100644
--- a/pkg/front_end/testcases/extensions/explicit_this.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/extensions/explicit_this.dart.textual_outline.expect
@@ -1,12 +1,11 @@
-// @dart = 2.9
 class A1 {
-  Object field;
+  Object? field;
   void method1() {}
 }
 
 extension A2 on A1 {
   void method2() => this.method1();
-  Object method3() => this.field;
+  Object? method3() => this.field;
   void method4(Object o) {}
 }
 
diff --git a/pkg/front_end/testcases/extensions/explicit_this.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/extensions/explicit_this.dart.textual_outline_modelled.expect
index fb368df..7fd231e 100644
--- a/pkg/front_end/testcases/extensions/explicit_this.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/extensions/explicit_this.dart.textual_outline_modelled.expect
@@ -1,11 +1,10 @@
-// @dart = 2.9
 class A1 {
-  Object field;
+  Object? field;
   void method1() {}
 }
 
 extension A2 on A1 {
-  Object method3() => this.field;
+  Object? method3() => this.field;
   void method2() => this.method1();
   void method4(Object o) {}
 }
diff --git a/pkg/front_end/testcases/extensions/explicit_this.dart.weak.expect b/pkg/front_end/testcases/extensions/explicit_this.dart.weak.expect
index 9328ef6..862dfb1 100644
--- a/pkg/front_end/testcases/extensions/explicit_this.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/explicit_this.dart.weak.expect
@@ -1,25 +1,15 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A1 extends core::Object {
-  field core::Object* field = null;
-  synthetic constructor •() → self::A1*
+  field core::Object? field = null;
+  synthetic constructor •() → self::A1
     : super core::Object::•()
     ;
   method method1() → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension A2 on self::A1* {
+extension A2 on self::A1 {
   method method2 = self::A2|method2;
   tearoff method2 = self::A2|get#method2;
   method method3 = self::A2|method3;
@@ -27,17 +17,17 @@
   method method4 = self::A2|method4;
   tearoff method4 = self::A2|get#method4;
 }
-static method A2|method2(lowered final self::A1* #this) → void
-  return #this.{self::A1::method1}(){() →* void};
-static method A2|get#method2(lowered final self::A1* #this) → () →* void
+static method A2|method2(lowered final self::A1 #this) → void
+  return #this.{self::A1::method1}(){() → void};
+static method A2|get#method2(lowered final self::A1 #this) → () → void
   return () → void => self::A2|method2(#this);
-static method A2|method3(lowered final self::A1* #this) → core::Object*
-  return #this.{self::A1::field}{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(lowered final self::A1* #this, core::Object* o) → void {
+static method A2|method3(lowered final self::A1 #this) → core::Object?
+  return #this.{self::A1::field}{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(lowered final self::A1 #this, core::Object o) → void {
   #this.{self::A1::field} = o;
 }
-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 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.weak.modular.expect b/pkg/front_end/testcases/extensions/explicit_this.dart.weak.modular.expect
index 9328ef6..862dfb1 100644
--- a/pkg/front_end/testcases/extensions/explicit_this.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/extensions/explicit_this.dart.weak.modular.expect
@@ -1,25 +1,15 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A1 extends core::Object {
-  field core::Object* field = null;
-  synthetic constructor •() → self::A1*
+  field core::Object? field = null;
+  synthetic constructor •() → self::A1
     : super core::Object::•()
     ;
   method method1() → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension A2 on self::A1* {
+extension A2 on self::A1 {
   method method2 = self::A2|method2;
   tearoff method2 = self::A2|get#method2;
   method method3 = self::A2|method3;
@@ -27,17 +17,17 @@
   method method4 = self::A2|method4;
   tearoff method4 = self::A2|get#method4;
 }
-static method A2|method2(lowered final self::A1* #this) → void
-  return #this.{self::A1::method1}(){() →* void};
-static method A2|get#method2(lowered final self::A1* #this) → () →* void
+static method A2|method2(lowered final self::A1 #this) → void
+  return #this.{self::A1::method1}(){() → void};
+static method A2|get#method2(lowered final self::A1 #this) → () → void
   return () → void => self::A2|method2(#this);
-static method A2|method3(lowered final self::A1* #this) → core::Object*
-  return #this.{self::A1::field}{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(lowered final self::A1* #this, core::Object* o) → void {
+static method A2|method3(lowered final self::A1 #this) → core::Object?
+  return #this.{self::A1::field}{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(lowered final self::A1 #this, core::Object o) → void {
   #this.{self::A1::field} = o;
 }
-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 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.weak.outline.expect b/pkg/front_end/testcases/extensions/explicit_this.dart.weak.outline.expect
index 21fa5c7..7af82c7 100644
--- a/pkg/front_end/testcases/extensions/explicit_this.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extensions/explicit_this.dart.weak.outline.expect
@@ -1,25 +1,15 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A1 extends core::Object {
-  field core::Object* field;
-  synthetic constructor •() → self::A1*
+  field core::Object? field;
+  synthetic constructor •() → self::A1
     ;
   method method1() → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension A2 on self::A1* {
+extension A2 on self::A1 {
   method method2 = self::A2|method2;
   tearoff method2 = self::A2|get#method2;
   method method3 = self::A2|method3;
@@ -27,17 +17,17 @@
   method method4 = self::A2|method4;
   tearoff method4 = self::A2|get#method4;
 }
-static method A2|method2(lowered final self::A1* #this) → void
+static method A2|method2(lowered final self::A1 #this) → void
   ;
-static method A2|get#method2(lowered 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(lowered final self::A1* #this) → core::Object*
+static method A2|method3(lowered 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(lowered final self::A1* #this, core::Object* o) → void
+static method A2|get#method3(lowered final self::A1 #this) → () → core::Object?
+  return () → core::Object? => self::A2|method3(#this);
+static method A2|method4(lowered final self::A1 #this, core::Object o) → 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 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.weak.transformed.expect b/pkg/front_end/testcases/extensions/explicit_this.dart.weak.transformed.expect
index 9328ef6..862dfb1 100644
--- a/pkg/front_end/testcases/extensions/explicit_this.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/explicit_this.dart.weak.transformed.expect
@@ -1,25 +1,15 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A1 extends core::Object {
-  field core::Object* field = null;
-  synthetic constructor •() → self::A1*
+  field core::Object? field = null;
+  synthetic constructor •() → self::A1
     : super core::Object::•()
     ;
   method method1() → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension A2 on self::A1* {
+extension A2 on self::A1 {
   method method2 = self::A2|method2;
   tearoff method2 = self::A2|get#method2;
   method method3 = self::A2|method3;
@@ -27,17 +17,17 @@
   method method4 = self::A2|method4;
   tearoff method4 = self::A2|get#method4;
 }
-static method A2|method2(lowered final self::A1* #this) → void
-  return #this.{self::A1::method1}(){() →* void};
-static method A2|get#method2(lowered final self::A1* #this) → () →* void
+static method A2|method2(lowered final self::A1 #this) → void
+  return #this.{self::A1::method1}(){() → void};
+static method A2|get#method2(lowered final self::A1 #this) → () → void
   return () → void => self::A2|method2(#this);
-static method A2|method3(lowered final self::A1* #this) → core::Object*
-  return #this.{self::A1::field}{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(lowered final self::A1* #this, core::Object* o) → void {
+static method A2|method3(lowered final self::A1 #this) → core::Object?
+  return #this.{self::A1::field}{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(lowered final self::A1 #this, core::Object o) → void {
   #this.{self::A1::field} = o;
 }
-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 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 b/pkg/front_end/testcases/extensions/export_from_dill/main.dart
index 3c64e58..6524b05 100644
--- a/pkg/front_end/testcases/extensions/export_from_dill/main.dart
+++ b/pkg/front_end/testcases/extensions/export_from_dill/main.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 import 'main_lib1.dart';
 
 main() {
diff --git a/pkg/front_end/testcases/extensions/export_from_dill/main.dart.textual_outline.expect b/pkg/front_end/testcases/extensions/export_from_dill/main.dart.textual_outline.expect
index 37f878a..b27adef 100644
--- a/pkg/front_end/testcases/extensions/export_from_dill/main.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/extensions/export_from_dill/main.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'main_lib1.dart';
 
 main() {}
diff --git a/pkg/front_end/testcases/extensions/export_from_dill/main.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/extensions/export_from_dill/main.dart.textual_outline_modelled.expect
index 37f878a..b27adef 100644
--- a/pkg/front_end/testcases/extensions/export_from_dill/main.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/extensions/export_from_dill/main.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'main_lib1.dart';
 
 main() {}
diff --git a/pkg/front_end/testcases/extensions/export_from_dill/main.dart.weak.expect b/pkg/front_end/testcases/extensions/export_from_dill/main.dart.weak.expect
index 214f428..afed0e9 100644
--- a/pkg/front_end/testcases/extensions/export_from_dill/main.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/export_from_dill/main.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "main_lib2.dart" as mai;
 import "dart:core" as core;
@@ -16,7 +16,7 @@
   #C2;
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "main_lib2.dart" as mai;
 additionalExports = (mai::Extension)
@@ -24,11 +24,11 @@
 export "org-dartlang-testcase:///main_lib2.dart";
 
 
-library;
+library /*isNonNullableByDefault*/;
 import self as mai;
 import "dart:core" as core;
 
-extension Extension on core::int* {
+extension Extension on core::int {
   get instanceProperty = mai::Extension|get#instanceProperty;
   method instanceMethod = mai::Extension|instanceMethod;
   tearoff instanceMethod = mai::Extension|get#instanceMethod;
@@ -40,18 +40,18 @@
   set instanceProperty = mai::Extension|set#instanceProperty;
   static set staticProperty = set mai::Extension|staticProperty;
 }
-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(lowered final core::int* #this) → core::int*
+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(lowered final core::int #this) → core::int
   return 42;
-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
+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*
+static get Extension|staticProperty() → core::int
   return 42;
-static set Extension|staticProperty(core::int* value) → void {}
+static set Extension|staticProperty(core::int value) → void {}
 static method Extension|staticMethod() → void {}
 
 constants  {
diff --git a/pkg/front_end/testcases/extensions/export_from_dill/main.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/export_from_dill/main.dart.weak.modular.expect
index 6a3bebc..f4287ea 100644
--- a/pkg/front_end/testcases/extensions/export_from_dill/main.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/extensions/export_from_dill/main.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "main_lib2.dart" as mai;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/extensions/export_from_dill/main.dart.weak.outline.expect b/pkg/front_end/testcases/extensions/export_from_dill/main.dart.weak.outline.expect
index 70bd997..5a68e2d 100644
--- a/pkg/front_end/testcases/extensions/export_from_dill/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extensions/export_from_dill/main.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 import "org-dartlang-testcase:///main_lib1.dart";
@@ -6,7 +6,7 @@
 static method main() → dynamic
   ;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "main_lib2.dart" as mai;
 additionalExports = (mai::Extension)
@@ -14,11 +14,11 @@
 export "org-dartlang-testcase:///main_lib2.dart";
 
 
-library;
+library /*isNonNullableByDefault*/;
 import self as mai;
 import "dart:core" as core;
 
-extension Extension on core::int* {
+extension Extension on core::int {
   get instanceProperty = mai::Extension|get#instanceProperty;
   method instanceMethod = mai::Extension|instanceMethod;
   tearoff instanceMethod = mai::Extension|get#instanceMethod;
@@ -30,20 +30,20 @@
   set instanceProperty = mai::Extension|set#instanceProperty;
   static set staticProperty = set mai::Extension|staticProperty;
 }
-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(lowered final core::int* #this) → core::int*
+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(lowered final core::int #this) → core::int
   ;
-static method Extension|set#instanceProperty(lowered 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(lowered final core::int* #this) → void
+static method Extension|instanceMethod(lowered final core::int #this) → void
   ;
-static method Extension|get#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*
+static get Extension|staticProperty() → core::int
   ;
-static set Extension|staticProperty(core::int* value) → void
+static set Extension|staticProperty(core::int value) → void
   ;
 static method Extension|staticMethod() → void
   ;
diff --git a/pkg/front_end/testcases/extensions/export_from_dill/main.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/export_from_dill/main.dart.weak.transformed.expect
index 214f428..afed0e9 100644
--- a/pkg/front_end/testcases/extensions/export_from_dill/main.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/export_from_dill/main.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "main_lib2.dart" as mai;
 import "dart:core" as core;
@@ -16,7 +16,7 @@
   #C2;
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "main_lib2.dart" as mai;
 additionalExports = (mai::Extension)
@@ -24,11 +24,11 @@
 export "org-dartlang-testcase:///main_lib2.dart";
 
 
-library;
+library /*isNonNullableByDefault*/;
 import self as mai;
 import "dart:core" as core;
 
-extension Extension on core::int* {
+extension Extension on core::int {
   get instanceProperty = mai::Extension|get#instanceProperty;
   method instanceMethod = mai::Extension|instanceMethod;
   tearoff instanceMethod = mai::Extension|get#instanceMethod;
@@ -40,18 +40,18 @@
   set instanceProperty = mai::Extension|set#instanceProperty;
   static set staticProperty = set mai::Extension|staticProperty;
 }
-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(lowered final core::int* #this) → core::int*
+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(lowered final core::int #this) → core::int
   return 42;
-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
+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*
+static get Extension|staticProperty() → core::int
   return 42;
-static set Extension|staticProperty(core::int* value) → void {}
+static set Extension|staticProperty(core::int value) → void {}
 static method Extension|staticMethod() → void {}
 
 constants  {
diff --git a/pkg/front_end/testcases/extensions/export_from_dill/main_lib1.dart b/pkg/front_end/testcases/extensions/export_from_dill/main_lib1.dart
index 3ea16b6..6c6153b 100644
--- a/pkg/front_end/testcases/extensions/export_from_dill/main_lib1.dart
+++ b/pkg/front_end/testcases/extensions/export_from_dill/main_lib1.dart
@@ -1,5 +1,5 @@
 // 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.
-// @dart=2.9
+
 export 'main_lib2.dart';
diff --git a/pkg/front_end/testcases/extensions/export_from_dill/main_lib2.dart b/pkg/front_end/testcases/extensions/export_from_dill/main_lib2.dart
index 4eba373..b08ae03 100644
--- a/pkg/front_end/testcases/extensions/export_from_dill/main_lib2.dart
+++ b/pkg/front_end/testcases/extensions/export_from_dill/main_lib2.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 extension Extension on int {
   int get instanceProperty => 42;
   void set instanceProperty(int value) {}
diff --git a/pkg/front_end/testcases/extensions/export_twice.dart b/pkg/front_end/testcases/extensions/export_twice.dart
index da8915c..6fdc20a 100644
--- a/pkg/front_end/testcases/extensions/export_twice.dart
+++ b/pkg/front_end/testcases/extensions/export_twice.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2019, 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.
-// @dart=2.9
+
 import 'export_twice_lib1.dart';
 import 'export_twice_lib2.dart';
 
diff --git a/pkg/front_end/testcases/extensions/export_twice.dart.textual_outline.expect b/pkg/front_end/testcases/extensions/export_twice.dart.textual_outline.expect
index 1fc614e..3e4ce72 100644
--- a/pkg/front_end/testcases/extensions/export_twice.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/extensions/export_twice.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'export_twice_lib1.dart';
 import 'export_twice_lib2.dart';
 
diff --git a/pkg/front_end/testcases/extensions/export_twice.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/extensions/export_twice.dart.textual_outline_modelled.expect
index 1fc614e..3e4ce72 100644
--- a/pkg/front_end/testcases/extensions/export_twice.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/extensions/export_twice.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'export_twice_lib1.dart';
 import 'export_twice_lib2.dart';
 
diff --git a/pkg/front_end/testcases/extensions/export_twice.dart.weak.expect b/pkg/front_end/testcases/extensions/export_twice.dart.weak.expect
index d7eef99..ffd5701 100644
--- a/pkg/front_end/testcases/extensions/export_twice.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/export_twice.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "export_twice_lib1.dart" as exp;
 
@@ -9,34 +9,24 @@
   exp::Extension|method(new exp::Class::•());
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as exp;
 import "dart:core" as core;
 
 class Class extends core::Object {
-  synthetic constructor •() → exp::Class*
+  synthetic constructor •() → exp::Class
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension Extension on exp::Class* {
+extension Extension on exp::Class {
   method method = exp::Extension|method;
   tearoff method = exp::Extension|get#method;
 }
-static method Extension|method(lowered final exp::Class* #this) → dynamic {}
-static method Extension|get#method(lowered 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;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "export_twice_lib1.dart" as exp;
 additionalExports = (exp::Extension)
diff --git a/pkg/front_end/testcases/extensions/export_twice.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/export_twice.dart.weak.modular.expect
index d7eef99..ffd5701 100644
--- a/pkg/front_end/testcases/extensions/export_twice.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/extensions/export_twice.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "export_twice_lib1.dart" as exp;
 
@@ -9,34 +9,24 @@
   exp::Extension|method(new exp::Class::•());
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as exp;
 import "dart:core" as core;
 
 class Class extends core::Object {
-  synthetic constructor •() → exp::Class*
+  synthetic constructor •() → exp::Class
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension Extension on exp::Class* {
+extension Extension on exp::Class {
   method method = exp::Extension|method;
   tearoff method = exp::Extension|get#method;
 }
-static method Extension|method(lowered final exp::Class* #this) → dynamic {}
-static method Extension|get#method(lowered 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;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "export_twice_lib1.dart" as exp;
 additionalExports = (exp::Extension)
diff --git a/pkg/front_end/testcases/extensions/export_twice.dart.weak.outline.expect b/pkg/front_end/testcases/extensions/export_twice.dart.weak.outline.expect
index a7b9b7e..b4f09a9 100644
--- a/pkg/front_end/testcases/extensions/export_twice.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extensions/export_twice.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 import "org-dartlang-testcase:///export_twice_lib1.dart";
@@ -7,34 +7,24 @@
 static method main() → dynamic
   ;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
 class Class extends core::Object {
-  synthetic constructor •() → self2::Class*
+  synthetic constructor •() → self2::Class
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension Extension on self2::Class* {
+extension Extension on self2::Class {
   method method = self2::Extension|method;
   tearoff method = self2::Extension|get#method;
 }
-static method Extension|method(lowered final self2::Class* #this) → dynamic
+static method Extension|method(lowered final self2::Class #this) → dynamic
   ;
-static method Extension|get#method(lowered final self2::Class* #this) → () →* dynamic
+static method Extension|get#method(lowered final self2::Class #this) → () → dynamic
   return () → dynamic => self2::Extension|method(#this);
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self3;
 import "export_twice_lib1.dart" as self2;
 additionalExports = (self2::Extension)
diff --git a/pkg/front_end/testcases/extensions/export_twice.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/export_twice.dart.weak.transformed.expect
index d7eef99..ffd5701 100644
--- a/pkg/front_end/testcases/extensions/export_twice.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/export_twice.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "export_twice_lib1.dart" as exp;
 
@@ -9,34 +9,24 @@
   exp::Extension|method(new exp::Class::•());
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as exp;
 import "dart:core" as core;
 
 class Class extends core::Object {
-  synthetic constructor •() → exp::Class*
+  synthetic constructor •() → exp::Class
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension Extension on exp::Class* {
+extension Extension on exp::Class {
   method method = exp::Extension|method;
   tearoff method = exp::Extension|get#method;
 }
-static method Extension|method(lowered final exp::Class* #this) → dynamic {}
-static method Extension|get#method(lowered 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;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "export_twice_lib1.dart" as exp;
 additionalExports = (exp::Extension)
diff --git a/pkg/front_end/testcases/extensions/export_twice_lib1.dart b/pkg/front_end/testcases/extensions/export_twice_lib1.dart
index 22867f5..1004de0 100644
--- a/pkg/front_end/testcases/extensions/export_twice_lib1.dart
+++ b/pkg/front_end/testcases/extensions/export_twice_lib1.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2019, 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.
-// @dart=2.9
+
 class Class {}
 
 extension Extension on Class {
diff --git a/pkg/front_end/testcases/extensions/export_twice_lib2.dart b/pkg/front_end/testcases/extensions/export_twice_lib2.dart
index 59fe68b..adeca01 100644
--- a/pkg/front_end/testcases/extensions/export_twice_lib2.dart
+++ b/pkg/front_end/testcases/extensions/export_twice_lib2.dart
@@ -1,5 +1,5 @@
 // Copyright (c) 2019, 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.
-// @dart=2.9
+
 export 'export_twice_lib1.dart' show Extension;
diff --git a/pkg/front_end/testcases/extensions/extension_call.dart b/pkg/front_end/testcases/extensions/extension_call.dart
index 4df75bd..026883a 100644
--- a/pkg/front_end/testcases/extensions/extension_call.dart
+++ b/pkg/front_end/testcases/extensions/extension_call.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2019, 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.
-// @dart=2.9
+
 class Class<T> {
   T method(T a) => a;
 }
diff --git a/pkg/front_end/testcases/extensions/extension_call.dart.textual_outline.expect b/pkg/front_end/testcases/extensions/extension_call.dart.textual_outline.expect
index 5083960..3acad15 100644
--- a/pkg/front_end/testcases/extensions/extension_call.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/extensions/extension_call.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Class<T> {
   T method(T a) => a;
 }
diff --git a/pkg/front_end/testcases/extensions/extension_call.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/extensions/extension_call.dart.textual_outline_modelled.expect
index 2f1e610..7edde0e 100644
--- a/pkg/front_end/testcases/extensions/extension_call.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/extensions/extension_call.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Class<T> {
   T method(T a) => a;
 }
diff --git a/pkg/front_end/testcases/extensions/extension_call.dart.weak.expect b/pkg/front_end/testcases/extensions/extension_call.dart.weak.expect
index 13106a6..c844073 100644
--- a/pkg/front_end/testcases/extensions/extension_call.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/extension_call.dart.weak.expect
@@ -1,43 +1,33 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class Class<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Class<self::Class::T*>*
+class Class<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Class<self::Class::T%>
     : super core::Object::•()
     ;
-  method method(covariant-by-class self::Class::T* a) → self::Class::T*
+  method method(covariant-by-class self::Class::T% a) → self::Class::T%
     return a;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension Extension<T extends core::Object* = dynamic> on self::Class<T*>* {
+extension Extension<T extends core::Object? = dynamic> on self::Class<T%> {
   method call = self::Extension|call;
   tearoff call = self::Extension|get#call;
 }
-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){(self::Extension|call::T*) →* self::Extension|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 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){(self::Extension|call::T%) → self::Extension|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*>();
-  self::expect(42, self::Extension|call<core::int*>(c, 42));
-  self::expect(87, self::Extension|call<core::int*>(c, 87));
-  self::expect(123, self::Extension|call<core::int*>(c, 123));
-  self::expect(42, self::Extension|call<core::int*>(c, 42));
-  self::expect(87, self::Extension|call<core::int*>(c, 87));
-  self::expect(123, self::Extension|call<core::int*>(c, 123));
+  self::Class<core::int> c = new self::Class::•<core::int>();
+  self::expect(42, self::Extension|call<core::int>(c, 42));
+  self::expect(87, self::Extension|call<core::int>(c, 87));
+  self::expect(123, self::Extension|call<core::int>(c, 123));
+  self::expect(42, self::Extension|call<core::int>(c, 42));
+  self::expect(87, self::Extension|call<core::int>(c, 87));
+  self::expect(123, self::Extension|call<core::int>(c, 123));
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual)) {
     throw "Mismatch: expected=${expected}, actual=${actual}";
   }
 }
diff --git a/pkg/front_end/testcases/extensions/extension_call.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/extension_call.dart.weak.modular.expect
index 13106a6..c844073 100644
--- a/pkg/front_end/testcases/extensions/extension_call.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/extensions/extension_call.dart.weak.modular.expect
@@ -1,43 +1,33 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class Class<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Class<self::Class::T*>*
+class Class<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Class<self::Class::T%>
     : super core::Object::•()
     ;
-  method method(covariant-by-class self::Class::T* a) → self::Class::T*
+  method method(covariant-by-class self::Class::T% a) → self::Class::T%
     return a;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension Extension<T extends core::Object* = dynamic> on self::Class<T*>* {
+extension Extension<T extends core::Object? = dynamic> on self::Class<T%> {
   method call = self::Extension|call;
   tearoff call = self::Extension|get#call;
 }
-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){(self::Extension|call::T*) →* self::Extension|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 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){(self::Extension|call::T%) → self::Extension|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*>();
-  self::expect(42, self::Extension|call<core::int*>(c, 42));
-  self::expect(87, self::Extension|call<core::int*>(c, 87));
-  self::expect(123, self::Extension|call<core::int*>(c, 123));
-  self::expect(42, self::Extension|call<core::int*>(c, 42));
-  self::expect(87, self::Extension|call<core::int*>(c, 87));
-  self::expect(123, self::Extension|call<core::int*>(c, 123));
+  self::Class<core::int> c = new self::Class::•<core::int>();
+  self::expect(42, self::Extension|call<core::int>(c, 42));
+  self::expect(87, self::Extension|call<core::int>(c, 87));
+  self::expect(123, self::Extension|call<core::int>(c, 123));
+  self::expect(42, self::Extension|call<core::int>(c, 42));
+  self::expect(87, self::Extension|call<core::int>(c, 87));
+  self::expect(123, self::Extension|call<core::int>(c, 123));
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual)) {
     throw "Mismatch: expected=${expected}, actual=${actual}";
   }
 }
diff --git a/pkg/front_end/testcases/extensions/extension_call.dart.weak.outline.expect b/pkg/front_end/testcases/extensions/extension_call.dart.weak.outline.expect
index b4a47b5..2705423 100644
--- a/pkg/front_end/testcases/extensions/extension_call.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extensions/extension_call.dart.weak.outline.expect
@@ -1,31 +1,21 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class Class<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Class<self::Class::T*>*
+class Class<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Class<self::Class::T%>
     ;
-  method method(covariant-by-class self::Class::T* a) → self::Class::T*
+  method method(covariant-by-class self::Class::T% a) → self::Class::T%
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension Extension<T extends core::Object* = dynamic> on self::Class<T*>* {
+extension Extension<T extends core::Object? = dynamic> on self::Class<T%> {
   method call = self::Extension|call;
   tearoff call = self::Extension|get#call;
 }
-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|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>(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 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
   ;
 static method expect(dynamic expected, dynamic actual) → dynamic
diff --git a/pkg/front_end/testcases/extensions/extension_call.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/extension_call.dart.weak.transformed.expect
index 13106a6..c844073 100644
--- a/pkg/front_end/testcases/extensions/extension_call.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/extension_call.dart.weak.transformed.expect
@@ -1,43 +1,33 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class Class<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Class<self::Class::T*>*
+class Class<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Class<self::Class::T%>
     : super core::Object::•()
     ;
-  method method(covariant-by-class self::Class::T* a) → self::Class::T*
+  method method(covariant-by-class self::Class::T% a) → self::Class::T%
     return a;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension Extension<T extends core::Object* = dynamic> on self::Class<T*>* {
+extension Extension<T extends core::Object? = dynamic> on self::Class<T%> {
   method call = self::Extension|call;
   tearoff call = self::Extension|get#call;
 }
-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){(self::Extension|call::T*) →* self::Extension|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 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){(self::Extension|call::T%) → self::Extension|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*>();
-  self::expect(42, self::Extension|call<core::int*>(c, 42));
-  self::expect(87, self::Extension|call<core::int*>(c, 87));
-  self::expect(123, self::Extension|call<core::int*>(c, 123));
-  self::expect(42, self::Extension|call<core::int*>(c, 42));
-  self::expect(87, self::Extension|call<core::int*>(c, 87));
-  self::expect(123, self::Extension|call<core::int*>(c, 123));
+  self::Class<core::int> c = new self::Class::•<core::int>();
+  self::expect(42, self::Extension|call<core::int>(c, 42));
+  self::expect(87, self::Extension|call<core::int>(c, 87));
+  self::expect(123, self::Extension|call<core::int>(c, 123));
+  self::expect(42, self::Extension|call<core::int>(c, 42));
+  self::expect(87, self::Extension|call<core::int>(c, 87));
+  self::expect(123, self::Extension|call<core::int>(c, 123));
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual)) {
     throw "Mismatch: expected=${expected}, actual=${actual}";
   }
 }
diff --git a/pkg/front_end/testcases/extensions/extension_constructor.dart b/pkg/front_end/testcases/extensions/extension_constructor.dart
index 44773f4..5cd257d 100644
--- a/pkg/front_end/testcases/extensions/extension_constructor.dart
+++ b/pkg/front_end/testcases/extensions/extension_constructor.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2019, 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.
-// @dart=2.9
+
 class Class {}
 
 extension Extension on Class {
diff --git a/pkg/front_end/testcases/extensions/extension_constructor.dart.textual_outline.expect b/pkg/front_end/testcases/extensions/extension_constructor.dart.textual_outline.expect
index d24be05..ac6bee2 100644
--- a/pkg/front_end/testcases/extensions/extension_constructor.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/extensions/extension_constructor.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Class {}
 extension Extension on Class {
   Extension() {}
diff --git a/pkg/front_end/testcases/extensions/extension_constructor.dart.weak.expect b/pkg/front_end/testcases/extensions/extension_constructor.dart.weak.expect
index 8400d5d..f86c11f 100644
--- a/pkg/front_end/testcases/extensions/extension_constructor.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/extension_constructor.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -26,25 +26,15 @@
 import "dart:core" as core;
 
 class Class extends core::Object {
-  synthetic constructor •() → self::Class*
+  synthetic constructor •() → self::Class
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension Extension on self::Class* {
+extension Extension on self::Class {
   method method = self::Extension|method;
   tearoff method = self::Extension|get#method;
 }
-static method Extension|method(lowered final self::Class* #this) → dynamic {}
-static method Extension|get#method(lowered 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.weak.modular.expect b/pkg/front_end/testcases/extensions/extension_constructor.dart.weak.modular.expect
index 8400d5d..f86c11f 100644
--- a/pkg/front_end/testcases/extensions/extension_constructor.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/extensions/extension_constructor.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -26,25 +26,15 @@
 import "dart:core" as core;
 
 class Class extends core::Object {
-  synthetic constructor •() → self::Class*
+  synthetic constructor •() → self::Class
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension Extension on self::Class* {
+extension Extension on self::Class {
   method method = self::Extension|method;
   tearoff method = self::Extension|get#method;
 }
-static method Extension|method(lowered final self::Class* #this) → dynamic {}
-static method Extension|get#method(lowered 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.weak.outline.expect b/pkg/front_end/testcases/extensions/extension_constructor.dart.weak.outline.expect
index fec0bcb..7ef855d 100644
--- a/pkg/front_end/testcases/extensions/extension_constructor.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extensions/extension_constructor.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -26,26 +26,16 @@
 import "dart:core" as core;
 
 class Class extends core::Object {
-  synthetic constructor •() → self::Class*
+  synthetic constructor •() → self::Class
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension Extension on self::Class* {
+extension Extension on self::Class {
   method method = self::Extension|method;
   tearoff method = self::Extension|get#method;
 }
-static method Extension|method(lowered 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
+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.weak.transformed.expect b/pkg/front_end/testcases/extensions/extension_constructor.dart.weak.transformed.expect
index 8400d5d..f86c11f 100644
--- a/pkg/front_end/testcases/extensions/extension_constructor.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/extension_constructor.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -26,25 +26,15 @@
 import "dart:core" as core;
 
 class Class extends core::Object {
-  synthetic constructor •() → self::Class*
+  synthetic constructor •() → self::Class
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension Extension on self::Class* {
+extension Extension on self::Class {
   method method = self::Extension|method;
   tearoff method = self::Extension|get#method;
 }
-static method Extension|method(lowered final self::Class* #this) → dynamic {}
-static method Extension|get#method(lowered 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 b/pkg/front_end/testcases/extensions/extension_member_conflict.dart
index 547cb0e..ef4e4de 100644
--- a/pkg/front_end/testcases/extensions/extension_member_conflict.dart
+++ b/pkg/front_end/testcases/extensions/extension_member_conflict.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 extension Extension<T> on int {
   int get duplicateInstanceGetter => 0;
   int get duplicateInstanceGetter => 0;
diff --git a/pkg/front_end/testcases/extensions/extension_member_conflict.dart.textual_outline.expect b/pkg/front_end/testcases/extensions/extension_member_conflict.dart.textual_outline.expect
index 7404877..f9f55d9 100644
--- a/pkg/front_end/testcases/extensions/extension_member_conflict.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/extensions/extension_member_conflict.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 extension Extension<T> on int {
   int get duplicateInstanceGetter => 0;
   int get duplicateInstanceGetter => 0;
diff --git a/pkg/front_end/testcases/extensions/extension_member_conflict.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/extensions/extension_member_conflict.dart.textual_outline_modelled.expect
index 903bc75..88f38e3 100644
--- a/pkg/front_end/testcases/extensions/extension_member_conflict.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/extensions/extension_member_conflict.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 extension Extension<T> on int {
   int get duplicateInstanceGetter => 0;
   int get duplicateInstanceGetter => 0;
diff --git a/pkg/front_end/testcases/extensions/extension_member_conflict.dart.weak.expect b/pkg/front_end/testcases/extensions/extension_member_conflict.dart.weak.expect
index fd72cf1..d2335e5 100644
--- a/pkg/front_end/testcases/extensions/extension_member_conflict.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/extension_member_conflict.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -140,7 +140,7 @@
 import self as self;
 import "dart:core" as core;
 
-extension Extension<T extends core::Object* = dynamic> on core::int* {
+extension Extension<T extends core::Object? = dynamic> on core::int {
   get duplicateInstanceGetter = self::Extension|get#duplicateInstanceGetter;
   method duplicateInstanceMethod = self::Extension|duplicateInstanceMethod;
   tearoff duplicateInstanceMethod = self::Extension|get#duplicateInstanceMethod;
@@ -168,42 +168,42 @@
   set instanceSetterAndStaticGetter = self::Extension|set#instanceSetterAndStaticGetter;
   set instanceSetterAndStaticField = self::Extension|set#instanceSetterAndStaticField;
 }
-static field core::int* Extension|duplicateStaticField;
-static method Extension|get#duplicateInstanceGetter<T extends core::Object* = dynamic>(lowered final core::int* #this) → core::int*
+static field core::int Extension|duplicateStaticField;
+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>(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*
+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 set Extension|duplicateStaticSetter(core::int value) → void {}
 static method Extension|duplicateStaticMethod() → void {}
-static method Extension|get#duplicateInstanceGetterPlusSetter<T extends core::Object* = dynamic>(lowered 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>(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*
+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>(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*
+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>(lowered final core::int* #this, core::int* value) → void {}
-static get Extension|duplicateStaticGetterPlusSetter() → core::int*
+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 {}
-static get Extension|duplicateStaticSetterPlusGetter() → core::int*
+static set Extension|duplicateStaticGetterPlusSetter(core::int value) → void {}
+static get Extension|duplicateStaticSetterPlusGetter() → core::int
   return 0;
-static set Extension|duplicateStaticSetterPlusGetter(core::int* value) → void {}
-static get Extension|duplicateStaticGetterAndSetter() → core::int*
+static set Extension|duplicateStaticSetterPlusGetter(core::int value) → void {}
+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>(lowered final core::int* #this) → core::int*
+static set Extension|duplicateStaticGetterAndSetter(core::int value) → void {}
+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*
+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>(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*
+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>(lowered 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.weak.modular.expect b/pkg/front_end/testcases/extensions/extension_member_conflict.dart.weak.modular.expect
index fd72cf1..d2335e5 100644
--- a/pkg/front_end/testcases/extensions/extension_member_conflict.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/extensions/extension_member_conflict.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -140,7 +140,7 @@
 import self as self;
 import "dart:core" as core;
 
-extension Extension<T extends core::Object* = dynamic> on core::int* {
+extension Extension<T extends core::Object? = dynamic> on core::int {
   get duplicateInstanceGetter = self::Extension|get#duplicateInstanceGetter;
   method duplicateInstanceMethod = self::Extension|duplicateInstanceMethod;
   tearoff duplicateInstanceMethod = self::Extension|get#duplicateInstanceMethod;
@@ -168,42 +168,42 @@
   set instanceSetterAndStaticGetter = self::Extension|set#instanceSetterAndStaticGetter;
   set instanceSetterAndStaticField = self::Extension|set#instanceSetterAndStaticField;
 }
-static field core::int* Extension|duplicateStaticField;
-static method Extension|get#duplicateInstanceGetter<T extends core::Object* = dynamic>(lowered final core::int* #this) → core::int*
+static field core::int Extension|duplicateStaticField;
+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>(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*
+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 set Extension|duplicateStaticSetter(core::int value) → void {}
 static method Extension|duplicateStaticMethod() → void {}
-static method Extension|get#duplicateInstanceGetterPlusSetter<T extends core::Object* = dynamic>(lowered 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>(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*
+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>(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*
+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>(lowered final core::int* #this, core::int* value) → void {}
-static get Extension|duplicateStaticGetterPlusSetter() → core::int*
+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 {}
-static get Extension|duplicateStaticSetterPlusGetter() → core::int*
+static set Extension|duplicateStaticGetterPlusSetter(core::int value) → void {}
+static get Extension|duplicateStaticSetterPlusGetter() → core::int
   return 0;
-static set Extension|duplicateStaticSetterPlusGetter(core::int* value) → void {}
-static get Extension|duplicateStaticGetterAndSetter() → core::int*
+static set Extension|duplicateStaticSetterPlusGetter(core::int value) → void {}
+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>(lowered final core::int* #this) → core::int*
+static set Extension|duplicateStaticGetterAndSetter(core::int value) → void {}
+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*
+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>(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*
+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>(lowered 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.weak.outline.expect b/pkg/front_end/testcases/extensions/extension_member_conflict.dart.weak.outline.expect
index 4010730..649c9bc 100644
--- a/pkg/front_end/testcases/extensions/extension_member_conflict.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extensions/extension_member_conflict.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -140,7 +140,7 @@
 import self as self;
 import "dart:core" as core;
 
-extension Extension<T extends core::Object* = dynamic> on core::int* {
+extension Extension<T extends core::Object? = dynamic> on core::int {
   get duplicateInstanceGetter = self::Extension|get#duplicateInstanceGetter;
   method duplicateInstanceMethod = self::Extension|duplicateInstanceMethod;
   tearoff duplicateInstanceMethod = self::Extension|get#duplicateInstanceMethod;
@@ -168,56 +168,56 @@
   set instanceSetterAndStaticGetter = self::Extension|set#instanceSetterAndStaticGetter;
   set instanceSetterAndStaticField = self::Extension|set#instanceSetterAndStaticField;
 }
-static field core::int* Extension|duplicateStaticField;
-static method Extension|get#duplicateInstanceGetter<T extends core::Object* = dynamic>(lowered final core::int* #this) → core::int*
+static field core::int Extension|duplicateStaticField;
+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>(lowered 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>(lowered 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>(lowered final core::int* #this) → () →* void
-  return () → void => self::Extension|duplicateInstanceMethod<self::Extension|get#duplicateInstanceMethod::T*>(#this);
-static get Extension|duplicateStaticGetter() → core::int*
+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
   ;
-static set Extension|duplicateStaticSetter(core::int* value) → void
+static set Extension|duplicateStaticSetter(core::int value) → void
   ;
 static method Extension|duplicateStaticMethod() → void
   ;
-static method Extension|get#duplicateInstanceGetterPlusSetter<T extends core::Object* = dynamic>(lowered 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>(lowered 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>(lowered 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>(lowered 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>(lowered 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>(lowered 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*
+static get Extension|duplicateStaticGetterPlusSetter() → core::int
   ;
-static set Extension|duplicateStaticGetterPlusSetter(core::int* value) → void
+static set Extension|duplicateStaticGetterPlusSetter(core::int value) → void
   ;
-static get Extension|duplicateStaticSetterPlusGetter() → core::int*
+static get Extension|duplicateStaticSetterPlusGetter() → core::int
   ;
-static set Extension|duplicateStaticSetterPlusGetter(core::int* value) → void
+static set Extension|duplicateStaticSetterPlusGetter(core::int value) → void
   ;
-static get Extension|duplicateStaticGetterAndSetter() → core::int*
+static get Extension|duplicateStaticGetterAndSetter() → core::int
   ;
-static set Extension|duplicateStaticGetterAndSetter(core::int* value) → void
+static set Extension|duplicateStaticGetterAndSetter(core::int value) → void
   ;
-static method Extension|get#instanceGetterAndStaticSetter<T extends core::Object* = dynamic>(lowered 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 set Extension|instanceGetterAndStaticSetter(core::int value) → void
   ;
-static get Extension|instanceSetterAndStaticGetter() → core::int*
+static get Extension|instanceSetterAndStaticGetter() → core::int
   ;
-static method Extension|set#instanceSetterAndStaticGetter<T extends core::Object* = dynamic>(lowered 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>(lowered 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>(lowered 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.weak.transformed.expect b/pkg/front_end/testcases/extensions/extension_member_conflict.dart.weak.transformed.expect
index fd72cf1..d2335e5 100644
--- a/pkg/front_end/testcases/extensions/extension_member_conflict.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/extension_member_conflict.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -140,7 +140,7 @@
 import self as self;
 import "dart:core" as core;
 
-extension Extension<T extends core::Object* = dynamic> on core::int* {
+extension Extension<T extends core::Object? = dynamic> on core::int {
   get duplicateInstanceGetter = self::Extension|get#duplicateInstanceGetter;
   method duplicateInstanceMethod = self::Extension|duplicateInstanceMethod;
   tearoff duplicateInstanceMethod = self::Extension|get#duplicateInstanceMethod;
@@ -168,42 +168,42 @@
   set instanceSetterAndStaticGetter = self::Extension|set#instanceSetterAndStaticGetter;
   set instanceSetterAndStaticField = self::Extension|set#instanceSetterAndStaticField;
 }
-static field core::int* Extension|duplicateStaticField;
-static method Extension|get#duplicateInstanceGetter<T extends core::Object* = dynamic>(lowered final core::int* #this) → core::int*
+static field core::int Extension|duplicateStaticField;
+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>(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*
+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 set Extension|duplicateStaticSetter(core::int value) → void {}
 static method Extension|duplicateStaticMethod() → void {}
-static method Extension|get#duplicateInstanceGetterPlusSetter<T extends core::Object* = dynamic>(lowered 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>(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*
+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>(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*
+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>(lowered final core::int* #this, core::int* value) → void {}
-static get Extension|duplicateStaticGetterPlusSetter() → core::int*
+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 {}
-static get Extension|duplicateStaticSetterPlusGetter() → core::int*
+static set Extension|duplicateStaticGetterPlusSetter(core::int value) → void {}
+static get Extension|duplicateStaticSetterPlusGetter() → core::int
   return 0;
-static set Extension|duplicateStaticSetterPlusGetter(core::int* value) → void {}
-static get Extension|duplicateStaticGetterAndSetter() → core::int*
+static set Extension|duplicateStaticSetterPlusGetter(core::int value) → void {}
+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>(lowered final core::int* #this) → core::int*
+static set Extension|duplicateStaticGetterAndSetter(core::int value) → void {}
+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*
+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>(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*
+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>(lowered 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 b/pkg/front_end/testcases/extensions/extension_methods.dart
index 958a313..079b344 100644
--- a/pkg/front_end/testcases/extensions/extension_methods.dart
+++ b/pkg/front_end/testcases/extensions/extension_methods.dart
@@ -2,8 +2,6 @@
 // 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.
 
-// @dart=2.9
-
 import 'package:expect/expect.dart';
 
 class C {
diff --git a/pkg/front_end/testcases/extensions/extension_methods.dart.textual_outline.expect b/pkg/front_end/testcases/extensions/extension_methods.dart.textual_outline.expect
index 298f478..5ed8d9d8 100644
--- a/pkg/front_end/testcases/extensions/extension_methods.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/extensions/extension_methods.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'package:expect/expect.dart';
 
 class C {
diff --git a/pkg/front_end/testcases/extensions/extension_methods.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/extensions/extension_methods.dart.textual_outline_modelled.expect
index 298f478..5ed8d9d8 100644
--- a/pkg/front_end/testcases/extensions/extension_methods.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/extensions/extension_methods.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'package:expect/expect.dart';
 
 class C {
diff --git a/pkg/front_end/testcases/extensions/extension_methods.dart.weak.expect b/pkg/front_end/testcases/extensions/extension_methods.dart.weak.expect
index dd3ee97..4ac2693 100644
--- a/pkg/front_end/testcases/extensions/extension_methods.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/extension_methods.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "package:expect/expect.dart" as exp;
@@ -6,29 +6,19 @@
 import "package:expect/expect.dart";
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  get one() → core::int*
+  get one() → core::int
     return 1;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension E on self::C* {
+extension E on self::C {
   get two = self::E|get#two;
 }
-static method E|get#two(lowered 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::•();
-  core::int* result = c.{self::C::one}{core::int*}.{core::num::+}(self::E|get#two(c)){(core::num*) →* core::int*};
+  self::C c = new self::C::•();
+  core::int result = c.{self::C::one}{core::int}.{core::num::+}(self::E|get#two(c)){(core::num) → core::int};
   exp::Expect::equals(result, 3);
 }
diff --git a/pkg/front_end/testcases/extensions/extension_methods.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/extension_methods.dart.weak.modular.expect
index dd3ee97..4ac2693 100644
--- a/pkg/front_end/testcases/extensions/extension_methods.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/extensions/extension_methods.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "package:expect/expect.dart" as exp;
@@ -6,29 +6,19 @@
 import "package:expect/expect.dart";
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  get one() → core::int*
+  get one() → core::int
     return 1;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension E on self::C* {
+extension E on self::C {
   get two = self::E|get#two;
 }
-static method E|get#two(lowered 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::•();
-  core::int* result = c.{self::C::one}{core::int*}.{core::num::+}(self::E|get#two(c)){(core::num*) →* core::int*};
+  self::C c = new self::C::•();
+  core::int result = c.{self::C::one}{core::int}.{core::num::+}(self::E|get#two(c)){(core::num) → core::int};
   exp::Expect::equals(result, 3);
 }
diff --git a/pkg/front_end/testcases/extensions/extension_methods.dart.weak.outline.expect b/pkg/front_end/testcases/extensions/extension_methods.dart.weak.outline.expect
index 20fb805..d7ba71b 100644
--- a/pkg/front_end/testcases/extensions/extension_methods.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extensions/extension_methods.dart.weak.outline.expect
@@ -1,29 +1,19 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 import "package:expect/expect.dart";
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
-  get one() → core::int*
+  get one() → core::int
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension E on self::C* {
+extension E on self::C {
   get two = self::E|get#two;
 }
-static method E|get#two(lowered 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.weak.transformed.expect b/pkg/front_end/testcases/extensions/extension_methods.dart.weak.transformed.expect
index dd3ee97..4ac2693 100644
--- a/pkg/front_end/testcases/extensions/extension_methods.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/extension_methods.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "package:expect/expect.dart" as exp;
@@ -6,29 +6,19 @@
 import "package:expect/expect.dart";
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  get one() → core::int*
+  get one() → core::int
     return 1;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension E on self::C* {
+extension E on self::C {
   get two = self::E|get#two;
 }
-static method E|get#two(lowered 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::•();
-  core::int* result = c.{self::C::one}{core::int*}.{core::num::+}(self::E|get#two(c)){(core::num*) →* core::int*};
+  self::C c = new self::C::•();
+  core::int result = c.{self::C::one}{core::int}.{core::num::+}(self::E|get#two(c)){(core::num) → core::int};
   exp::Expect::equals(result, 3);
 }
diff --git a/pkg/front_end/testcases/extensions/extension_setter.dart b/pkg/front_end/testcases/extensions/extension_setter.dart
index de402ac..99a3f11 100644
--- a/pkg/front_end/testcases/extensions/extension_setter.dart
+++ b/pkg/front_end/testcases/extensions/extension_setter.dart
@@ -1,7 +1,9 @@
 // Copyright (c) 2019, 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.
+
 // @dart=2.9
+
 class Class {
   int field;
 }
diff --git a/pkg/front_end/testcases/extensions/extension_setter.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/extension_setter.dart.weak.transformed.expect
index 27a9a41..795fc5b 100644
--- a/pkg/front_end/testcases/extensions/extension_setter.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/extension_setter.dart.weak.transformed.expect
@@ -224,104 +224,104 @@
 
 
 Extra constant evaluation status:
-Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:47:30 -> IntConstant(1)
-Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:47:30 -> IntConstant(1)
-Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:51:32 -> IntConstant(2)
-Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:51:32 -> IntConstant(2)
-Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter.dart:56:24 -> IntConstant(-2)
-Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:58:34 -> IntConstant(3)
-Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:58:34 -> IntConstant(3)
-Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter.dart:60:12 -> IntConstant(-4)
-Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter.dart:60:35 -> IntConstant(-4)
-Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:60:35 -> IntConstant(-4)
-Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:60:35 -> IntConstant(-4)
-Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter.dart:65:25 -> IntConstant(-2)
-Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:67:35 -> IntConstant(3)
-Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:67:35 -> IntConstant(3)
-Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter.dart:69:12 -> IntConstant(-4)
-Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter.dart:69:36 -> IntConstant(-4)
-Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:69:36 -> IntConstant(-4)
-Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:69:36 -> IntConstant(-4)
-Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:86:30 -> IntConstant(1)
-Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:86:30 -> IntConstant(1)
-Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:89:41 -> IntConstant(3)
-Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:89:41 -> IntConstant(3)
-Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:93:32 -> IntConstant(2)
-Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:93:32 -> IntConstant(2)
-Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:97:43 -> IntConstant(6)
-Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:97:43 -> IntConstant(6)
-Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter.dart:102:24 -> IntConstant(-2)
-Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:104:34 -> IntConstant(3)
-Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:104:34 -> IntConstant(3)
-Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter.dart:106:10 -> IntConstant(-4)
-Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter.dart:106:35 -> IntConstant(-4)
-Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:106:35 -> IntConstant(-4)
-Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:106:35 -> IntConstant(-4)
-Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter.dart:110:35 -> IntConstant(-6)
-Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:112:45 -> IntConstant(7)
-Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:112:45 -> IntConstant(7)
-Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter.dart:114:10 -> IntConstant(-8)
-Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter.dart:114:46 -> IntConstant(-8)
-Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:114:46 -> IntConstant(-8)
-Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:114:46 -> IntConstant(-8)
-Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter.dart:119:25 -> IntConstant(-2)
-Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:121:35 -> IntConstant(3)
-Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:121:35 -> IntConstant(3)
-Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter.dart:123:10 -> IntConstant(-4)
-Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter.dart:123:36 -> IntConstant(-4)
-Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:123:36 -> IntConstant(-4)
-Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:123:36 -> IntConstant(-4)
-Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter.dart:127:36 -> IntConstant(-6)
-Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:129:46 -> IntConstant(7)
-Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:129:46 -> IntConstant(7)
-Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter.dart:131:10 -> IntConstant(-8)
-Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter.dart:131:47 -> IntConstant(-8)
-Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:131:47 -> IntConstant(-8)
-Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:131:47 -> IntConstant(-8)
-Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:136:31 -> IntConstant(1)
-Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:136:31 -> IntConstant(1)
-Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:139:41 -> IntConstant(3)
-Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:139:41 -> IntConstant(3)
-Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:143:33 -> IntConstant(2)
-Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:143:33 -> IntConstant(2)
-Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:147:43 -> IntConstant(6)
-Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:147:43 -> IntConstant(6)
-Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter.dart:152:25 -> IntConstant(-2)
-Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:154:35 -> IntConstant(3)
-Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:154:35 -> IntConstant(3)
-Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter.dart:156:10 -> IntConstant(-4)
-Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter.dart:156:36 -> IntConstant(-4)
-Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:156:36 -> IntConstant(-4)
-Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:156:36 -> IntConstant(-4)
-Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter.dart:160:35 -> IntConstant(-6)
-Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:162:45 -> IntConstant(7)
-Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:162:45 -> IntConstant(7)
-Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter.dart:164:10 -> IntConstant(-8)
-Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter.dart:164:46 -> IntConstant(-8)
-Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:164:46 -> IntConstant(-8)
-Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:164:46 -> IntConstant(-8)
-Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter.dart:169:26 -> IntConstant(-2)
-Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:171:36 -> IntConstant(3)
-Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:171:36 -> IntConstant(3)
-Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter.dart:173:10 -> IntConstant(-4)
-Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter.dart:173:37 -> IntConstant(-4)
-Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:173:37 -> IntConstant(-4)
-Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:173:37 -> IntConstant(-4)
-Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter.dart:177:36 -> IntConstant(-6)
-Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:179:46 -> IntConstant(7)
-Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:179:46 -> IntConstant(7)
-Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter.dart:181:10 -> IntConstant(-8)
-Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter.dart:181:47 -> IntConstant(-8)
-Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:181:47 -> IntConstant(-8)
-Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:181:47 -> IntConstant(-8)
-Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:187:32 -> IntConstant(2)
-Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:187:32 -> IntConstant(2)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:49:30 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:49:30 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:53:32 -> IntConstant(2)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:53:32 -> IntConstant(2)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter.dart:58:24 -> IntConstant(-2)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:60:34 -> IntConstant(3)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:60:34 -> IntConstant(3)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter.dart:62:12 -> IntConstant(-4)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter.dart:62:35 -> IntConstant(-4)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:62:35 -> IntConstant(-4)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:62:35 -> IntConstant(-4)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter.dart:67:25 -> IntConstant(-2)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:69:35 -> IntConstant(3)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:69:35 -> IntConstant(3)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter.dart:71:12 -> IntConstant(-4)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter.dart:71:36 -> IntConstant(-4)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:71:36 -> IntConstant(-4)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:71:36 -> IntConstant(-4)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:88:30 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:88:30 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:91:41 -> IntConstant(3)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:91:41 -> IntConstant(3)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:95:32 -> IntConstant(2)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:95:32 -> IntConstant(2)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:99:43 -> IntConstant(6)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:99:43 -> IntConstant(6)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter.dart:104:24 -> IntConstant(-2)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:106:34 -> IntConstant(3)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:106:34 -> IntConstant(3)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter.dart:108:10 -> IntConstant(-4)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter.dart:108:35 -> IntConstant(-4)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:108:35 -> IntConstant(-4)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:108:35 -> IntConstant(-4)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter.dart:112:35 -> IntConstant(-6)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:114:45 -> IntConstant(7)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:114:45 -> IntConstant(7)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter.dart:116:10 -> IntConstant(-8)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter.dart:116:46 -> IntConstant(-8)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:116:46 -> IntConstant(-8)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:116:46 -> IntConstant(-8)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter.dart:121:25 -> IntConstant(-2)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:123:35 -> IntConstant(3)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:123:35 -> IntConstant(3)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter.dart:125:10 -> IntConstant(-4)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter.dart:125:36 -> IntConstant(-4)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:125:36 -> IntConstant(-4)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:125:36 -> IntConstant(-4)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter.dart:129:36 -> IntConstant(-6)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:131:46 -> IntConstant(7)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:131:46 -> IntConstant(7)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter.dart:133:10 -> IntConstant(-8)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter.dart:133:47 -> IntConstant(-8)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:133:47 -> IntConstant(-8)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:133:47 -> IntConstant(-8)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:138:31 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:138:31 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:141:41 -> IntConstant(3)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:141:41 -> IntConstant(3)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:145:33 -> IntConstant(2)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:145:33 -> IntConstant(2)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:149:43 -> IntConstant(6)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:149:43 -> IntConstant(6)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter.dart:154:25 -> IntConstant(-2)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:156:35 -> IntConstant(3)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:156:35 -> IntConstant(3)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter.dart:158:10 -> IntConstant(-4)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter.dart:158:36 -> IntConstant(-4)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:158:36 -> IntConstant(-4)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:158:36 -> IntConstant(-4)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter.dart:162:35 -> IntConstant(-6)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:164:45 -> IntConstant(7)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:164:45 -> IntConstant(7)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter.dart:166:10 -> IntConstant(-8)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter.dart:166:46 -> IntConstant(-8)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:166:46 -> IntConstant(-8)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:166:46 -> IntConstant(-8)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter.dart:171:26 -> IntConstant(-2)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:173:36 -> IntConstant(3)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:173:36 -> IntConstant(3)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter.dart:175:10 -> IntConstant(-4)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter.dart:175:37 -> IntConstant(-4)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:175:37 -> IntConstant(-4)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:175:37 -> IntConstant(-4)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter.dart:179:36 -> IntConstant(-6)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:181:46 -> IntConstant(7)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:181:46 -> IntConstant(7)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter.dart:183:10 -> IntConstant(-8)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter.dart:183:47 -> IntConstant(-8)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:183:47 -> IntConstant(-8)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:183:47 -> IntConstant(-8)
 Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:189:32 -> IntConstant(2)
 Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:189:32 -> IntConstant(2)
-Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:194:33 -> IntConstant(2)
-Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:194:33 -> IntConstant(2)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:191:32 -> IntConstant(2)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:191:32 -> IntConstant(2)
 Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:196:33 -> IntConstant(2)
 Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:196:33 -> IntConstant(2)
-Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:201:53 -> IntConstant(1)
-Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:201:53 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:198:33 -> IntConstant(2)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:198:33 -> IntConstant(2)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:203:53 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter.dart:203:53 -> IntConstant(1)
 Extra constant evaluation: evaluated: 835, effectively constant: 100
diff --git a/pkg/front_end/testcases/extensions/extension_setter2.dart b/pkg/front_end/testcases/extensions/extension_setter2.dart
new file mode 100644
index 0000000..4709711
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/extension_setter2.dart
@@ -0,0 +1,222 @@
+// Copyright (c) 2019, 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.
+
+class Class {
+  int field;
+  int? nullableField;
+
+  Class(this.field);
+}
+
+extension Extension on Class {
+  int get simpleSetter => field;
+
+  set simpleSetter(int value) {
+    field = value;
+  }
+
+  int? get simpleNullableSetter => nullableField;
+
+  set simpleNullableSetter(int? value) {
+    nullableField = value;
+  }
+
+  int get mutatingSetter => field;
+
+  set mutatingSetter(int value) {
+    value = value + 1;
+    field = value;
+  }
+
+  int get setterWithReturn => field;
+
+  set setterWithReturn(int value) {
+    if (value < 0) {
+      field = -value;
+      return;
+    }
+    field = value;
+  }
+
+  int get setterWithClosure => field;
+
+  set setterWithClosure(int value) {
+    abs(value) {
+      return value < 0 ? -value : value;
+    }
+
+    field = abs(value);
+  }
+
+  testInternal() {
+    expect(-1, field);
+
+    simpleSetter = 0;
+    expect(0, field);
+    expect(1, simpleSetter = 1);
+
+    mutatingSetter = 0;
+    expect(1, field);
+    expect(2, mutatingSetter = 2);
+    expect(3, field);
+
+    setterWithReturn = 1;
+    expect(1, field);
+    setterWithReturn = -2;
+    expect(2, field);
+    expect(3, setterWithReturn = 3);
+    expect(3, field);
+    expect(-4, setterWithReturn = -4);
+    expect(4, field);
+
+    setterWithClosure = 1;
+    expect(1, field);
+    setterWithClosure = -2;
+    expect(2, field);
+    expect(3, setterWithClosure = 3);
+    expect(3, field);
+    expect(-4, setterWithClosure = -4);
+    expect(4, field);
+  }
+}
+
+class GenericClass<T> {}
+
+extension GenericExtension<T> on GenericClass<T> {
+  set setter(T value) {}
+}
+
+main() {
+  var c = new Class(-1);
+  test(c, c);
+}
+
+test(Class c, Class? cn) {
+  expect(-1, c.field);
+
+  c.simpleSetter = 0;
+  expect(0, c.field);
+  expect(1, c.simpleSetter = 1);
+  Extension(c).simpleSetter = 2;
+  expect(2, c.field);
+  expect(3, Extension(c).simpleSetter = 3);
+
+  c.mutatingSetter = 0;
+  expect(1, c.field);
+  expect(2, c.mutatingSetter = 2);
+  expect(3, c.field);
+  Extension(c).mutatingSetter = 4;
+  expect(5, c.field);
+  expect(6, Extension(c).mutatingSetter = 6);
+  expect(7, c.field);
+
+  c.setterWithReturn = 1;
+  expect(1, c.field);
+  c.setterWithReturn = -2;
+  expect(2, c.field);
+  expect(3, c.setterWithReturn = 3);
+  expect(3, c.field);
+  expect(-4, c.setterWithReturn = -4);
+  expect(4, c.field);
+  Extension(c).setterWithReturn = 5;
+  expect(5, c.field);
+  Extension(c).setterWithReturn = -6;
+  expect(6, c.field);
+  expect(7, Extension(c).setterWithReturn = 7);
+  expect(7, c.field);
+  expect(-8, Extension(c).setterWithReturn = -8);
+  expect(8, c.field);
+
+  c.setterWithClosure = 1;
+  expect(1, c.field);
+  c.setterWithClosure = -2;
+  expect(2, c.field);
+  expect(3, c.setterWithClosure = 3);
+  expect(3, c.field);
+  expect(-4, c.setterWithClosure = -4);
+  expect(4, c.field);
+  Extension(c).setterWithClosure = 5;
+  expect(5, c.field);
+  Extension(c).setterWithClosure = -6;
+  expect(6, c.field);
+  expect(7, Extension(c).setterWithClosure = 7);
+  expect(7, c.field);
+  expect(-8, Extension(c).setterWithClosure = -8);
+  expect(8, c.field);
+
+  c.simpleSetter = 0;
+  expect(0, cn?.field);
+  expect(1, cn?.simpleSetter = 1);
+  Extension(c).simpleSetter = 2;
+  expect(2, cn?.field);
+  expect(3, Extension(c).simpleSetter = 3);
+
+  c.mutatingSetter = 0;
+  expect(1, cn?.field);
+  expect(2, cn?.mutatingSetter = 2);
+  expect(3, cn?.field);
+  Extension(c).mutatingSetter = 4;
+  expect(5, cn?.field);
+  expect(6, Extension(c).mutatingSetter = 6);
+  expect(7, cn?.field);
+
+  cn?.setterWithReturn = 1;
+  expect(1, cn?.field);
+  cn?.setterWithReturn = -2;
+  expect(2, cn?.field);
+  expect(3, cn?.setterWithReturn = 3);
+  expect(3, cn?.field);
+  expect(-4, cn?.setterWithReturn = -4);
+  expect(4, cn?.field);
+  Extension(c).setterWithReturn = 5;
+  expect(5, cn?.field);
+  Extension(c).setterWithReturn = -6;
+  expect(6, cn?.field);
+  expect(7, Extension(c).setterWithReturn = 7);
+  expect(7, cn?.field);
+  expect(-8, Extension(c).setterWithReturn = -8);
+  expect(8, cn?.field);
+
+  cn?.setterWithClosure = 1;
+  expect(1, cn?.field);
+  cn?.setterWithClosure = -2;
+  expect(2, cn?.field);
+  expect(3, cn?.setterWithClosure = 3);
+  expect(3, cn?.field);
+  expect(-4, cn?.setterWithClosure = -4);
+  expect(4, cn?.field);
+  Extension(c).setterWithClosure = 5;
+  expect(5, cn?.field);
+  Extension(c).setterWithClosure = -6;
+  expect(6, cn?.field);
+  expect(7, Extension(c).setterWithClosure = 7);
+  expect(7, cn?.field);
+  expect(-8, Extension(c).setterWithClosure = -8);
+  expect(8, cn?.field);
+
+  c.nullableField = null;
+  c.simpleNullableSetter ??= 1;
+  expect(1, c.nullableField);
+  expect(1, c.simpleNullableSetter ??= 2);
+  c.nullableField = null;
+  expect(2, c.simpleNullableSetter ??= 2);
+
+  cn?.nullableField = null;
+  cn?.simpleNullableSetter ??= 1;
+  expect(1, cn?.nullableField);
+  expect(1, cn?.simpleNullableSetter ??= 2);
+  cn?.nullableField = null;
+  expect(2, cn?.simpleNullableSetter ??= 2);
+
+  new Class(-1).testInternal();
+
+  GenericClass<int> genericClass = new GenericClass<int>();
+  expect(1, GenericExtension(genericClass).setter = 1);
+}
+
+expect(expected, actual) {
+  if (expected != actual) {
+    throw 'Mismatch: expected=$expected, actual=$actual';
+  }
+}
diff --git a/pkg/front_end/testcases/extensions/extension_setter2.dart.textual_outline.expect b/pkg/front_end/testcases/extensions/extension_setter2.dart.textual_outline.expect
new file mode 100644
index 0000000..d0e8485
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/extension_setter2.dart.textual_outline.expect
@@ -0,0 +1,29 @@
+class Class {
+  int field;
+  int? nullableField;
+  Class(this.field);
+}
+
+extension Extension on Class {
+  int get simpleSetter => field;
+  set simpleSetter(int value) {}
+  int? get simpleNullableSetter => nullableField;
+  set simpleNullableSetter(int? value) {}
+  int get mutatingSetter => field;
+  set mutatingSetter(int value) {}
+  int get setterWithReturn => field;
+  set setterWithReturn(int value) {}
+  int get setterWithClosure => field;
+  set setterWithClosure(int value) {}
+  testInternal() {}
+}
+
+class GenericClass<T> {}
+
+extension GenericExtension<T> on GenericClass<T> {
+  set setter(T value) {}
+}
+
+main() {}
+test(Class c, Class? cn) {}
+expect(expected, actual) {}
diff --git a/pkg/front_end/testcases/extensions/extension_setter2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/extensions/extension_setter2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..3b3923ee
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/extension_setter2.dart.textual_outline_modelled.expect
@@ -0,0 +1,30 @@
+class Class {
+  Class(this.field);
+  int? nullableField;
+  int field;
+}
+
+class GenericClass<T> {}
+
+expect(expected, actual) {}
+
+extension Extension on Class {
+  int? get simpleNullableSetter => nullableField;
+  int get mutatingSetter => field;
+  int get setterWithClosure => field;
+  int get setterWithReturn => field;
+  int get simpleSetter => field;
+  set mutatingSetter(int value) {}
+  set setterWithClosure(int value) {}
+  set setterWithReturn(int value) {}
+  set simpleNullableSetter(int? value) {}
+  set simpleSetter(int value) {}
+  testInternal() {}
+}
+
+extension GenericExtension<T> on GenericClass<T> {
+  set setter(T value) {}
+}
+
+main() {}
+test(Class c, Class? cn) {}
diff --git a/pkg/front_end/testcases/extensions/extension_setter2.dart.weak.expect b/pkg/front_end/testcases/extensions/extension_setter2.dart.weak.expect
new file mode 100644
index 0000000..e483e9c
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/extension_setter2.dart.weak.expect
@@ -0,0 +1,214 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  field core::int field;
+  field core::int? nullableField = null;
+  constructor •(core::int field) → self::Class
+    : self::Class::field = field, super core::Object::•()
+    ;
+}
+class GenericClass<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::GenericClass<self::GenericClass::T%>
+    : super core::Object::•()
+    ;
+}
+extension Extension on self::Class {
+  get simpleSetter = self::Extension|get#simpleSetter;
+  get simpleNullableSetter = self::Extension|get#simpleNullableSetter;
+  get mutatingSetter = self::Extension|get#mutatingSetter;
+  get setterWithReturn = self::Extension|get#setterWithReturn;
+  get setterWithClosure = self::Extension|get#setterWithClosure;
+  method testInternal = self::Extension|testInternal;
+  tearoff testInternal = self::Extension|get#testInternal;
+  set simpleSetter = self::Extension|set#simpleSetter;
+  set simpleNullableSetter = self::Extension|set#simpleNullableSetter;
+  set mutatingSetter = self::Extension|set#mutatingSetter;
+  set setterWithReturn = self::Extension|set#setterWithReturn;
+  set setterWithClosure = self::Extension|set#setterWithClosure;
+}
+extension GenericExtension<T extends core::Object? = dynamic> on self::GenericClass<T%> {
+  set setter = self::GenericExtension|set#setter;
+}
+static method Extension|get#simpleSetter(lowered final self::Class #this) → core::int
+  return #this.{self::Class::field}{core::int};
+static method Extension|set#simpleSetter(lowered final self::Class #this, core::int value) → void {
+  #this.{self::Class::field} = value;
+}
+static method Extension|get#simpleNullableSetter(lowered final self::Class #this) → core::int?
+  return #this.{self::Class::nullableField}{core::int?};
+static method Extension|set#simpleNullableSetter(lowered final self::Class #this, core::int? value) → void {
+  #this.{self::Class::nullableField} = value;
+}
+static method Extension|get#mutatingSetter(lowered final self::Class #this) → core::int
+  return #this.{self::Class::field}{core::int};
+static method Extension|set#mutatingSetter(lowered final self::Class #this, core::int value) → void {
+  value = value.{core::num::+}(1){(core::num) → core::int};
+  #this.{self::Class::field} = value;
+}
+static method Extension|get#setterWithReturn(lowered final self::Class #this) → core::int
+  return #this.{self::Class::field}{core::int};
+static method Extension|set#setterWithReturn(lowered final self::Class #this, core::int value) → void {
+  if(value.{core::num::<}(0){(core::num) → core::bool}) {
+    #this.{self::Class::field} = value.{core::int::unary-}(){() → core::int};
+    return;
+  }
+  #this.{self::Class::field} = value;
+}
+static method Extension|get#setterWithClosure(lowered final self::Class #this) → core::int
+  return #this.{self::Class::field}{core::int};
+static method Extension|set#setterWithClosure(lowered final self::Class #this, core::int value) → void {
+  function abs(dynamic value) → dynamic {
+    return value{dynamic}.<(0) as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool ?{dynamic} value{dynamic}.unary-() : value;
+  }
+  #this.{self::Class::field} = abs(value){(dynamic) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+}
+static method Extension|testInternal(lowered final self::Class #this) → dynamic {
+  self::expect(1.{core::int::unary-}(){() → core::int}, #this.{self::Class::field}{core::int});
+  self::Extension|set#simpleSetter(#this, 0);
+  self::expect(0, #this.{self::Class::field}{core::int});
+  self::expect(1, let final core::int #t1 = 1 in let final void #t2 = self::Extension|set#simpleSetter(#this, #t1) in #t1);
+  self::Extension|set#mutatingSetter(#this, 0);
+  self::expect(1, #this.{self::Class::field}{core::int});
+  self::expect(2, let final core::int #t3 = 2 in let final void #t4 = self::Extension|set#mutatingSetter(#this, #t3) in #t3);
+  self::expect(3, #this.{self::Class::field}{core::int});
+  self::Extension|set#setterWithReturn(#this, 1);
+  self::expect(1, #this.{self::Class::field}{core::int});
+  self::Extension|set#setterWithReturn(#this, 2.{core::int::unary-}(){() → core::int});
+  self::expect(2, #this.{self::Class::field}{core::int});
+  self::expect(3, let final core::int #t5 = 3 in let final void #t6 = self::Extension|set#setterWithReturn(#this, #t5) in #t5);
+  self::expect(3, #this.{self::Class::field}{core::int});
+  self::expect(4.{core::int::unary-}(){() → core::int}, let final core::int #t7 = 4.{core::int::unary-}(){() → core::int} in let final void #t8 = self::Extension|set#setterWithReturn(#this, #t7) in #t7);
+  self::expect(4, #this.{self::Class::field}{core::int});
+  self::Extension|set#setterWithClosure(#this, 1);
+  self::expect(1, #this.{self::Class::field}{core::int});
+  self::Extension|set#setterWithClosure(#this, 2.{core::int::unary-}(){() → core::int});
+  self::expect(2, #this.{self::Class::field}{core::int});
+  self::expect(3, let final core::int #t9 = 3 in let final void #t10 = self::Extension|set#setterWithClosure(#this, #t9) in #t9);
+  self::expect(3, #this.{self::Class::field}{core::int});
+  self::expect(4.{core::int::unary-}(){() → core::int}, let final core::int #t11 = 4.{core::int::unary-}(){() → core::int} in let final void #t12 = self::Extension|set#setterWithClosure(#this, #t11) in #t11);
+  self::expect(4, #this.{self::Class::field}{core::int});
+}
+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>(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::•(1.{core::int::unary-}(){() → core::int});
+  self::test(c, c);
+}
+static method test(self::Class c, self::Class? cn) → dynamic {
+  self::expect(1.{core::int::unary-}(){() → core::int}, c.{self::Class::field}{core::int});
+  self::Extension|set#simpleSetter(c, 0);
+  self::expect(0, c.{self::Class::field}{core::int});
+  self::expect(1, let final core::int #t13 = 1 in let final void #t14 = self::Extension|set#simpleSetter(c, #t13) in #t13);
+  self::Extension|set#simpleSetter(c, 2);
+  self::expect(2, c.{self::Class::field}{core::int});
+  self::expect(3, let final self::Class #t15 = c in let final core::int #t16 = 3 in let final void #t17 = self::Extension|set#simpleSetter(#t15, #t16) in #t16);
+  self::Extension|set#mutatingSetter(c, 0);
+  self::expect(1, c.{self::Class::field}{core::int});
+  self::expect(2, let final core::int #t18 = 2 in let final void #t19 = self::Extension|set#mutatingSetter(c, #t18) in #t18);
+  self::expect(3, c.{self::Class::field}{core::int});
+  self::Extension|set#mutatingSetter(c, 4);
+  self::expect(5, c.{self::Class::field}{core::int});
+  self::expect(6, let final self::Class #t20 = c in let final core::int #t21 = 6 in let final void #t22 = self::Extension|set#mutatingSetter(#t20, #t21) in #t21);
+  self::expect(7, c.{self::Class::field}{core::int});
+  self::Extension|set#setterWithReturn(c, 1);
+  self::expect(1, c.{self::Class::field}{core::int});
+  self::Extension|set#setterWithReturn(c, 2.{core::int::unary-}(){() → core::int});
+  self::expect(2, c.{self::Class::field}{core::int});
+  self::expect(3, let final core::int #t23 = 3 in let final void #t24 = self::Extension|set#setterWithReturn(c, #t23) in #t23);
+  self::expect(3, c.{self::Class::field}{core::int});
+  self::expect(4.{core::int::unary-}(){() → core::int}, let final core::int #t25 = 4.{core::int::unary-}(){() → core::int} in let final void #t26 = self::Extension|set#setterWithReturn(c, #t25) in #t25);
+  self::expect(4, c.{self::Class::field}{core::int});
+  self::Extension|set#setterWithReturn(c, 5);
+  self::expect(5, c.{self::Class::field}{core::int});
+  self::Extension|set#setterWithReturn(c, 6.{core::int::unary-}(){() → core::int});
+  self::expect(6, c.{self::Class::field}{core::int});
+  self::expect(7, let final self::Class #t27 = c in let final core::int #t28 = 7 in let final void #t29 = self::Extension|set#setterWithReturn(#t27, #t28) in #t28);
+  self::expect(7, c.{self::Class::field}{core::int});
+  self::expect(8.{core::int::unary-}(){() → core::int}, let final self::Class #t30 = c in let final core::int #t31 = 8.{core::int::unary-}(){() → core::int} in let final void #t32 = self::Extension|set#setterWithReturn(#t30, #t31) in #t31);
+  self::expect(8, c.{self::Class::field}{core::int});
+  self::Extension|set#setterWithClosure(c, 1);
+  self::expect(1, c.{self::Class::field}{core::int});
+  self::Extension|set#setterWithClosure(c, 2.{core::int::unary-}(){() → core::int});
+  self::expect(2, c.{self::Class::field}{core::int});
+  self::expect(3, let final core::int #t33 = 3 in let final void #t34 = self::Extension|set#setterWithClosure(c, #t33) in #t33);
+  self::expect(3, c.{self::Class::field}{core::int});
+  self::expect(4.{core::int::unary-}(){() → core::int}, let final core::int #t35 = 4.{core::int::unary-}(){() → core::int} in let final void #t36 = self::Extension|set#setterWithClosure(c, #t35) in #t35);
+  self::expect(4, c.{self::Class::field}{core::int});
+  self::Extension|set#setterWithClosure(c, 5);
+  self::expect(5, c.{self::Class::field}{core::int});
+  self::Extension|set#setterWithClosure(c, 6.{core::int::unary-}(){() → core::int});
+  self::expect(6, c.{self::Class::field}{core::int});
+  self::expect(7, let final self::Class #t37 = c in let final core::int #t38 = 7 in let final void #t39 = self::Extension|set#setterWithClosure(#t37, #t38) in #t38);
+  self::expect(7, c.{self::Class::field}{core::int});
+  self::expect(8.{core::int::unary-}(){() → core::int}, let final self::Class #t40 = c in let final core::int #t41 = 8.{core::int::unary-}(){() → core::int} in let final void #t42 = self::Extension|set#setterWithClosure(#t40, #t41) in #t41);
+  self::expect(8, c.{self::Class::field}{core::int});
+  self::Extension|set#simpleSetter(c, 0);
+  self::expect(0, let final self::Class? #t43 = cn in #t43 == null ?{core::int?} null : #t43{self::Class}.{self::Class::field}{core::int});
+  self::expect(1, let final self::Class? #t44 = cn in #t44 == null ?{core::int?} null : let final core::int #t45 = 1 in let final void #t46 = self::Extension|set#simpleSetter(#t44{self::Class}, #t45) in #t45);
+  self::Extension|set#simpleSetter(c, 2);
+  self::expect(2, let final self::Class? #t47 = cn in #t47 == null ?{core::int?} null : #t47{self::Class}.{self::Class::field}{core::int});
+  self::expect(3, let final self::Class #t48 = c in let final core::int #t49 = 3 in let final void #t50 = self::Extension|set#simpleSetter(#t48, #t49) in #t49);
+  self::Extension|set#mutatingSetter(c, 0);
+  self::expect(1, let final self::Class? #t51 = cn in #t51 == null ?{core::int?} null : #t51{self::Class}.{self::Class::field}{core::int});
+  self::expect(2, let final self::Class? #t52 = cn in #t52 == null ?{core::int?} null : let final core::int #t53 = 2 in let final void #t54 = self::Extension|set#mutatingSetter(#t52{self::Class}, #t53) in #t53);
+  self::expect(3, let final self::Class? #t55 = cn in #t55 == null ?{core::int?} null : #t55{self::Class}.{self::Class::field}{core::int});
+  self::Extension|set#mutatingSetter(c, 4);
+  self::expect(5, let final self::Class? #t56 = cn in #t56 == null ?{core::int?} null : #t56{self::Class}.{self::Class::field}{core::int});
+  self::expect(6, let final self::Class #t57 = c in let final core::int #t58 = 6 in let final void #t59 = self::Extension|set#mutatingSetter(#t57, #t58) in #t58);
+  self::expect(7, let final self::Class? #t60 = cn in #t60 == null ?{core::int?} null : #t60{self::Class}.{self::Class::field}{core::int});
+  let final self::Class? #t61 = cn in #t61 == null ?{core::int?} null : self::Extension|set#setterWithReturn(#t61{self::Class}, 1);
+  self::expect(1, let final self::Class? #t62 = cn in #t62 == null ?{core::int?} null : #t62{self::Class}.{self::Class::field}{core::int});
+  let final self::Class? #t63 = cn in #t63 == null ?{core::int?} null : self::Extension|set#setterWithReturn(#t63{self::Class}, 2.{core::int::unary-}(){() → core::int});
+  self::expect(2, let final self::Class? #t64 = cn in #t64 == null ?{core::int?} null : #t64{self::Class}.{self::Class::field}{core::int});
+  self::expect(3, let final self::Class? #t65 = cn in #t65 == null ?{core::int?} null : let final core::int #t66 = 3 in let final void #t67 = self::Extension|set#setterWithReturn(#t65{self::Class}, #t66) in #t66);
+  self::expect(3, let final self::Class? #t68 = cn in #t68 == null ?{core::int?} null : #t68{self::Class}.{self::Class::field}{core::int});
+  self::expect(4.{core::int::unary-}(){() → core::int}, let final self::Class? #t69 = cn in #t69 == null ?{core::int?} null : let final core::int #t70 = 4.{core::int::unary-}(){() → core::int} in let final void #t71 = self::Extension|set#setterWithReturn(#t69{self::Class}, #t70) in #t70);
+  self::expect(4, let final self::Class? #t72 = cn in #t72 == null ?{core::int?} null : #t72{self::Class}.{self::Class::field}{core::int});
+  self::Extension|set#setterWithReturn(c, 5);
+  self::expect(5, let final self::Class? #t73 = cn in #t73 == null ?{core::int?} null : #t73{self::Class}.{self::Class::field}{core::int});
+  self::Extension|set#setterWithReturn(c, 6.{core::int::unary-}(){() → core::int});
+  self::expect(6, let final self::Class? #t74 = cn in #t74 == null ?{core::int?} null : #t74{self::Class}.{self::Class::field}{core::int});
+  self::expect(7, let final self::Class #t75 = c in let final core::int #t76 = 7 in let final void #t77 = self::Extension|set#setterWithReturn(#t75, #t76) in #t76);
+  self::expect(7, let final self::Class? #t78 = cn in #t78 == null ?{core::int?} null : #t78{self::Class}.{self::Class::field}{core::int});
+  self::expect(8.{core::int::unary-}(){() → core::int}, let final self::Class #t79 = c in let final core::int #t80 = 8.{core::int::unary-}(){() → core::int} in let final void #t81 = self::Extension|set#setterWithReturn(#t79, #t80) in #t80);
+  self::expect(8, let final self::Class? #t82 = cn in #t82 == null ?{core::int?} null : #t82{self::Class}.{self::Class::field}{core::int});
+  let final self::Class? #t83 = cn in #t83 == null ?{core::int?} null : self::Extension|set#setterWithClosure(#t83{self::Class}, 1);
+  self::expect(1, let final self::Class? #t84 = cn in #t84 == null ?{core::int?} null : #t84{self::Class}.{self::Class::field}{core::int});
+  let final self::Class? #t85 = cn in #t85 == null ?{core::int?} null : self::Extension|set#setterWithClosure(#t85{self::Class}, 2.{core::int::unary-}(){() → core::int});
+  self::expect(2, let final self::Class? #t86 = cn in #t86 == null ?{core::int?} null : #t86{self::Class}.{self::Class::field}{core::int});
+  self::expect(3, let final self::Class? #t87 = cn in #t87 == null ?{core::int?} null : let final core::int #t88 = 3 in let final void #t89 = self::Extension|set#setterWithClosure(#t87{self::Class}, #t88) in #t88);
+  self::expect(3, let final self::Class? #t90 = cn in #t90 == null ?{core::int?} null : #t90{self::Class}.{self::Class::field}{core::int});
+  self::expect(4.{core::int::unary-}(){() → core::int}, let final self::Class? #t91 = cn in #t91 == null ?{core::int?} null : let final core::int #t92 = 4.{core::int::unary-}(){() → core::int} in let final void #t93 = self::Extension|set#setterWithClosure(#t91{self::Class}, #t92) in #t92);
+  self::expect(4, let final self::Class? #t94 = cn in #t94 == null ?{core::int?} null : #t94{self::Class}.{self::Class::field}{core::int});
+  self::Extension|set#setterWithClosure(c, 5);
+  self::expect(5, let final self::Class? #t95 = cn in #t95 == null ?{core::int?} null : #t95{self::Class}.{self::Class::field}{core::int});
+  self::Extension|set#setterWithClosure(c, 6.{core::int::unary-}(){() → core::int});
+  self::expect(6, let final self::Class? #t96 = cn in #t96 == null ?{core::int?} null : #t96{self::Class}.{self::Class::field}{core::int});
+  self::expect(7, let final self::Class #t97 = c in let final core::int #t98 = 7 in let final void #t99 = self::Extension|set#setterWithClosure(#t97, #t98) in #t98);
+  self::expect(7, let final self::Class? #t100 = cn in #t100 == null ?{core::int?} null : #t100{self::Class}.{self::Class::field}{core::int});
+  self::expect(8.{core::int::unary-}(){() → core::int}, let final self::Class #t101 = c in let final core::int #t102 = 8.{core::int::unary-}(){() → core::int} in let final void #t103 = self::Extension|set#setterWithClosure(#t101, #t102) in #t102);
+  self::expect(8, let final self::Class? #t104 = cn in #t104 == null ?{core::int?} null : #t104{self::Class}.{self::Class::field}{core::int});
+  c.{self::Class::nullableField} = null;
+  let final self::Class #t105 = c in self::Extension|get#simpleNullableSetter(#t105) == null ?{core::int} self::Extension|set#simpleNullableSetter(#t105, 1) : null;
+  self::expect(1, c.{self::Class::nullableField}{core::int?});
+  self::expect(1, let final self::Class #t106 = c in let final core::int? #t107 = self::Extension|get#simpleNullableSetter(#t106) in #t107 == null ?{core::int} let final core::int #t108 = 2 in let final void #t109 = self::Extension|set#simpleNullableSetter(#t106, #t108) in #t108 : #t107{core::int});
+  c.{self::Class::nullableField} = null;
+  self::expect(2, let final self::Class #t110 = c in let final core::int? #t111 = self::Extension|get#simpleNullableSetter(#t110) in #t111 == null ?{core::int} let final core::int #t112 = 2 in let final void #t113 = self::Extension|set#simpleNullableSetter(#t110, #t112) in #t112 : #t111{core::int});
+  let final self::Class? #t114 = cn in #t114 == null ?{Null} null : #t114{self::Class}.{self::Class::nullableField} = null;
+  let final self::Class? #t115 = cn in #t115 == null ?{core::int?} null : self::Extension|get#simpleNullableSetter(#t115) == null ?{core::int} self::Extension|set#simpleNullableSetter(#t115, 1) : null;
+  self::expect(1, let final self::Class? #t116 = cn in #t116 == null ?{core::int?} null : #t116{self::Class}.{self::Class::nullableField}{core::int?});
+  self::expect(1, let final self::Class? #t117 = cn in #t117 == null ?{core::int?} null : let final core::int? #t118 = self::Extension|get#simpleNullableSetter(#t117) in #t118 == null ?{core::int} let final core::int #t119 = 2 in let final void #t120 = self::Extension|set#simpleNullableSetter(#t117, #t119) in #t119 : #t118{core::int});
+  let final self::Class? #t121 = cn in #t121 == null ?{Null} null : #t121{self::Class}.{self::Class::nullableField} = null;
+  self::expect(2, let final self::Class? #t122 = cn in #t122 == null ?{core::int?} null : let final core::int? #t123 = self::Extension|get#simpleNullableSetter(#t122) in #t123 == null ?{core::int} let final core::int #t124 = 2 in let final void #t125 = self::Extension|set#simpleNullableSetter(#t122, #t124) in #t124 : #t123{core::int});
+  self::Extension|testInternal(new self::Class::•(1.{core::int::unary-}(){() → core::int}));
+  self::GenericClass<core::int> genericClass = new self::GenericClass::•<core::int>();
+  self::expect(1, let final self::GenericClass<core::int> #t126 = genericClass in let final core::int #t127 = 1 in let final void #t128 = self::GenericExtension|set#setter<core::int>(#t126, #t127) in #t127);
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual)) {
+    throw "Mismatch: expected=${expected}, actual=${actual}";
+  }
+}
diff --git a/pkg/front_end/testcases/extensions/extension_setter2.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/extension_setter2.dart.weak.modular.expect
new file mode 100644
index 0000000..e483e9c
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/extension_setter2.dart.weak.modular.expect
@@ -0,0 +1,214 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  field core::int field;
+  field core::int? nullableField = null;
+  constructor •(core::int field) → self::Class
+    : self::Class::field = field, super core::Object::•()
+    ;
+}
+class GenericClass<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::GenericClass<self::GenericClass::T%>
+    : super core::Object::•()
+    ;
+}
+extension Extension on self::Class {
+  get simpleSetter = self::Extension|get#simpleSetter;
+  get simpleNullableSetter = self::Extension|get#simpleNullableSetter;
+  get mutatingSetter = self::Extension|get#mutatingSetter;
+  get setterWithReturn = self::Extension|get#setterWithReturn;
+  get setterWithClosure = self::Extension|get#setterWithClosure;
+  method testInternal = self::Extension|testInternal;
+  tearoff testInternal = self::Extension|get#testInternal;
+  set simpleSetter = self::Extension|set#simpleSetter;
+  set simpleNullableSetter = self::Extension|set#simpleNullableSetter;
+  set mutatingSetter = self::Extension|set#mutatingSetter;
+  set setterWithReturn = self::Extension|set#setterWithReturn;
+  set setterWithClosure = self::Extension|set#setterWithClosure;
+}
+extension GenericExtension<T extends core::Object? = dynamic> on self::GenericClass<T%> {
+  set setter = self::GenericExtension|set#setter;
+}
+static method Extension|get#simpleSetter(lowered final self::Class #this) → core::int
+  return #this.{self::Class::field}{core::int};
+static method Extension|set#simpleSetter(lowered final self::Class #this, core::int value) → void {
+  #this.{self::Class::field} = value;
+}
+static method Extension|get#simpleNullableSetter(lowered final self::Class #this) → core::int?
+  return #this.{self::Class::nullableField}{core::int?};
+static method Extension|set#simpleNullableSetter(lowered final self::Class #this, core::int? value) → void {
+  #this.{self::Class::nullableField} = value;
+}
+static method Extension|get#mutatingSetter(lowered final self::Class #this) → core::int
+  return #this.{self::Class::field}{core::int};
+static method Extension|set#mutatingSetter(lowered final self::Class #this, core::int value) → void {
+  value = value.{core::num::+}(1){(core::num) → core::int};
+  #this.{self::Class::field} = value;
+}
+static method Extension|get#setterWithReturn(lowered final self::Class #this) → core::int
+  return #this.{self::Class::field}{core::int};
+static method Extension|set#setterWithReturn(lowered final self::Class #this, core::int value) → void {
+  if(value.{core::num::<}(0){(core::num) → core::bool}) {
+    #this.{self::Class::field} = value.{core::int::unary-}(){() → core::int};
+    return;
+  }
+  #this.{self::Class::field} = value;
+}
+static method Extension|get#setterWithClosure(lowered final self::Class #this) → core::int
+  return #this.{self::Class::field}{core::int};
+static method Extension|set#setterWithClosure(lowered final self::Class #this, core::int value) → void {
+  function abs(dynamic value) → dynamic {
+    return value{dynamic}.<(0) as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool ?{dynamic} value{dynamic}.unary-() : value;
+  }
+  #this.{self::Class::field} = abs(value){(dynamic) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+}
+static method Extension|testInternal(lowered final self::Class #this) → dynamic {
+  self::expect(1.{core::int::unary-}(){() → core::int}, #this.{self::Class::field}{core::int});
+  self::Extension|set#simpleSetter(#this, 0);
+  self::expect(0, #this.{self::Class::field}{core::int});
+  self::expect(1, let final core::int #t1 = 1 in let final void #t2 = self::Extension|set#simpleSetter(#this, #t1) in #t1);
+  self::Extension|set#mutatingSetter(#this, 0);
+  self::expect(1, #this.{self::Class::field}{core::int});
+  self::expect(2, let final core::int #t3 = 2 in let final void #t4 = self::Extension|set#mutatingSetter(#this, #t3) in #t3);
+  self::expect(3, #this.{self::Class::field}{core::int});
+  self::Extension|set#setterWithReturn(#this, 1);
+  self::expect(1, #this.{self::Class::field}{core::int});
+  self::Extension|set#setterWithReturn(#this, 2.{core::int::unary-}(){() → core::int});
+  self::expect(2, #this.{self::Class::field}{core::int});
+  self::expect(3, let final core::int #t5 = 3 in let final void #t6 = self::Extension|set#setterWithReturn(#this, #t5) in #t5);
+  self::expect(3, #this.{self::Class::field}{core::int});
+  self::expect(4.{core::int::unary-}(){() → core::int}, let final core::int #t7 = 4.{core::int::unary-}(){() → core::int} in let final void #t8 = self::Extension|set#setterWithReturn(#this, #t7) in #t7);
+  self::expect(4, #this.{self::Class::field}{core::int});
+  self::Extension|set#setterWithClosure(#this, 1);
+  self::expect(1, #this.{self::Class::field}{core::int});
+  self::Extension|set#setterWithClosure(#this, 2.{core::int::unary-}(){() → core::int});
+  self::expect(2, #this.{self::Class::field}{core::int});
+  self::expect(3, let final core::int #t9 = 3 in let final void #t10 = self::Extension|set#setterWithClosure(#this, #t9) in #t9);
+  self::expect(3, #this.{self::Class::field}{core::int});
+  self::expect(4.{core::int::unary-}(){() → core::int}, let final core::int #t11 = 4.{core::int::unary-}(){() → core::int} in let final void #t12 = self::Extension|set#setterWithClosure(#this, #t11) in #t11);
+  self::expect(4, #this.{self::Class::field}{core::int});
+}
+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>(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::•(1.{core::int::unary-}(){() → core::int});
+  self::test(c, c);
+}
+static method test(self::Class c, self::Class? cn) → dynamic {
+  self::expect(1.{core::int::unary-}(){() → core::int}, c.{self::Class::field}{core::int});
+  self::Extension|set#simpleSetter(c, 0);
+  self::expect(0, c.{self::Class::field}{core::int});
+  self::expect(1, let final core::int #t13 = 1 in let final void #t14 = self::Extension|set#simpleSetter(c, #t13) in #t13);
+  self::Extension|set#simpleSetter(c, 2);
+  self::expect(2, c.{self::Class::field}{core::int});
+  self::expect(3, let final self::Class #t15 = c in let final core::int #t16 = 3 in let final void #t17 = self::Extension|set#simpleSetter(#t15, #t16) in #t16);
+  self::Extension|set#mutatingSetter(c, 0);
+  self::expect(1, c.{self::Class::field}{core::int});
+  self::expect(2, let final core::int #t18 = 2 in let final void #t19 = self::Extension|set#mutatingSetter(c, #t18) in #t18);
+  self::expect(3, c.{self::Class::field}{core::int});
+  self::Extension|set#mutatingSetter(c, 4);
+  self::expect(5, c.{self::Class::field}{core::int});
+  self::expect(6, let final self::Class #t20 = c in let final core::int #t21 = 6 in let final void #t22 = self::Extension|set#mutatingSetter(#t20, #t21) in #t21);
+  self::expect(7, c.{self::Class::field}{core::int});
+  self::Extension|set#setterWithReturn(c, 1);
+  self::expect(1, c.{self::Class::field}{core::int});
+  self::Extension|set#setterWithReturn(c, 2.{core::int::unary-}(){() → core::int});
+  self::expect(2, c.{self::Class::field}{core::int});
+  self::expect(3, let final core::int #t23 = 3 in let final void #t24 = self::Extension|set#setterWithReturn(c, #t23) in #t23);
+  self::expect(3, c.{self::Class::field}{core::int});
+  self::expect(4.{core::int::unary-}(){() → core::int}, let final core::int #t25 = 4.{core::int::unary-}(){() → core::int} in let final void #t26 = self::Extension|set#setterWithReturn(c, #t25) in #t25);
+  self::expect(4, c.{self::Class::field}{core::int});
+  self::Extension|set#setterWithReturn(c, 5);
+  self::expect(5, c.{self::Class::field}{core::int});
+  self::Extension|set#setterWithReturn(c, 6.{core::int::unary-}(){() → core::int});
+  self::expect(6, c.{self::Class::field}{core::int});
+  self::expect(7, let final self::Class #t27 = c in let final core::int #t28 = 7 in let final void #t29 = self::Extension|set#setterWithReturn(#t27, #t28) in #t28);
+  self::expect(7, c.{self::Class::field}{core::int});
+  self::expect(8.{core::int::unary-}(){() → core::int}, let final self::Class #t30 = c in let final core::int #t31 = 8.{core::int::unary-}(){() → core::int} in let final void #t32 = self::Extension|set#setterWithReturn(#t30, #t31) in #t31);
+  self::expect(8, c.{self::Class::field}{core::int});
+  self::Extension|set#setterWithClosure(c, 1);
+  self::expect(1, c.{self::Class::field}{core::int});
+  self::Extension|set#setterWithClosure(c, 2.{core::int::unary-}(){() → core::int});
+  self::expect(2, c.{self::Class::field}{core::int});
+  self::expect(3, let final core::int #t33 = 3 in let final void #t34 = self::Extension|set#setterWithClosure(c, #t33) in #t33);
+  self::expect(3, c.{self::Class::field}{core::int});
+  self::expect(4.{core::int::unary-}(){() → core::int}, let final core::int #t35 = 4.{core::int::unary-}(){() → core::int} in let final void #t36 = self::Extension|set#setterWithClosure(c, #t35) in #t35);
+  self::expect(4, c.{self::Class::field}{core::int});
+  self::Extension|set#setterWithClosure(c, 5);
+  self::expect(5, c.{self::Class::field}{core::int});
+  self::Extension|set#setterWithClosure(c, 6.{core::int::unary-}(){() → core::int});
+  self::expect(6, c.{self::Class::field}{core::int});
+  self::expect(7, let final self::Class #t37 = c in let final core::int #t38 = 7 in let final void #t39 = self::Extension|set#setterWithClosure(#t37, #t38) in #t38);
+  self::expect(7, c.{self::Class::field}{core::int});
+  self::expect(8.{core::int::unary-}(){() → core::int}, let final self::Class #t40 = c in let final core::int #t41 = 8.{core::int::unary-}(){() → core::int} in let final void #t42 = self::Extension|set#setterWithClosure(#t40, #t41) in #t41);
+  self::expect(8, c.{self::Class::field}{core::int});
+  self::Extension|set#simpleSetter(c, 0);
+  self::expect(0, let final self::Class? #t43 = cn in #t43 == null ?{core::int?} null : #t43{self::Class}.{self::Class::field}{core::int});
+  self::expect(1, let final self::Class? #t44 = cn in #t44 == null ?{core::int?} null : let final core::int #t45 = 1 in let final void #t46 = self::Extension|set#simpleSetter(#t44{self::Class}, #t45) in #t45);
+  self::Extension|set#simpleSetter(c, 2);
+  self::expect(2, let final self::Class? #t47 = cn in #t47 == null ?{core::int?} null : #t47{self::Class}.{self::Class::field}{core::int});
+  self::expect(3, let final self::Class #t48 = c in let final core::int #t49 = 3 in let final void #t50 = self::Extension|set#simpleSetter(#t48, #t49) in #t49);
+  self::Extension|set#mutatingSetter(c, 0);
+  self::expect(1, let final self::Class? #t51 = cn in #t51 == null ?{core::int?} null : #t51{self::Class}.{self::Class::field}{core::int});
+  self::expect(2, let final self::Class? #t52 = cn in #t52 == null ?{core::int?} null : let final core::int #t53 = 2 in let final void #t54 = self::Extension|set#mutatingSetter(#t52{self::Class}, #t53) in #t53);
+  self::expect(3, let final self::Class? #t55 = cn in #t55 == null ?{core::int?} null : #t55{self::Class}.{self::Class::field}{core::int});
+  self::Extension|set#mutatingSetter(c, 4);
+  self::expect(5, let final self::Class? #t56 = cn in #t56 == null ?{core::int?} null : #t56{self::Class}.{self::Class::field}{core::int});
+  self::expect(6, let final self::Class #t57 = c in let final core::int #t58 = 6 in let final void #t59 = self::Extension|set#mutatingSetter(#t57, #t58) in #t58);
+  self::expect(7, let final self::Class? #t60 = cn in #t60 == null ?{core::int?} null : #t60{self::Class}.{self::Class::field}{core::int});
+  let final self::Class? #t61 = cn in #t61 == null ?{core::int?} null : self::Extension|set#setterWithReturn(#t61{self::Class}, 1);
+  self::expect(1, let final self::Class? #t62 = cn in #t62 == null ?{core::int?} null : #t62{self::Class}.{self::Class::field}{core::int});
+  let final self::Class? #t63 = cn in #t63 == null ?{core::int?} null : self::Extension|set#setterWithReturn(#t63{self::Class}, 2.{core::int::unary-}(){() → core::int});
+  self::expect(2, let final self::Class? #t64 = cn in #t64 == null ?{core::int?} null : #t64{self::Class}.{self::Class::field}{core::int});
+  self::expect(3, let final self::Class? #t65 = cn in #t65 == null ?{core::int?} null : let final core::int #t66 = 3 in let final void #t67 = self::Extension|set#setterWithReturn(#t65{self::Class}, #t66) in #t66);
+  self::expect(3, let final self::Class? #t68 = cn in #t68 == null ?{core::int?} null : #t68{self::Class}.{self::Class::field}{core::int});
+  self::expect(4.{core::int::unary-}(){() → core::int}, let final self::Class? #t69 = cn in #t69 == null ?{core::int?} null : let final core::int #t70 = 4.{core::int::unary-}(){() → core::int} in let final void #t71 = self::Extension|set#setterWithReturn(#t69{self::Class}, #t70) in #t70);
+  self::expect(4, let final self::Class? #t72 = cn in #t72 == null ?{core::int?} null : #t72{self::Class}.{self::Class::field}{core::int});
+  self::Extension|set#setterWithReturn(c, 5);
+  self::expect(5, let final self::Class? #t73 = cn in #t73 == null ?{core::int?} null : #t73{self::Class}.{self::Class::field}{core::int});
+  self::Extension|set#setterWithReturn(c, 6.{core::int::unary-}(){() → core::int});
+  self::expect(6, let final self::Class? #t74 = cn in #t74 == null ?{core::int?} null : #t74{self::Class}.{self::Class::field}{core::int});
+  self::expect(7, let final self::Class #t75 = c in let final core::int #t76 = 7 in let final void #t77 = self::Extension|set#setterWithReturn(#t75, #t76) in #t76);
+  self::expect(7, let final self::Class? #t78 = cn in #t78 == null ?{core::int?} null : #t78{self::Class}.{self::Class::field}{core::int});
+  self::expect(8.{core::int::unary-}(){() → core::int}, let final self::Class #t79 = c in let final core::int #t80 = 8.{core::int::unary-}(){() → core::int} in let final void #t81 = self::Extension|set#setterWithReturn(#t79, #t80) in #t80);
+  self::expect(8, let final self::Class? #t82 = cn in #t82 == null ?{core::int?} null : #t82{self::Class}.{self::Class::field}{core::int});
+  let final self::Class? #t83 = cn in #t83 == null ?{core::int?} null : self::Extension|set#setterWithClosure(#t83{self::Class}, 1);
+  self::expect(1, let final self::Class? #t84 = cn in #t84 == null ?{core::int?} null : #t84{self::Class}.{self::Class::field}{core::int});
+  let final self::Class? #t85 = cn in #t85 == null ?{core::int?} null : self::Extension|set#setterWithClosure(#t85{self::Class}, 2.{core::int::unary-}(){() → core::int});
+  self::expect(2, let final self::Class? #t86 = cn in #t86 == null ?{core::int?} null : #t86{self::Class}.{self::Class::field}{core::int});
+  self::expect(3, let final self::Class? #t87 = cn in #t87 == null ?{core::int?} null : let final core::int #t88 = 3 in let final void #t89 = self::Extension|set#setterWithClosure(#t87{self::Class}, #t88) in #t88);
+  self::expect(3, let final self::Class? #t90 = cn in #t90 == null ?{core::int?} null : #t90{self::Class}.{self::Class::field}{core::int});
+  self::expect(4.{core::int::unary-}(){() → core::int}, let final self::Class? #t91 = cn in #t91 == null ?{core::int?} null : let final core::int #t92 = 4.{core::int::unary-}(){() → core::int} in let final void #t93 = self::Extension|set#setterWithClosure(#t91{self::Class}, #t92) in #t92);
+  self::expect(4, let final self::Class? #t94 = cn in #t94 == null ?{core::int?} null : #t94{self::Class}.{self::Class::field}{core::int});
+  self::Extension|set#setterWithClosure(c, 5);
+  self::expect(5, let final self::Class? #t95 = cn in #t95 == null ?{core::int?} null : #t95{self::Class}.{self::Class::field}{core::int});
+  self::Extension|set#setterWithClosure(c, 6.{core::int::unary-}(){() → core::int});
+  self::expect(6, let final self::Class? #t96 = cn in #t96 == null ?{core::int?} null : #t96{self::Class}.{self::Class::field}{core::int});
+  self::expect(7, let final self::Class #t97 = c in let final core::int #t98 = 7 in let final void #t99 = self::Extension|set#setterWithClosure(#t97, #t98) in #t98);
+  self::expect(7, let final self::Class? #t100 = cn in #t100 == null ?{core::int?} null : #t100{self::Class}.{self::Class::field}{core::int});
+  self::expect(8.{core::int::unary-}(){() → core::int}, let final self::Class #t101 = c in let final core::int #t102 = 8.{core::int::unary-}(){() → core::int} in let final void #t103 = self::Extension|set#setterWithClosure(#t101, #t102) in #t102);
+  self::expect(8, let final self::Class? #t104 = cn in #t104 == null ?{core::int?} null : #t104{self::Class}.{self::Class::field}{core::int});
+  c.{self::Class::nullableField} = null;
+  let final self::Class #t105 = c in self::Extension|get#simpleNullableSetter(#t105) == null ?{core::int} self::Extension|set#simpleNullableSetter(#t105, 1) : null;
+  self::expect(1, c.{self::Class::nullableField}{core::int?});
+  self::expect(1, let final self::Class #t106 = c in let final core::int? #t107 = self::Extension|get#simpleNullableSetter(#t106) in #t107 == null ?{core::int} let final core::int #t108 = 2 in let final void #t109 = self::Extension|set#simpleNullableSetter(#t106, #t108) in #t108 : #t107{core::int});
+  c.{self::Class::nullableField} = null;
+  self::expect(2, let final self::Class #t110 = c in let final core::int? #t111 = self::Extension|get#simpleNullableSetter(#t110) in #t111 == null ?{core::int} let final core::int #t112 = 2 in let final void #t113 = self::Extension|set#simpleNullableSetter(#t110, #t112) in #t112 : #t111{core::int});
+  let final self::Class? #t114 = cn in #t114 == null ?{Null} null : #t114{self::Class}.{self::Class::nullableField} = null;
+  let final self::Class? #t115 = cn in #t115 == null ?{core::int?} null : self::Extension|get#simpleNullableSetter(#t115) == null ?{core::int} self::Extension|set#simpleNullableSetter(#t115, 1) : null;
+  self::expect(1, let final self::Class? #t116 = cn in #t116 == null ?{core::int?} null : #t116{self::Class}.{self::Class::nullableField}{core::int?});
+  self::expect(1, let final self::Class? #t117 = cn in #t117 == null ?{core::int?} null : let final core::int? #t118 = self::Extension|get#simpleNullableSetter(#t117) in #t118 == null ?{core::int} let final core::int #t119 = 2 in let final void #t120 = self::Extension|set#simpleNullableSetter(#t117, #t119) in #t119 : #t118{core::int});
+  let final self::Class? #t121 = cn in #t121 == null ?{Null} null : #t121{self::Class}.{self::Class::nullableField} = null;
+  self::expect(2, let final self::Class? #t122 = cn in #t122 == null ?{core::int?} null : let final core::int? #t123 = self::Extension|get#simpleNullableSetter(#t122) in #t123 == null ?{core::int} let final core::int #t124 = 2 in let final void #t125 = self::Extension|set#simpleNullableSetter(#t122, #t124) in #t124 : #t123{core::int});
+  self::Extension|testInternal(new self::Class::•(1.{core::int::unary-}(){() → core::int}));
+  self::GenericClass<core::int> genericClass = new self::GenericClass::•<core::int>();
+  self::expect(1, let final self::GenericClass<core::int> #t126 = genericClass in let final core::int #t127 = 1 in let final void #t128 = self::GenericExtension|set#setter<core::int>(#t126, #t127) in #t127);
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual)) {
+    throw "Mismatch: expected=${expected}, actual=${actual}";
+  }
+}
diff --git a/pkg/front_end/testcases/extensions/extension_setter2.dart.weak.outline.expect b/pkg/front_end/testcases/extensions/extension_setter2.dart.weak.outline.expect
new file mode 100644
index 0000000..6c50707
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/extension_setter2.dart.weak.outline.expect
@@ -0,0 +1,63 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  field core::int field;
+  field core::int? nullableField;
+  constructor •(core::int field) → self::Class
+    ;
+}
+class GenericClass<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::GenericClass<self::GenericClass::T%>
+    ;
+}
+extension Extension on self::Class {
+  get simpleSetter = self::Extension|get#simpleSetter;
+  get simpleNullableSetter = self::Extension|get#simpleNullableSetter;
+  get mutatingSetter = self::Extension|get#mutatingSetter;
+  get setterWithReturn = self::Extension|get#setterWithReturn;
+  get setterWithClosure = self::Extension|get#setterWithClosure;
+  method testInternal = self::Extension|testInternal;
+  tearoff testInternal = self::Extension|get#testInternal;
+  set simpleSetter = self::Extension|set#simpleSetter;
+  set simpleNullableSetter = self::Extension|set#simpleNullableSetter;
+  set mutatingSetter = self::Extension|set#mutatingSetter;
+  set setterWithReturn = self::Extension|set#setterWithReturn;
+  set setterWithClosure = self::Extension|set#setterWithClosure;
+}
+extension GenericExtension<T extends core::Object? = dynamic> on self::GenericClass<T%> {
+  set setter = self::GenericExtension|set#setter;
+}
+static method Extension|get#simpleSetter(lowered final self::Class #this) → core::int
+  ;
+static method Extension|set#simpleSetter(lowered final self::Class #this, core::int value) → void
+  ;
+static method Extension|get#simpleNullableSetter(lowered final self::Class #this) → core::int?
+  ;
+static method Extension|set#simpleNullableSetter(lowered final self::Class #this, core::int? value) → void
+  ;
+static method Extension|get#mutatingSetter(lowered final self::Class #this) → core::int
+  ;
+static method Extension|set#mutatingSetter(lowered final self::Class #this, core::int value) → void
+  ;
+static method Extension|get#setterWithReturn(lowered final self::Class #this) → core::int
+  ;
+static method Extension|set#setterWithReturn(lowered final self::Class #this, core::int value) → void
+  ;
+static method Extension|get#setterWithClosure(lowered final self::Class #this) → core::int
+  ;
+static method Extension|set#setterWithClosure(lowered final self::Class #this, core::int value) → void
+  ;
+static method Extension|testInternal(lowered 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>(lowered final self::GenericClass<self::GenericExtension|set#setter::T%> #this, self::GenericExtension|set#setter::T% value) → void
+  ;
+static method main() → dynamic
+  ;
+static method test(self::Class c, self::Class? cn) → dynamic
+  ;
+static method expect(dynamic expected, dynamic actual) → dynamic
+  ;
diff --git a/pkg/front_end/testcases/extensions/extension_setter2.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/extension_setter2.dart.weak.transformed.expect
new file mode 100644
index 0000000..651b8fc
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/extension_setter2.dart.weak.transformed.expect
@@ -0,0 +1,322 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  field core::int field;
+  field core::int? nullableField = null;
+  constructor •(core::int field) → self::Class
+    : self::Class::field = field, super core::Object::•()
+    ;
+}
+class GenericClass<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::GenericClass<self::GenericClass::T%>
+    : super core::Object::•()
+    ;
+}
+extension Extension on self::Class {
+  get simpleSetter = self::Extension|get#simpleSetter;
+  get simpleNullableSetter = self::Extension|get#simpleNullableSetter;
+  get mutatingSetter = self::Extension|get#mutatingSetter;
+  get setterWithReturn = self::Extension|get#setterWithReturn;
+  get setterWithClosure = self::Extension|get#setterWithClosure;
+  method testInternal = self::Extension|testInternal;
+  tearoff testInternal = self::Extension|get#testInternal;
+  set simpleSetter = self::Extension|set#simpleSetter;
+  set simpleNullableSetter = self::Extension|set#simpleNullableSetter;
+  set mutatingSetter = self::Extension|set#mutatingSetter;
+  set setterWithReturn = self::Extension|set#setterWithReturn;
+  set setterWithClosure = self::Extension|set#setterWithClosure;
+}
+extension GenericExtension<T extends core::Object? = dynamic> on self::GenericClass<T%> {
+  set setter = self::GenericExtension|set#setter;
+}
+static method Extension|get#simpleSetter(lowered final self::Class #this) → core::int
+  return #this.{self::Class::field}{core::int};
+static method Extension|set#simpleSetter(lowered final self::Class #this, core::int value) → void {
+  #this.{self::Class::field} = value;
+}
+static method Extension|get#simpleNullableSetter(lowered final self::Class #this) → core::int?
+  return #this.{self::Class::nullableField}{core::int?};
+static method Extension|set#simpleNullableSetter(lowered final self::Class #this, core::int? value) → void {
+  #this.{self::Class::nullableField} = value;
+}
+static method Extension|get#mutatingSetter(lowered final self::Class #this) → core::int
+  return #this.{self::Class::field}{core::int};
+static method Extension|set#mutatingSetter(lowered final self::Class #this, core::int value) → void {
+  value = value.{core::num::+}(1){(core::num) → core::int};
+  #this.{self::Class::field} = value;
+}
+static method Extension|get#setterWithReturn(lowered final self::Class #this) → core::int
+  return #this.{self::Class::field}{core::int};
+static method Extension|set#setterWithReturn(lowered final self::Class #this, core::int value) → void {
+  if(value.{core::num::<}(0){(core::num) → core::bool}) {
+    #this.{self::Class::field} = value.{core::int::unary-}(){() → core::int};
+    return;
+  }
+  #this.{self::Class::field} = value;
+}
+static method Extension|get#setterWithClosure(lowered final self::Class #this) → core::int
+  return #this.{self::Class::field}{core::int};
+static method Extension|set#setterWithClosure(lowered final self::Class #this, core::int value) → void {
+  function abs(dynamic value) → dynamic {
+    return value{dynamic}.<(0) as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool ?{dynamic} value{dynamic}.unary-() : value;
+  }
+  #this.{self::Class::field} = abs(value){(dynamic) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+}
+static method Extension|testInternal(lowered final self::Class #this) → dynamic {
+  self::expect(1.{core::int::unary-}(){() → core::int}, #this.{self::Class::field}{core::int});
+  self::Extension|set#simpleSetter(#this, 0);
+  self::expect(0, #this.{self::Class::field}{core::int});
+  self::expect(1, let final core::int #t1 = 1 in let final void #t2 = self::Extension|set#simpleSetter(#this, #t1) in #t1);
+  self::Extension|set#mutatingSetter(#this, 0);
+  self::expect(1, #this.{self::Class::field}{core::int});
+  self::expect(2, let final core::int #t3 = 2 in let final void #t4 = self::Extension|set#mutatingSetter(#this, #t3) in #t3);
+  self::expect(3, #this.{self::Class::field}{core::int});
+  self::Extension|set#setterWithReturn(#this, 1);
+  self::expect(1, #this.{self::Class::field}{core::int});
+  self::Extension|set#setterWithReturn(#this, 2.{core::int::unary-}(){() → core::int});
+  self::expect(2, #this.{self::Class::field}{core::int});
+  self::expect(3, let final core::int #t5 = 3 in let final void #t6 = self::Extension|set#setterWithReturn(#this, #t5) in #t5);
+  self::expect(3, #this.{self::Class::field}{core::int});
+  self::expect(4.{core::int::unary-}(){() → core::int}, let final core::int #t7 = 4.{core::int::unary-}(){() → core::int} in let final void #t8 = self::Extension|set#setterWithReturn(#this, #t7) in #t7);
+  self::expect(4, #this.{self::Class::field}{core::int});
+  self::Extension|set#setterWithClosure(#this, 1);
+  self::expect(1, #this.{self::Class::field}{core::int});
+  self::Extension|set#setterWithClosure(#this, 2.{core::int::unary-}(){() → core::int});
+  self::expect(2, #this.{self::Class::field}{core::int});
+  self::expect(3, let final core::int #t9 = 3 in let final void #t10 = self::Extension|set#setterWithClosure(#this, #t9) in #t9);
+  self::expect(3, #this.{self::Class::field}{core::int});
+  self::expect(4.{core::int::unary-}(){() → core::int}, let final core::int #t11 = 4.{core::int::unary-}(){() → core::int} in let final void #t12 = self::Extension|set#setterWithClosure(#this, #t11) in #t11);
+  self::expect(4, #this.{self::Class::field}{core::int});
+}
+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>(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::•(1.{core::int::unary-}(){() → core::int});
+  self::test(c, c);
+}
+static method test(self::Class c, self::Class? cn) → dynamic {
+  self::expect(1.{core::int::unary-}(){() → core::int}, c.{self::Class::field}{core::int});
+  self::Extension|set#simpleSetter(c, 0);
+  self::expect(0, c.{self::Class::field}{core::int});
+  self::expect(1, let final core::int #t13 = 1 in let final void #t14 = self::Extension|set#simpleSetter(c, #t13) in #t13);
+  self::Extension|set#simpleSetter(c, 2);
+  self::expect(2, c.{self::Class::field}{core::int});
+  self::expect(3, let final self::Class #t15 = c in let final core::int #t16 = 3 in let final void #t17 = self::Extension|set#simpleSetter(#t15, #t16) in #t16);
+  self::Extension|set#mutatingSetter(c, 0);
+  self::expect(1, c.{self::Class::field}{core::int});
+  self::expect(2, let final core::int #t18 = 2 in let final void #t19 = self::Extension|set#mutatingSetter(c, #t18) in #t18);
+  self::expect(3, c.{self::Class::field}{core::int});
+  self::Extension|set#mutatingSetter(c, 4);
+  self::expect(5, c.{self::Class::field}{core::int});
+  self::expect(6, let final self::Class #t20 = c in let final core::int #t21 = 6 in let final void #t22 = self::Extension|set#mutatingSetter(#t20, #t21) in #t21);
+  self::expect(7, c.{self::Class::field}{core::int});
+  self::Extension|set#setterWithReturn(c, 1);
+  self::expect(1, c.{self::Class::field}{core::int});
+  self::Extension|set#setterWithReturn(c, 2.{core::int::unary-}(){() → core::int});
+  self::expect(2, c.{self::Class::field}{core::int});
+  self::expect(3, let final core::int #t23 = 3 in let final void #t24 = self::Extension|set#setterWithReturn(c, #t23) in #t23);
+  self::expect(3, c.{self::Class::field}{core::int});
+  self::expect(4.{core::int::unary-}(){() → core::int}, let final core::int #t25 = 4.{core::int::unary-}(){() → core::int} in let final void #t26 = self::Extension|set#setterWithReturn(c, #t25) in #t25);
+  self::expect(4, c.{self::Class::field}{core::int});
+  self::Extension|set#setterWithReturn(c, 5);
+  self::expect(5, c.{self::Class::field}{core::int});
+  self::Extension|set#setterWithReturn(c, 6.{core::int::unary-}(){() → core::int});
+  self::expect(6, c.{self::Class::field}{core::int});
+  self::expect(7, let final self::Class #t27 = c in let final core::int #t28 = 7 in let final void #t29 = self::Extension|set#setterWithReturn(#t27, #t28) in #t28);
+  self::expect(7, c.{self::Class::field}{core::int});
+  self::expect(8.{core::int::unary-}(){() → core::int}, let final self::Class #t30 = c in let final core::int #t31 = 8.{core::int::unary-}(){() → core::int} in let final void #t32 = self::Extension|set#setterWithReturn(#t30, #t31) in #t31);
+  self::expect(8, c.{self::Class::field}{core::int});
+  self::Extension|set#setterWithClosure(c, 1);
+  self::expect(1, c.{self::Class::field}{core::int});
+  self::Extension|set#setterWithClosure(c, 2.{core::int::unary-}(){() → core::int});
+  self::expect(2, c.{self::Class::field}{core::int});
+  self::expect(3, let final core::int #t33 = 3 in let final void #t34 = self::Extension|set#setterWithClosure(c, #t33) in #t33);
+  self::expect(3, c.{self::Class::field}{core::int});
+  self::expect(4.{core::int::unary-}(){() → core::int}, let final core::int #t35 = 4.{core::int::unary-}(){() → core::int} in let final void #t36 = self::Extension|set#setterWithClosure(c, #t35) in #t35);
+  self::expect(4, c.{self::Class::field}{core::int});
+  self::Extension|set#setterWithClosure(c, 5);
+  self::expect(5, c.{self::Class::field}{core::int});
+  self::Extension|set#setterWithClosure(c, 6.{core::int::unary-}(){() → core::int});
+  self::expect(6, c.{self::Class::field}{core::int});
+  self::expect(7, let final self::Class #t37 = c in let final core::int #t38 = 7 in let final void #t39 = self::Extension|set#setterWithClosure(#t37, #t38) in #t38);
+  self::expect(7, c.{self::Class::field}{core::int});
+  self::expect(8.{core::int::unary-}(){() → core::int}, let final self::Class #t40 = c in let final core::int #t41 = 8.{core::int::unary-}(){() → core::int} in let final void #t42 = self::Extension|set#setterWithClosure(#t40, #t41) in #t41);
+  self::expect(8, c.{self::Class::field}{core::int});
+  self::Extension|set#simpleSetter(c, 0);
+  self::expect(0, let final self::Class? #t43 = cn in #t43 == null ?{core::int?} null : #t43{self::Class}.{self::Class::field}{core::int});
+  self::expect(1, let final self::Class? #t44 = cn in #t44 == null ?{core::int?} null : let final core::int #t45 = 1 in let final void #t46 = self::Extension|set#simpleSetter(#t44{self::Class}, #t45) in #t45);
+  self::Extension|set#simpleSetter(c, 2);
+  self::expect(2, let final self::Class? #t47 = cn in #t47 == null ?{core::int?} null : #t47{self::Class}.{self::Class::field}{core::int});
+  self::expect(3, let final self::Class #t48 = c in let final core::int #t49 = 3 in let final void #t50 = self::Extension|set#simpleSetter(#t48, #t49) in #t49);
+  self::Extension|set#mutatingSetter(c, 0);
+  self::expect(1, let final self::Class? #t51 = cn in #t51 == null ?{core::int?} null : #t51{self::Class}.{self::Class::field}{core::int});
+  self::expect(2, let final self::Class? #t52 = cn in #t52 == null ?{core::int?} null : let final core::int #t53 = 2 in let final void #t54 = self::Extension|set#mutatingSetter(#t52{self::Class}, #t53) in #t53);
+  self::expect(3, let final self::Class? #t55 = cn in #t55 == null ?{core::int?} null : #t55{self::Class}.{self::Class::field}{core::int});
+  self::Extension|set#mutatingSetter(c, 4);
+  self::expect(5, let final self::Class? #t56 = cn in #t56 == null ?{core::int?} null : #t56{self::Class}.{self::Class::field}{core::int});
+  self::expect(6, let final self::Class #t57 = c in let final core::int #t58 = 6 in let final void #t59 = self::Extension|set#mutatingSetter(#t57, #t58) in #t58);
+  self::expect(7, let final self::Class? #t60 = cn in #t60 == null ?{core::int?} null : #t60{self::Class}.{self::Class::field}{core::int});
+  let final self::Class? #t61 = cn in #t61 == null ?{core::int?} null : self::Extension|set#setterWithReturn(#t61{self::Class}, 1);
+  self::expect(1, let final self::Class? #t62 = cn in #t62 == null ?{core::int?} null : #t62{self::Class}.{self::Class::field}{core::int});
+  let final self::Class? #t63 = cn in #t63 == null ?{core::int?} null : self::Extension|set#setterWithReturn(#t63{self::Class}, 2.{core::int::unary-}(){() → core::int});
+  self::expect(2, let final self::Class? #t64 = cn in #t64 == null ?{core::int?} null : #t64{self::Class}.{self::Class::field}{core::int});
+  self::expect(3, let final self::Class? #t65 = cn in #t65 == null ?{core::int?} null : let final core::int #t66 = 3 in let final void #t67 = self::Extension|set#setterWithReturn(#t65{self::Class}, #t66) in #t66);
+  self::expect(3, let final self::Class? #t68 = cn in #t68 == null ?{core::int?} null : #t68{self::Class}.{self::Class::field}{core::int});
+  self::expect(4.{core::int::unary-}(){() → core::int}, let final self::Class? #t69 = cn in #t69 == null ?{core::int?} null : let final core::int #t70 = 4.{core::int::unary-}(){() → core::int} in let final void #t71 = self::Extension|set#setterWithReturn(#t69{self::Class}, #t70) in #t70);
+  self::expect(4, let final self::Class? #t72 = cn in #t72 == null ?{core::int?} null : #t72{self::Class}.{self::Class::field}{core::int});
+  self::Extension|set#setterWithReturn(c, 5);
+  self::expect(5, let final self::Class? #t73 = cn in #t73 == null ?{core::int?} null : #t73{self::Class}.{self::Class::field}{core::int});
+  self::Extension|set#setterWithReturn(c, 6.{core::int::unary-}(){() → core::int});
+  self::expect(6, let final self::Class? #t74 = cn in #t74 == null ?{core::int?} null : #t74{self::Class}.{self::Class::field}{core::int});
+  self::expect(7, let final self::Class #t75 = c in let final core::int #t76 = 7 in let final void #t77 = self::Extension|set#setterWithReturn(#t75, #t76) in #t76);
+  self::expect(7, let final self::Class? #t78 = cn in #t78 == null ?{core::int?} null : #t78{self::Class}.{self::Class::field}{core::int});
+  self::expect(8.{core::int::unary-}(){() → core::int}, let final self::Class #t79 = c in let final core::int #t80 = 8.{core::int::unary-}(){() → core::int} in let final void #t81 = self::Extension|set#setterWithReturn(#t79, #t80) in #t80);
+  self::expect(8, let final self::Class? #t82 = cn in #t82 == null ?{core::int?} null : #t82{self::Class}.{self::Class::field}{core::int});
+  let final self::Class? #t83 = cn in #t83 == null ?{core::int?} null : self::Extension|set#setterWithClosure(#t83{self::Class}, 1);
+  self::expect(1, let final self::Class? #t84 = cn in #t84 == null ?{core::int?} null : #t84{self::Class}.{self::Class::field}{core::int});
+  let final self::Class? #t85 = cn in #t85 == null ?{core::int?} null : self::Extension|set#setterWithClosure(#t85{self::Class}, 2.{core::int::unary-}(){() → core::int});
+  self::expect(2, let final self::Class? #t86 = cn in #t86 == null ?{core::int?} null : #t86{self::Class}.{self::Class::field}{core::int});
+  self::expect(3, let final self::Class? #t87 = cn in #t87 == null ?{core::int?} null : let final core::int #t88 = 3 in let final void #t89 = self::Extension|set#setterWithClosure(#t87{self::Class}, #t88) in #t88);
+  self::expect(3, let final self::Class? #t90 = cn in #t90 == null ?{core::int?} null : #t90{self::Class}.{self::Class::field}{core::int});
+  self::expect(4.{core::int::unary-}(){() → core::int}, let final self::Class? #t91 = cn in #t91 == null ?{core::int?} null : let final core::int #t92 = 4.{core::int::unary-}(){() → core::int} in let final void #t93 = self::Extension|set#setterWithClosure(#t91{self::Class}, #t92) in #t92);
+  self::expect(4, let final self::Class? #t94 = cn in #t94 == null ?{core::int?} null : #t94{self::Class}.{self::Class::field}{core::int});
+  self::Extension|set#setterWithClosure(c, 5);
+  self::expect(5, let final self::Class? #t95 = cn in #t95 == null ?{core::int?} null : #t95{self::Class}.{self::Class::field}{core::int});
+  self::Extension|set#setterWithClosure(c, 6.{core::int::unary-}(){() → core::int});
+  self::expect(6, let final self::Class? #t96 = cn in #t96 == null ?{core::int?} null : #t96{self::Class}.{self::Class::field}{core::int});
+  self::expect(7, let final self::Class #t97 = c in let final core::int #t98 = 7 in let final void #t99 = self::Extension|set#setterWithClosure(#t97, #t98) in #t98);
+  self::expect(7, let final self::Class? #t100 = cn in #t100 == null ?{core::int?} null : #t100{self::Class}.{self::Class::field}{core::int});
+  self::expect(8.{core::int::unary-}(){() → core::int}, let final self::Class #t101 = c in let final core::int #t102 = 8.{core::int::unary-}(){() → core::int} in let final void #t103 = self::Extension|set#setterWithClosure(#t101, #t102) in #t102);
+  self::expect(8, let final self::Class? #t104 = cn in #t104 == null ?{core::int?} null : #t104{self::Class}.{self::Class::field}{core::int});
+  c.{self::Class::nullableField} = null;
+  let final self::Class #t105 = c in self::Extension|get#simpleNullableSetter(#t105) == null ?{core::int} self::Extension|set#simpleNullableSetter(#t105, 1) : null;
+  self::expect(1, c.{self::Class::nullableField}{core::int?});
+  self::expect(1, let final self::Class #t106 = c in let final core::int? #t107 = self::Extension|get#simpleNullableSetter(#t106) in #t107 == null ?{core::int} let final core::int #t108 = 2 in let final void #t109 = self::Extension|set#simpleNullableSetter(#t106, #t108) in #t108 : #t107{core::int});
+  c.{self::Class::nullableField} = null;
+  self::expect(2, let final self::Class #t110 = c in let final core::int? #t111 = self::Extension|get#simpleNullableSetter(#t110) in #t111 == null ?{core::int} let final core::int #t112 = 2 in let final void #t113 = self::Extension|set#simpleNullableSetter(#t110, #t112) in #t112 : #t111{core::int});
+  let final self::Class? #t114 = cn in #t114 == null ?{Null} null : #t114{self::Class}.{self::Class::nullableField} = null;
+  let final self::Class? #t115 = cn in #t115 == null ?{core::int?} null : self::Extension|get#simpleNullableSetter(#t115) == null ?{core::int} self::Extension|set#simpleNullableSetter(#t115, 1) : null;
+  self::expect(1, let final self::Class? #t116 = cn in #t116 == null ?{core::int?} null : #t116{self::Class}.{self::Class::nullableField}{core::int?});
+  self::expect(1, let final self::Class? #t117 = cn in #t117 == null ?{core::int?} null : let final core::int? #t118 = self::Extension|get#simpleNullableSetter(#t117) in #t118 == null ?{core::int} let final core::int #t119 = 2 in let final void #t120 = self::Extension|set#simpleNullableSetter(#t117, #t119) in #t119 : #t118{core::int});
+  let final self::Class? #t121 = cn in #t121 == null ?{Null} null : #t121{self::Class}.{self::Class::nullableField} = null;
+  self::expect(2, let final self::Class? #t122 = cn in #t122 == null ?{core::int?} null : let final core::int? #t123 = self::Extension|get#simpleNullableSetter(#t122) in #t123 == null ?{core::int} let final core::int #t124 = 2 in let final void #t125 = self::Extension|set#simpleNullableSetter(#t122, #t124) in #t124 : #t123{core::int});
+  self::Extension|testInternal(new self::Class::•(1.{core::int::unary-}(){() → core::int}));
+  self::GenericClass<core::int> genericClass = new self::GenericClass::•<core::int>();
+  self::expect(1, let final self::GenericClass<core::int> #t126 = genericClass in let final core::int #t127 = 1 in let final void #t128 = self::GenericExtension|set#setter<core::int>(#t126, #t127) in #t127);
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual)) {
+    throw "Mismatch: expected=${expected}, actual=${actual}";
+  }
+}
+
+
+Extra constant evaluation status:
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter2.dart:53:12 -> IntConstant(-1)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter2.dart:57:30 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter2.dart:57:30 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter2.dart:61:32 -> IntConstant(2)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter2.dart:61:32 -> IntConstant(2)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter2.dart:66:24 -> IntConstant(-2)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter2.dart:68:34 -> IntConstant(3)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter2.dart:68:34 -> IntConstant(3)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter2.dart:70:12 -> IntConstant(-4)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter2.dart:70:35 -> IntConstant(-4)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter2.dart:70:35 -> IntConstant(-4)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter2.dart:70:35 -> IntConstant(-4)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter2.dart:75:25 -> IntConstant(-2)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter2.dart:77:35 -> IntConstant(3)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter2.dart:77:35 -> IntConstant(3)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter2.dart:79:12 -> IntConstant(-4)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter2.dart:79:36 -> IntConstant(-4)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter2.dart:79:36 -> IntConstant(-4)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter2.dart:79:36 -> IntConstant(-4)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter2.dart:91:21 -> IntConstant(-1)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter2.dart:96:10 -> IntConstant(-1)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter2.dart:100:30 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter2.dart:100:30 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter2.dart:103:41 -> IntConstant(3)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter2.dart:103:41 -> IntConstant(3)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter2.dart:107:32 -> IntConstant(2)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter2.dart:107:32 -> IntConstant(2)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter2.dart:111:43 -> IntConstant(6)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter2.dart:111:43 -> IntConstant(6)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter2.dart:116:24 -> IntConstant(-2)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter2.dart:118:34 -> IntConstant(3)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter2.dart:118:34 -> IntConstant(3)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter2.dart:120:10 -> IntConstant(-4)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter2.dart:120:35 -> IntConstant(-4)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter2.dart:120:35 -> IntConstant(-4)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter2.dart:120:35 -> IntConstant(-4)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter2.dart:124:35 -> IntConstant(-6)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter2.dart:126:45 -> IntConstant(7)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter2.dart:126:45 -> IntConstant(7)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter2.dart:128:10 -> IntConstant(-8)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter2.dart:128:46 -> IntConstant(-8)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter2.dart:128:46 -> IntConstant(-8)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter2.dart:128:46 -> IntConstant(-8)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter2.dart:133:25 -> IntConstant(-2)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter2.dart:135:35 -> IntConstant(3)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter2.dart:135:35 -> IntConstant(3)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter2.dart:137:10 -> IntConstant(-4)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter2.dart:137:36 -> IntConstant(-4)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter2.dart:137:36 -> IntConstant(-4)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter2.dart:137:36 -> IntConstant(-4)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter2.dart:141:36 -> IntConstant(-6)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter2.dart:143:46 -> IntConstant(7)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter2.dart:143:46 -> IntConstant(7)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter2.dart:145:10 -> IntConstant(-8)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter2.dart:145:47 -> IntConstant(-8)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter2.dart:145:47 -> IntConstant(-8)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter2.dart:145:47 -> IntConstant(-8)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter2.dart:150:32 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter2.dart:150:32 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter2.dart:153:41 -> IntConstant(3)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter2.dart:153:41 -> IntConstant(3)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter2.dart:157:34 -> IntConstant(2)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter2.dart:157:34 -> IntConstant(2)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter2.dart:161:43 -> IntConstant(6)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter2.dart:161:43 -> IntConstant(6)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter2.dart:166:26 -> IntConstant(-2)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter2.dart:168:36 -> IntConstant(3)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter2.dart:168:36 -> IntConstant(3)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter2.dart:170:10 -> IntConstant(-4)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter2.dart:170:37 -> IntConstant(-4)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter2.dart:170:37 -> IntConstant(-4)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter2.dart:170:37 -> IntConstant(-4)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter2.dart:174:35 -> IntConstant(-6)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter2.dart:176:45 -> IntConstant(7)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter2.dart:176:45 -> IntConstant(7)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter2.dart:178:10 -> IntConstant(-8)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter2.dart:178:46 -> IntConstant(-8)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter2.dart:178:46 -> IntConstant(-8)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter2.dart:178:46 -> IntConstant(-8)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter2.dart:183:27 -> IntConstant(-2)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter2.dart:185:37 -> IntConstant(3)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter2.dart:185:37 -> IntConstant(3)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter2.dart:187:10 -> IntConstant(-4)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter2.dart:187:38 -> IntConstant(-4)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter2.dart:187:38 -> IntConstant(-4)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter2.dart:187:38 -> IntConstant(-4)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter2.dart:191:36 -> IntConstant(-6)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter2.dart:193:46 -> IntConstant(7)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter2.dart:193:46 -> IntConstant(7)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter2.dart:195:10 -> IntConstant(-8)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter2.dart:195:47 -> IntConstant(-8)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter2.dart:195:47 -> IntConstant(-8)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter2.dart:195:47 -> IntConstant(-8)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter2.dart:201:40 -> IntConstant(2)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter2.dart:201:40 -> IntConstant(2)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter2.dart:203:40 -> IntConstant(2)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter2.dart:203:40 -> IntConstant(2)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter2.dart:208:42 -> IntConstant(2)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter2.dart:208:42 -> IntConstant(2)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter2.dart:210:42 -> IntConstant(2)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter2.dart:210:42 -> IntConstant(2)
+Evaluated: InstanceInvocation @ org-dartlang-testcase:///extension_setter2.dart:212:13 -> IntConstant(-1)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter2.dart:215:53 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///extension_setter2.dart:215:53 -> IntConstant(1)
+Extra constant evaluation: evaluated: 848, effectively constant: 104
diff --git a/pkg/front_end/testcases/extensions/extension_setter_error.dart b/pkg/front_end/testcases/extensions/extension_setter_error.dart
index a8b5d50..ffa19d7 100644
--- a/pkg/front_end/testcases/extensions/extension_setter_error.dart
+++ b/pkg/front_end/testcases/extensions/extension_setter_error.dart
@@ -1,13 +1,15 @@
 // Copyright (c) 2019, 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.
-// @dart=2.9
+
 class GenericClass<T> {}
 
 extension GenericExtension<T> on GenericClass<T> {
-  set setter(T value) {}
+  set setter(T? value) {}
 }
 
+main() {}
+
 error() {
   GenericClass<int> genericClass = new GenericClass<int>();
   expect(null, GenericExtension<double>(genericClass).setter = null);
@@ -18,4 +20,4 @@
   if (expected != actual) {
     throw 'Mismatch: expected=$expected, actual=$actual';
   }
-}
\ No newline at end of file
+}
diff --git a/pkg/front_end/testcases/extensions/extension_setter_error.dart.textual_outline.expect b/pkg/front_end/testcases/extensions/extension_setter_error.dart.textual_outline.expect
index f98e6ac..ba70572 100644
--- a/pkg/front_end/testcases/extensions/extension_setter_error.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/extensions/extension_setter_error.dart.textual_outline.expect
@@ -1,9 +1,9 @@
-// @dart = 2.9
 class GenericClass<T> {}
 
 extension GenericExtension<T> on GenericClass<T> {
-  set setter(T value) {}
+  set setter(T? value) {}
 }
 
+main() {}
 error() {}
 expect(expected, actual) {}
diff --git a/pkg/front_end/testcases/extensions/extension_setter_error.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/extensions/extension_setter_error.dart.textual_outline_modelled.expect
index 282faec..1202e1e 100644
--- a/pkg/front_end/testcases/extensions/extension_setter_error.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/extensions/extension_setter_error.dart.textual_outline_modelled.expect
@@ -1,9 +1,10 @@
-// @dart = 2.9
 class GenericClass<T> {}
 
 error() {}
 expect(expected, actual) {}
 
 extension GenericExtension<T> on GenericClass<T> {
-  set setter(T value) {}
+  set setter(T? value) {}
 }
+
+main() {}
diff --git a/pkg/front_end/testcases/extensions/extension_setter_error.dart.weak.expect b/pkg/front_end/testcases/extensions/extension_setter_error.dart.weak.expect
index d2d6b51..0994723 100644
--- a/pkg/front_end/testcases/extensions/extension_setter_error.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/extension_setter_error.dart.weak.expect
@@ -1,8 +1,8 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// 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>'.
+// pkg/front_end/testcases/extensions/extension_setter_error.dart:15:41: Error: A value of type 'GenericClass<int>' can't be assigned to a variable of type 'GenericClass<double>'.
 //  - 'GenericClass' is from 'pkg/front_end/testcases/extensions/extension_setter_error.dart'.
 //   expect(null, GenericExtension<double>(genericClass).setter = null);
 //                                         ^
@@ -10,34 +10,25 @@
 import self as self;
 import "dart:core" as core;
 
-class GenericClass<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::GenericClass<self::GenericClass::T*>*
+class GenericClass<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::GenericClass<self::GenericClass::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension GenericExtension<T extends core::Object* = dynamic> on self::GenericClass<T*>* {
+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>(lowered 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 {}
 static method error() → dynamic {
-  self::GenericClass<core::int*>* genericClass = new self::GenericClass::•<core::int*>();
-  self::expect(null, let final self::GenericClass<core::int*>* #t1 = 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>'.
+  self::GenericClass<core::int> genericClass = new self::GenericClass::•<core::int>();
+  self::expect(null, let final self::GenericClass<core::int> #t1 = invalid-expression "pkg/front_end/testcases/extensions/extension_setter_error.dart:15:41: Error: A value of type 'GenericClass<int>' can't be assigned to a variable of type 'GenericClass<double>'.
  - 'GenericClass' is from 'pkg/front_end/testcases/extensions/extension_setter_error.dart'.
   expect(null, GenericExtension<double>(genericClass).setter = null);
-                                        ^" in genericClass as{TypeError} self::GenericClass<core::double*>* in let final has-declared-initializer Null #t2 = null in let final void #t3 = self::GenericExtension|set#setter<core::double*>(#t1, #t2) in #t2);
+                                        ^" in genericClass as{TypeError,ForNonNullableByDefault} self::GenericClass<core::double> in let final has-declared-initializer Null #t2 = null in let final void #t3 = self::GenericExtension|set#setter<core::double>(#t1, #t2) in #t2);
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual)) {
     throw "Mismatch: expected=${expected}, actual=${actual}";
   }
 }
diff --git a/pkg/front_end/testcases/extensions/extension_setter_error.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/extension_setter_error.dart.weak.modular.expect
index d2d6b51..0994723 100644
--- a/pkg/front_end/testcases/extensions/extension_setter_error.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/extensions/extension_setter_error.dart.weak.modular.expect
@@ -1,8 +1,8 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// 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>'.
+// pkg/front_end/testcases/extensions/extension_setter_error.dart:15:41: Error: A value of type 'GenericClass<int>' can't be assigned to a variable of type 'GenericClass<double>'.
 //  - 'GenericClass' is from 'pkg/front_end/testcases/extensions/extension_setter_error.dart'.
 //   expect(null, GenericExtension<double>(genericClass).setter = null);
 //                                         ^
@@ -10,34 +10,25 @@
 import self as self;
 import "dart:core" as core;
 
-class GenericClass<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::GenericClass<self::GenericClass::T*>*
+class GenericClass<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::GenericClass<self::GenericClass::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension GenericExtension<T extends core::Object* = dynamic> on self::GenericClass<T*>* {
+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>(lowered 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 {}
 static method error() → dynamic {
-  self::GenericClass<core::int*>* genericClass = new self::GenericClass::•<core::int*>();
-  self::expect(null, let final self::GenericClass<core::int*>* #t1 = 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>'.
+  self::GenericClass<core::int> genericClass = new self::GenericClass::•<core::int>();
+  self::expect(null, let final self::GenericClass<core::int> #t1 = invalid-expression "pkg/front_end/testcases/extensions/extension_setter_error.dart:15:41: Error: A value of type 'GenericClass<int>' can't be assigned to a variable of type 'GenericClass<double>'.
  - 'GenericClass' is from 'pkg/front_end/testcases/extensions/extension_setter_error.dart'.
   expect(null, GenericExtension<double>(genericClass).setter = null);
-                                        ^" in genericClass as{TypeError} self::GenericClass<core::double*>* in let final has-declared-initializer Null #t2 = null in let final void #t3 = self::GenericExtension|set#setter<core::double*>(#t1, #t2) in #t2);
+                                        ^" in genericClass as{TypeError,ForNonNullableByDefault} self::GenericClass<core::double> in let final has-declared-initializer Null #t2 = null in let final void #t3 = self::GenericExtension|set#setter<core::double>(#t1, #t2) in #t2);
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual)) {
     throw "Mismatch: expected=${expected}, actual=${actual}";
   }
 }
diff --git a/pkg/front_end/testcases/extensions/extension_setter_error.dart.weak.outline.expect b/pkg/front_end/testcases/extensions/extension_setter_error.dart.weak.outline.expect
index 2b0f430..3cd0642 100644
--- a/pkg/front_end/testcases/extensions/extension_setter_error.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extensions/extension_setter_error.dart.weak.outline.expect
@@ -1,25 +1,17 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class GenericClass<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::GenericClass<self::GenericClass::T*>*
+class GenericClass<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::GenericClass<self::GenericClass::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension GenericExtension<T extends core::Object* = dynamic> on self::GenericClass<T*>* {
+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>(lowered 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
   ;
 static method error() → dynamic
   ;
diff --git a/pkg/front_end/testcases/extensions/generic_function_in_generic_extension.dart b/pkg/front_end/testcases/extensions/generic_function_in_generic_extension.dart
index 60e02c6..e841612 100644
--- a/pkg/front_end/testcases/extensions/generic_function_in_generic_extension.dart
+++ b/pkg/front_end/testcases/extensions/generic_function_in_generic_extension.dart
@@ -1,14 +1,14 @@
 // Copyright (c) 2019, 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.
-// @dart=2.9
+
 /// Regression test for missing substitution of type variable used in the
 /// return type of a generic method on a generic extension.
 
 class Class<T> {}
 
 extension Extension<T> on Class<T> {
-  R method<R>(T t) => null;
+  R? method<R>(T t) => null;
 }
 
 main() {
diff --git a/pkg/front_end/testcases/extensions/generic_function_in_generic_extension.dart.textual_outline.expect b/pkg/front_end/testcases/extensions/generic_function_in_generic_extension.dart.textual_outline.expect
index 77c5035..1a6e56b 100644
--- a/pkg/front_end/testcases/extensions/generic_function_in_generic_extension.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/extensions/generic_function_in_generic_extension.dart.textual_outline.expect
@@ -1,8 +1,7 @@
-// @dart = 2.9
 class Class<T> {}
 
 extension Extension<T> on Class<T> {
-  R method<R>(T t) => null;
+  R? method<R>(T t) => null;
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/extensions/generic_function_in_generic_extension.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/extensions/generic_function_in_generic_extension.dart.textual_outline_modelled.expect
index 77c5035..1a6e56b 100644
--- a/pkg/front_end/testcases/extensions/generic_function_in_generic_extension.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/extensions/generic_function_in_generic_extension.dart.textual_outline_modelled.expect
@@ -1,8 +1,7 @@
-// @dart = 2.9
 class Class<T> {}
 
 extension Extension<T> on Class<T> {
-  R method<R>(T t) => null;
+  R? method<R>(T t) => null;
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/extensions/generic_function_in_generic_extension.dart.weak.expect b/pkg/front_end/testcases/extensions/generic_function_in_generic_extension.dart.weak.expect
index 47243334..a1316a5 100644
--- a/pkg/front_end/testcases/extensions/generic_function_in_generic_extension.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/generic_function_in_generic_extension.dart.weak.expect
@@ -1,30 +1,20 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class Class<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Class<self::Class::T*>*
+class Class<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Class<self::Class::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension Extension<T extends core::Object* = dynamic> on self::Class<T*>* {
+extension Extension<T extends core::Object? = dynamic> on self::Class<T%> {
   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>(lowered 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>(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 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 == null ?{core::String*} null : #t1.{core::Object::toString}(){() →* core::String*};
+  let final dynamic #t1 = self::Extension|method<core::int, dynamic>(new self::Class::•<core::int>(), 0) in #t1 == null ?{core::String?} null : #t1.{core::Object::toString}(){() → core::String};
 }
diff --git a/pkg/front_end/testcases/extensions/generic_function_in_generic_extension.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/generic_function_in_generic_extension.dart.weak.modular.expect
index 47243334..a1316a5 100644
--- a/pkg/front_end/testcases/extensions/generic_function_in_generic_extension.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/extensions/generic_function_in_generic_extension.dart.weak.modular.expect
@@ -1,30 +1,20 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class Class<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Class<self::Class::T*>*
+class Class<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Class<self::Class::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension Extension<T extends core::Object* = dynamic> on self::Class<T*>* {
+extension Extension<T extends core::Object? = dynamic> on self::Class<T%> {
   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>(lowered 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>(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 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 == null ?{core::String*} null : #t1.{core::Object::toString}(){() →* core::String*};
+  let final dynamic #t1 = self::Extension|method<core::int, dynamic>(new self::Class::•<core::int>(), 0) in #t1 == null ?{core::String?} null : #t1.{core::Object::toString}(){() → core::String};
 }
diff --git a/pkg/front_end/testcases/extensions/generic_function_in_generic_extension.dart.weak.outline.expect b/pkg/front_end/testcases/extensions/generic_function_in_generic_extension.dart.weak.outline.expect
index de2e8df..0d0d4d3 100644
--- a/pkg/front_end/testcases/extensions/generic_function_in_generic_extension.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extensions/generic_function_in_generic_extension.dart.weak.outline.expect
@@ -1,28 +1,18 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class Class<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Class<self::Class::T*>*
+class Class<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Class<self::Class::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension Extension<T extends core::Object* = dynamic> on self::Class<T*>* {
+extension Extension<T extends core::Object? = dynamic> on self::Class<T%> {
   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>(lowered 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>(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 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.weak.transformed.expect b/pkg/front_end/testcases/extensions/generic_function_in_generic_extension.dart.weak.transformed.expect
index 47243334..a1316a5 100644
--- a/pkg/front_end/testcases/extensions/generic_function_in_generic_extension.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/generic_function_in_generic_extension.dart.weak.transformed.expect
@@ -1,30 +1,20 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class Class<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Class<self::Class::T*>*
+class Class<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Class<self::Class::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension Extension<T extends core::Object* = dynamic> on self::Class<T*>* {
+extension Extension<T extends core::Object? = dynamic> on self::Class<T%> {
   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>(lowered 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>(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 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 == null ?{core::String*} null : #t1.{core::Object::toString}(){() →* core::String*};
+  let final dynamic #t1 = self::Extension|method<core::int, dynamic>(new self::Class::•<core::int>(), 0) in #t1 == null ?{core::String?} null : #t1.{core::Object::toString}(){() → core::String};
 }
diff --git a/pkg/front_end/testcases/extensions/getter_setter_conflict.dart b/pkg/front_end/testcases/extensions/getter_setter_conflict.dart
index 95951cc..eb42294 100644
--- a/pkg/front_end/testcases/extensions/getter_setter_conflict.dart
+++ b/pkg/front_end/testcases/extensions/getter_setter_conflict.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2019, 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.
-// @dart=2.9
+
 class Class {
   int get m1 => 0;
   void set m2(int x) {}
diff --git a/pkg/front_end/testcases/extensions/getter_setter_conflict.dart.textual_outline.expect b/pkg/front_end/testcases/extensions/getter_setter_conflict.dart.textual_outline.expect
index 332dd6c..0207a05 100644
--- a/pkg/front_end/testcases/extensions/getter_setter_conflict.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/extensions/getter_setter_conflict.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Class {
   int get m1 => 0;
   void set m2(int x) {}
diff --git a/pkg/front_end/testcases/extensions/getter_setter_conflict.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/extensions/getter_setter_conflict.dart.textual_outline_modelled.expect
index 0d6d5d5..3da20ad 100644
--- a/pkg/front_end/testcases/extensions/getter_setter_conflict.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/extensions/getter_setter_conflict.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Class {
   int get m1 => 0;
   void set m2(int x) {}
diff --git a/pkg/front_end/testcases/extensions/getter_setter_conflict.dart.weak.expect b/pkg/front_end/testcases/extensions/getter_setter_conflict.dart.weak.expect
index 6666d8f..56494db 100644
--- a/pkg/front_end/testcases/extensions/getter_setter_conflict.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/getter_setter_conflict.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -66,49 +66,39 @@
 import "dart:core" as core;
 
 class Class extends core::Object {
-  synthetic constructor •() → self::Class*
+  synthetic constructor •() → self::Class
     : super core::Object::•()
     ;
-  get m1() → core::int*
+  get m1() → core::int
     return 0;
-  set m2(core::int* x) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  set m2(core::int x) → void {}
 }
-extension Extension0 on self::Class* {
+extension Extension0 on self::Class {
   get m2 = self::Extension0|get#m2;
   get m4 = self::Extension0|get#m4;
   set m1 = self::Extension0|set#m1;
   set m3 = self::Extension0|set#m3;
 }
-extension Extension1 on self::Class* {
+extension Extension1 on self::Class {
   get m3 = self::Extension1|get#m3;
   set m4 = self::Extension1|set#m4;
 }
-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*
+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(lowered final self::Class* #this, core::int* x) → void {}
-static method Extension0|get#m4(lowered 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(lowered 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(lowered 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}{core::int*});
+  self::Class c = new self::Class::•();
+  self::expect(0, c.{self::Class::m1}{core::int});
   c.{self::Class::m2} = 2;
 }
 static method errors() → dynamic {
-  self::Class* c = new self::Class::•();
+  self::Class c = new self::Class::•();
   self::expect(0, invalid-expression "pkg/front_end/testcases/extensions/getter_setter_conflict.dart:30:15: Error: The getter 'm2' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/extensions/getter_setter_conflict.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'm2'.
@@ -141,7 +131,7 @@
     ^^" in c{<unresolved>}.m4 = 2;
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual)) {
     throw "Mismatch: expected=${expected}, actual=${actual}";
   }
 }
diff --git a/pkg/front_end/testcases/extensions/getter_setter_conflict.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/getter_setter_conflict.dart.weak.modular.expect
index 6666d8f..56494db 100644
--- a/pkg/front_end/testcases/extensions/getter_setter_conflict.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/extensions/getter_setter_conflict.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -66,49 +66,39 @@
 import "dart:core" as core;
 
 class Class extends core::Object {
-  synthetic constructor •() → self::Class*
+  synthetic constructor •() → self::Class
     : super core::Object::•()
     ;
-  get m1() → core::int*
+  get m1() → core::int
     return 0;
-  set m2(core::int* x) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  set m2(core::int x) → void {}
 }
-extension Extension0 on self::Class* {
+extension Extension0 on self::Class {
   get m2 = self::Extension0|get#m2;
   get m4 = self::Extension0|get#m4;
   set m1 = self::Extension0|set#m1;
   set m3 = self::Extension0|set#m3;
 }
-extension Extension1 on self::Class* {
+extension Extension1 on self::Class {
   get m3 = self::Extension1|get#m3;
   set m4 = self::Extension1|set#m4;
 }
-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*
+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(lowered final self::Class* #this, core::int* x) → void {}
-static method Extension0|get#m4(lowered 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(lowered 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(lowered 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}{core::int*});
+  self::Class c = new self::Class::•();
+  self::expect(0, c.{self::Class::m1}{core::int});
   c.{self::Class::m2} = 2;
 }
 static method errors() → dynamic {
-  self::Class* c = new self::Class::•();
+  self::Class c = new self::Class::•();
   self::expect(0, invalid-expression "pkg/front_end/testcases/extensions/getter_setter_conflict.dart:30:15: Error: The getter 'm2' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/extensions/getter_setter_conflict.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'm2'.
@@ -141,7 +131,7 @@
     ^^" in c{<unresolved>}.m4 = 2;
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual)) {
     throw "Mismatch: expected=${expected}, actual=${actual}";
   }
 }
diff --git a/pkg/front_end/testcases/extensions/getter_setter_conflict.dart.weak.outline.expect b/pkg/front_end/testcases/extensions/getter_setter_conflict.dart.weak.outline.expect
index c1bc20e..57cb9b8 100644
--- a/pkg/front_end/testcases/extensions/getter_setter_conflict.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extensions/getter_setter_conflict.dart.weak.outline.expect
@@ -1,46 +1,36 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Class extends core::Object {
-  synthetic constructor •() → self::Class*
+  synthetic constructor •() → self::Class
     ;
-  get m1() → core::int*
+  get m1() → core::int
     ;
-  set m2(core::int* x) → void
+  set m2(core::int x) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension Extension0 on self::Class* {
+extension Extension0 on self::Class {
   get m2 = self::Extension0|get#m2;
   get m4 = self::Extension0|get#m4;
   set m1 = self::Extension0|set#m1;
   set m3 = self::Extension0|set#m3;
 }
-extension Extension1 on self::Class* {
+extension Extension1 on self::Class {
   get m3 = self::Extension1|get#m3;
   set m4 = self::Extension1|set#m4;
 }
-static method Extension0|set#m1(lowered 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(lowered final self::Class* #this) → core::int*
+static method Extension0|get#m2(lowered final self::Class #this) → core::int
   ;
-static method Extension0|set#m3(lowered 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(lowered final self::Class* #this) → core::int*
+static method Extension0|get#m4(lowered final self::Class #this) → core::int
   ;
-static method Extension1|get#m3(lowered final self::Class* #this) → core::int*
+static method Extension1|get#m3(lowered final self::Class #this) → core::int
   ;
-static method Extension1|set#m4(lowered 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.weak.transformed.expect b/pkg/front_end/testcases/extensions/getter_setter_conflict.dart.weak.transformed.expect
index 6666d8f..56494db 100644
--- a/pkg/front_end/testcases/extensions/getter_setter_conflict.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/getter_setter_conflict.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -66,49 +66,39 @@
 import "dart:core" as core;
 
 class Class extends core::Object {
-  synthetic constructor •() → self::Class*
+  synthetic constructor •() → self::Class
     : super core::Object::•()
     ;
-  get m1() → core::int*
+  get m1() → core::int
     return 0;
-  set m2(core::int* x) → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  set m2(core::int x) → void {}
 }
-extension Extension0 on self::Class* {
+extension Extension0 on self::Class {
   get m2 = self::Extension0|get#m2;
   get m4 = self::Extension0|get#m4;
   set m1 = self::Extension0|set#m1;
   set m3 = self::Extension0|set#m3;
 }
-extension Extension1 on self::Class* {
+extension Extension1 on self::Class {
   get m3 = self::Extension1|get#m3;
   set m4 = self::Extension1|set#m4;
 }
-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*
+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(lowered final self::Class* #this, core::int* x) → void {}
-static method Extension0|get#m4(lowered 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(lowered 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(lowered 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}{core::int*});
+  self::Class c = new self::Class::•();
+  self::expect(0, c.{self::Class::m1}{core::int});
   c.{self::Class::m2} = 2;
 }
 static method errors() → dynamic {
-  self::Class* c = new self::Class::•();
+  self::Class c = new self::Class::•();
   self::expect(0, invalid-expression "pkg/front_end/testcases/extensions/getter_setter_conflict.dart:30:15: Error: The getter 'm2' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/extensions/getter_setter_conflict.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'm2'.
@@ -141,7 +131,7 @@
     ^^" in c{<unresolved>}.m4 = 2;
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual)) {
     throw "Mismatch: expected=${expected}, actual=${actual}";
   }
 }
diff --git a/pkg/front_end/testcases/extensions/if_null.dart b/pkg/front_end/testcases/extensions/if_null.dart
index 68e54bb..0f0f4fb 100644
--- a/pkg/front_end/testcases/extensions/if_null.dart
+++ b/pkg/front_end/testcases/extensions/if_null.dart
@@ -1,7 +1,9 @@
 // Copyright (c) 2019, 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.
+
 // @dart=2.9
+
 class Class {
   int field;
 }
diff --git a/pkg/front_end/testcases/extensions/if_null.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/if_null.dart.weak.transformed.expect
index c98287f..d490043 100644
--- a/pkg/front_end/testcases/extensions/if_null.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/if_null.dart.weak.transformed.expect
@@ -50,10 +50,10 @@
 
 
 Extra constant evaluation status:
-Evaluated: Let @ org-dartlang-testcase:///if_null.dart:21:20 -> IntConstant(42)
-Evaluated: Let @ org-dartlang-testcase:///if_null.dart:22:31 -> IntConstant(42)
-Evaluated: VariableGet @ org-dartlang-testcase:///if_null.dart:23:18 -> IntConstant(42)
-Evaluated: VariableGet @ org-dartlang-testcase:///if_null.dart:23:18 -> IntConstant(42)
-Evaluated: VariableGet @ org-dartlang-testcase:///if_null.dart:24:29 -> IntConstant(42)
-Evaluated: VariableGet @ org-dartlang-testcase:///if_null.dart:24:29 -> IntConstant(42)
+Evaluated: Let @ org-dartlang-testcase:///if_null.dart:23:20 -> IntConstant(42)
+Evaluated: Let @ org-dartlang-testcase:///if_null.dart:24:31 -> IntConstant(42)
+Evaluated: VariableGet @ org-dartlang-testcase:///if_null.dart:25:18 -> IntConstant(42)
+Evaluated: VariableGet @ org-dartlang-testcase:///if_null.dart:25:18 -> IntConstant(42)
+Evaluated: VariableGet @ org-dartlang-testcase:///if_null.dart:26:29 -> IntConstant(42)
+Evaluated: VariableGet @ org-dartlang-testcase:///if_null.dart:26:29 -> IntConstant(42)
 Extra constant evaluation: evaluated: 122, effectively constant: 6
diff --git a/pkg/front_end/testcases/extensions/if_null2.dart b/pkg/front_end/testcases/extensions/if_null2.dart
new file mode 100644
index 0000000..56a0e71
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/if_null2.dart
@@ -0,0 +1,39 @@
+// Copyright (c) 2019, 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.
+
+class Class {
+  int field;
+
+  Class(this.field);
+}
+
+extension Extension on Class {
+  int get property => field;
+  int? get nullableProperty => field;
+  void set property(int? value) {
+    field = value ?? 0;
+  }
+
+  int method() => field;
+}
+
+main() {
+  test(null);
+}
+
+int? get value => 42;
+
+test(Class? c) {
+  c?.property ?? 0;
+  Extension(c)?.property ?? 0;
+  c?.property = value ?? 0;
+  Extension(c)?.property = value ?? 0;
+  (c?.property = 42) ?? 0;
+  (Extension(c)?.property = value) ?? 0;
+  c?.method() ?? 0;
+  Extension(c)?.method() ?? 0;
+  c = new Class(0);
+  c.nullableProperty ?? 0;
+  Extension(c).nullableProperty ?? 0;
+}
diff --git a/pkg/front_end/testcases/extensions/if_null2.dart.textual_outline.expect b/pkg/front_end/testcases/extensions/if_null2.dart.textual_outline.expect
new file mode 100644
index 0000000..b2e59a3
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/if_null2.dart.textual_outline.expect
@@ -0,0 +1,15 @@
+class Class {
+  int field;
+  Class(this.field);
+}
+
+extension Extension on Class {
+  int get property => field;
+  int? get nullableProperty => field;
+  void set property(int? value) {}
+  int method() => field;
+}
+
+main() {}
+int? get value => 42;
+test(Class? c) {}
diff --git a/pkg/front_end/testcases/extensions/if_null2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/extensions/if_null2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..303efbc
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/if_null2.dart.textual_outline_modelled.expect
@@ -0,0 +1,15 @@
+class Class {
+  Class(this.field);
+  int field;
+}
+
+extension Extension on Class {
+  int? get nullableProperty => field;
+  int get property => field;
+  int method() => field;
+  void set property(int? value) {}
+}
+
+int? get value => 42;
+main() {}
+test(Class? c) {}
diff --git a/pkg/front_end/testcases/extensions/if_null2.dart.weak.expect b/pkg/front_end/testcases/extensions/if_null2.dart.weak.expect
new file mode 100644
index 0000000..4558359
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/if_null2.dart.weak.expect
@@ -0,0 +1,46 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  field core::int field;
+  constructor •(core::int field) → self::Class
+    : self::Class::field = field, super core::Object::•()
+    ;
+}
+extension Extension on self::Class {
+  get property = self::Extension|get#property;
+  get nullableProperty = self::Extension|get#nullableProperty;
+  method method = self::Extension|method;
+  tearoff method = self::Extension|get#method;
+  set property = self::Extension|set#property;
+}
+static method Extension|get#property(lowered final self::Class #this) → core::int
+  return #this.{self::Class::field}{core::int};
+static method Extension|get#nullableProperty(lowered final self::Class #this) → core::int?
+  return #this.{self::Class::field}{core::int};
+static method Extension|set#property(lowered final self::Class #this, core::int? value) → void {
+  #this.{self::Class::field} = let final core::int? #t1 = value in #t1 == null ?{core::int} 0 : #t1{core::int};
+}
+static method Extension|method(lowered final self::Class #this) → core::int
+  return #this.{self::Class::field}{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::test(null);
+}
+static get value() → core::int?
+  return 42;
+static method test(self::Class? c) → dynamic {
+  let final core::int? #t2 = let final self::Class? #t3 = c in #t3 == null ?{core::int?} null : self::Extension|get#property(#t3{self::Class}) in #t2 == null ?{core::int} 0 : #t2{core::int};
+  let final core::int? #t4 = let final self::Class? #t5 = c in #t5 == null ?{core::int?} null : self::Extension|get#property(#t5{self::Class}) in #t4 == null ?{core::int} 0 : #t4{core::int};
+  let final self::Class? #t6 = c in #t6 == null ?{core::int?} null : self::Extension|set#property(#t6{self::Class}, let final core::int? #t7 = self::value in #t7 == null ?{core::int} 0 : #t7{core::int});
+  let final self::Class? #t8 = c in #t8 == null ?{core::int?} null : self::Extension|set#property(#t8{self::Class}, let final core::int? #t9 = self::value in #t9 == null ?{core::int} 0 : #t9{core::int});
+  let final core::int? #t10 = let final self::Class? #t11 = c in #t11 == null ?{core::int?} null : let final core::int #t12 = 42 in let final void #t13 = self::Extension|set#property(#t11{self::Class}, #t12) in #t12 in #t10 == null ?{core::int} 0 : #t10{core::int};
+  let final core::int? #t14 = let final self::Class? #t15 = c in #t15 == null ?{core::int?} null : let final core::int? #t16 = self::value in let final void #t17 = self::Extension|set#property(#t15{self::Class}, #t16) in #t16 in #t14 == null ?{core::int} 0 : #t14{core::int};
+  let final core::int? #t18 = let final self::Class? #t19 = c in #t19 == null ?{core::int?} null : self::Extension|method(#t19{self::Class}) in #t18 == null ?{core::int} 0 : #t18{core::int};
+  let final core::int? #t20 = let final self::Class? #t21 = c in #t21 == null ?{core::int?} null : self::Extension|method(#t21{self::Class}) in #t20 == null ?{core::int} 0 : #t20{core::int};
+  c = new self::Class::•(0);
+  let final core::int? #t22 = self::Extension|get#nullableProperty(c{self::Class}) in #t22 == null ?{core::int} 0 : #t22{core::int};
+  let final core::int? #t23 = self::Extension|get#nullableProperty(c{self::Class}) in #t23 == null ?{core::int} 0 : #t23{core::int};
+}
diff --git a/pkg/front_end/testcases/extensions/if_null2.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/if_null2.dart.weak.modular.expect
new file mode 100644
index 0000000..4558359
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/if_null2.dart.weak.modular.expect
@@ -0,0 +1,46 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  field core::int field;
+  constructor •(core::int field) → self::Class
+    : self::Class::field = field, super core::Object::•()
+    ;
+}
+extension Extension on self::Class {
+  get property = self::Extension|get#property;
+  get nullableProperty = self::Extension|get#nullableProperty;
+  method method = self::Extension|method;
+  tearoff method = self::Extension|get#method;
+  set property = self::Extension|set#property;
+}
+static method Extension|get#property(lowered final self::Class #this) → core::int
+  return #this.{self::Class::field}{core::int};
+static method Extension|get#nullableProperty(lowered final self::Class #this) → core::int?
+  return #this.{self::Class::field}{core::int};
+static method Extension|set#property(lowered final self::Class #this, core::int? value) → void {
+  #this.{self::Class::field} = let final core::int? #t1 = value in #t1 == null ?{core::int} 0 : #t1{core::int};
+}
+static method Extension|method(lowered final self::Class #this) → core::int
+  return #this.{self::Class::field}{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::test(null);
+}
+static get value() → core::int?
+  return 42;
+static method test(self::Class? c) → dynamic {
+  let final core::int? #t2 = let final self::Class? #t3 = c in #t3 == null ?{core::int?} null : self::Extension|get#property(#t3{self::Class}) in #t2 == null ?{core::int} 0 : #t2{core::int};
+  let final core::int? #t4 = let final self::Class? #t5 = c in #t5 == null ?{core::int?} null : self::Extension|get#property(#t5{self::Class}) in #t4 == null ?{core::int} 0 : #t4{core::int};
+  let final self::Class? #t6 = c in #t6 == null ?{core::int?} null : self::Extension|set#property(#t6{self::Class}, let final core::int? #t7 = self::value in #t7 == null ?{core::int} 0 : #t7{core::int});
+  let final self::Class? #t8 = c in #t8 == null ?{core::int?} null : self::Extension|set#property(#t8{self::Class}, let final core::int? #t9 = self::value in #t9 == null ?{core::int} 0 : #t9{core::int});
+  let final core::int? #t10 = let final self::Class? #t11 = c in #t11 == null ?{core::int?} null : let final core::int #t12 = 42 in let final void #t13 = self::Extension|set#property(#t11{self::Class}, #t12) in #t12 in #t10 == null ?{core::int} 0 : #t10{core::int};
+  let final core::int? #t14 = let final self::Class? #t15 = c in #t15 == null ?{core::int?} null : let final core::int? #t16 = self::value in let final void #t17 = self::Extension|set#property(#t15{self::Class}, #t16) in #t16 in #t14 == null ?{core::int} 0 : #t14{core::int};
+  let final core::int? #t18 = let final self::Class? #t19 = c in #t19 == null ?{core::int?} null : self::Extension|method(#t19{self::Class}) in #t18 == null ?{core::int} 0 : #t18{core::int};
+  let final core::int? #t20 = let final self::Class? #t21 = c in #t21 == null ?{core::int?} null : self::Extension|method(#t21{self::Class}) in #t20 == null ?{core::int} 0 : #t20{core::int};
+  c = new self::Class::•(0);
+  let final core::int? #t22 = self::Extension|get#nullableProperty(c{self::Class}) in #t22 == null ?{core::int} 0 : #t22{core::int};
+  let final core::int? #t23 = self::Extension|get#nullableProperty(c{self::Class}) in #t23 == null ?{core::int} 0 : #t23{core::int};
+}
diff --git a/pkg/front_end/testcases/extensions/if_null2.dart.weak.outline.expect b/pkg/front_end/testcases/extensions/if_null2.dart.weak.outline.expect
new file mode 100644
index 0000000..7aeed31
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/if_null2.dart.weak.outline.expect
@@ -0,0 +1,32 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  field core::int field;
+  constructor •(core::int field) → self::Class
+    ;
+}
+extension Extension on self::Class {
+  get property = self::Extension|get#property;
+  get nullableProperty = self::Extension|get#nullableProperty;
+  method method = self::Extension|method;
+  tearoff method = self::Extension|get#method;
+  set property = self::Extension|set#property;
+}
+static method Extension|get#property(lowered final self::Class #this) → core::int
+  ;
+static method Extension|get#nullableProperty(lowered final self::Class #this) → core::int?
+  ;
+static method Extension|set#property(lowered final self::Class #this, core::int? value) → void
+  ;
+static method Extension|method(lowered 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
+  ;
+static get value() → core::int?
+  ;
+static method test(self::Class? c) → dynamic
+  ;
diff --git a/pkg/front_end/testcases/extensions/if_null2.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/if_null2.dart.weak.transformed.expect
new file mode 100644
index 0000000..23f6b42
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/if_null2.dart.weak.transformed.expect
@@ -0,0 +1,52 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  field core::int field;
+  constructor •(core::int field) → self::Class
+    : self::Class::field = field, super core::Object::•()
+    ;
+}
+extension Extension on self::Class {
+  get property = self::Extension|get#property;
+  get nullableProperty = self::Extension|get#nullableProperty;
+  method method = self::Extension|method;
+  tearoff method = self::Extension|get#method;
+  set property = self::Extension|set#property;
+}
+static method Extension|get#property(lowered final self::Class #this) → core::int
+  return #this.{self::Class::field}{core::int};
+static method Extension|get#nullableProperty(lowered final self::Class #this) → core::int?
+  return #this.{self::Class::field}{core::int};
+static method Extension|set#property(lowered final self::Class #this, core::int? value) → void {
+  #this.{self::Class::field} = let final core::int? #t1 = value in #t1 == null ?{core::int} 0 : #t1{core::int};
+}
+static method Extension|method(lowered final self::Class #this) → core::int
+  return #this.{self::Class::field}{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::test(null);
+}
+static get value() → core::int?
+  return 42;
+static method test(self::Class? c) → dynamic {
+  let final core::int? #t2 = let final self::Class? #t3 = c in #t3 == null ?{core::int?} null : self::Extension|get#property(#t3{self::Class}) in #t2 == null ?{core::int} 0 : #t2{core::int};
+  let final core::int? #t4 = let final self::Class? #t5 = c in #t5 == null ?{core::int?} null : self::Extension|get#property(#t5{self::Class}) in #t4 == null ?{core::int} 0 : #t4{core::int};
+  let final self::Class? #t6 = c in #t6 == null ?{core::int?} null : self::Extension|set#property(#t6{self::Class}, let final core::int? #t7 = self::value in #t7 == null ?{core::int} 0 : #t7{core::int});
+  let final self::Class? #t8 = c in #t8 == null ?{core::int?} null : self::Extension|set#property(#t8{self::Class}, let final core::int? #t9 = self::value in #t9 == null ?{core::int} 0 : #t9{core::int});
+  let final core::int? #t10 = let final self::Class? #t11 = c in #t11 == null ?{core::int?} null : let final core::int #t12 = 42 in let final void #t13 = self::Extension|set#property(#t11{self::Class}, #t12) in #t12 in #t10 == null ?{core::int} 0 : #t10{core::int};
+  let final core::int? #t14 = let final self::Class? #t15 = c in #t15 == null ?{core::int?} null : let final core::int? #t16 = self::value in let final void #t17 = self::Extension|set#property(#t15{self::Class}, #t16) in #t16 in #t14 == null ?{core::int} 0 : #t14{core::int};
+  let final core::int? #t18 = let final self::Class? #t19 = c in #t19 == null ?{core::int?} null : self::Extension|method(#t19{self::Class}) in #t18 == null ?{core::int} 0 : #t18{core::int};
+  let final core::int? #t20 = let final self::Class? #t21 = c in #t21 == null ?{core::int?} null : self::Extension|method(#t21{self::Class}) in #t20 == null ?{core::int} 0 : #t20{core::int};
+  c = new self::Class::•(0);
+  let final core::int? #t22 = self::Extension|get#nullableProperty(c{self::Class}) in #t22 == null ?{core::int} 0 : #t22{core::int};
+  let final core::int? #t23 = self::Extension|get#nullableProperty(c{self::Class}) in #t23 == null ?{core::int} 0 : #t23{core::int};
+}
+
+
+Extra constant evaluation status:
+Evaluated: VariableGet @ org-dartlang-testcase:///if_null2.dart:32:18 -> IntConstant(42)
+Evaluated: VariableGet @ org-dartlang-testcase:///if_null2.dart:32:18 -> IntConstant(42)
+Extra constant evaluation: evaluated: 142, effectively constant: 2
diff --git a/pkg/front_end/testcases/extensions/implicit_extension_inference.dart b/pkg/front_end/testcases/extensions/implicit_extension_inference.dart
index bc59f49..8f549e8 100644
--- a/pkg/front_end/testcases/extensions/implicit_extension_inference.dart
+++ b/pkg/front_end/testcases/extensions/implicit_extension_inference.dart
@@ -1,7 +1,9 @@
 // Copyright (c) 2019, 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.
+
 // @dart=2.9
+
 class A {}
 class B extends A {}
 class C extends B {}
diff --git a/pkg/front_end/testcases/extensions/implicit_extension_inference2.dart b/pkg/front_end/testcases/extensions/implicit_extension_inference2.dart
new file mode 100644
index 0000000..3c4a738
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/implicit_extension_inference2.dart
@@ -0,0 +1,52 @@
+// Copyright (c) 2019, 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.
+
+class A {}
+
+class B extends A {}
+
+class C extends B {}
+
+class GenericClass<T> {}
+
+extension GenericExtension<T> on GenericClass<T> {
+  T? get property => null;
+
+  T? method(T? t) => null;
+
+  S? genericMethod1<S>(S? s) => null;
+}
+
+main() {
+  A? aVariable;
+  B? bVariable;
+  C? cVariable;
+
+  GenericClass<A> aClass = new GenericClass<A>();
+  GenericClass<B> bClass = new GenericClass<B>();
+  GenericClass<C> cClass = new GenericClass<C>();
+
+  aVariable = aClass.property;
+  bVariable = bClass.property;
+  cVariable = cClass.property;
+
+  aVariable = aClass.method(aVariable);
+  bVariable = bClass.method(bVariable);
+  cVariable = cClass.method(cVariable);
+
+  cVariable = aClass.genericMethod1(cVariable);
+  aVariable = aClass.genericMethod1<A>(aVariable);
+  bVariable = aClass.genericMethod1<B>(bVariable);
+  cVariable = aClass.genericMethod1<C>(cVariable);
+
+  cVariable = bClass.genericMethod1(cVariable);
+  aVariable = bClass.genericMethod1<A>(cVariable);
+  bVariable = bClass.genericMethod1<B>(cVariable);
+  cVariable = bClass.genericMethod1<C>(cVariable);
+
+  cVariable = cClass.genericMethod1(cVariable);
+  aVariable = cClass.genericMethod1<A>(cVariable);
+  bVariable = cClass.genericMethod1<B>(cVariable);
+  cVariable = cClass.genericMethod1<C>(cVariable);
+}
diff --git a/pkg/front_end/testcases/extensions/implicit_extension_inference2.dart.textual_outline.expect b/pkg/front_end/testcases/extensions/implicit_extension_inference2.dart.textual_outline.expect
new file mode 100644
index 0000000..56300ca
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/implicit_extension_inference2.dart.textual_outline.expect
@@ -0,0 +1,15 @@
+class A {}
+
+class B extends A {}
+
+class C extends B {}
+
+class GenericClass<T> {}
+
+extension GenericExtension<T> on GenericClass<T> {
+  T? get property => null;
+  T? method(T? t) => null;
+  S? genericMethod1<S>(S? s) => null;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/extensions/implicit_extension_inference2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/extensions/implicit_extension_inference2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..4d38882
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/implicit_extension_inference2.dart.textual_outline_modelled.expect
@@ -0,0 +1,15 @@
+class A {}
+
+class B extends A {}
+
+class C extends B {}
+
+class GenericClass<T> {}
+
+extension GenericExtension<T> on GenericClass<T> {
+  S? genericMethod1<S>(S? s) => null;
+  T? get property => null;
+  T? method(T? t) => null;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/extensions/implicit_extension_inference2.dart.weak.expect b/pkg/front_end/testcases/extensions/implicit_extension_inference2.dart.weak.expect
new file mode 100644
index 0000000..2c5e5d7
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/implicit_extension_inference2.dart.weak.expect
@@ -0,0 +1,67 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    : super self::A::•()
+    ;
+}
+class C extends self::B {
+  synthetic constructor •() → self::C
+    : super self::B::•()
+    ;
+}
+class GenericClass<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::GenericClass<self::GenericClass::T%>
+    : super core::Object::•()
+    ;
+}
+extension GenericExtension<T extends core::Object? = dynamic> on self::GenericClass<T%> {
+  get property = self::GenericExtension|get#property;
+  method method = self::GenericExtension|method;
+  tearoff method = self::GenericExtension|get#method;
+  method genericMethod1 = self::GenericExtension|genericMethod1;
+  tearoff genericMethod1 = self::GenericExtension|get#genericMethod1;
+}
+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>(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>(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>(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>(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;
+  self::B? bVariable;
+  self::C? cVariable;
+  self::GenericClass<self::A> aClass = new self::GenericClass::•<self::A>();
+  self::GenericClass<self::B> bClass = new self::GenericClass::•<self::B>();
+  self::GenericClass<self::C> cClass = new self::GenericClass::•<self::C>();
+  aVariable = self::GenericExtension|get#property<self::A>(aClass);
+  bVariable = self::GenericExtension|get#property<self::B>(bClass);
+  cVariable = self::GenericExtension|get#property<self::C>(cClass);
+  aVariable = self::GenericExtension|method<self::A>(aClass, aVariable);
+  bVariable = self::GenericExtension|method<self::B>(bClass, bVariable);
+  cVariable = self::GenericExtension|method<self::C>(cClass, cVariable);
+  cVariable = self::GenericExtension|genericMethod1<self::A, self::C>(aClass, cVariable);
+  aVariable = self::GenericExtension|genericMethod1<self::A, self::A>(aClass, aVariable);
+  bVariable = self::GenericExtension|genericMethod1<self::A, self::B>(aClass, bVariable);
+  cVariable = self::GenericExtension|genericMethod1<self::A, self::C>(aClass, cVariable);
+  cVariable = self::GenericExtension|genericMethod1<self::B, self::C>(bClass, cVariable);
+  aVariable = self::GenericExtension|genericMethod1<self::B, self::A>(bClass, cVariable);
+  bVariable = self::GenericExtension|genericMethod1<self::B, self::B>(bClass, cVariable);
+  cVariable = self::GenericExtension|genericMethod1<self::B, self::C>(bClass, cVariable);
+  cVariable = self::GenericExtension|genericMethod1<self::C, self::C>(cClass, cVariable);
+  aVariable = self::GenericExtension|genericMethod1<self::C, self::A>(cClass, cVariable);
+  bVariable = self::GenericExtension|genericMethod1<self::C, self::B>(cClass, cVariable);
+  cVariable = self::GenericExtension|genericMethod1<self::C, self::C>(cClass, cVariable);
+}
diff --git a/pkg/front_end/testcases/extensions/implicit_extension_inference2.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/implicit_extension_inference2.dart.weak.modular.expect
new file mode 100644
index 0000000..2c5e5d7
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/implicit_extension_inference2.dart.weak.modular.expect
@@ -0,0 +1,67 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    : super self::A::•()
+    ;
+}
+class C extends self::B {
+  synthetic constructor •() → self::C
+    : super self::B::•()
+    ;
+}
+class GenericClass<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::GenericClass<self::GenericClass::T%>
+    : super core::Object::•()
+    ;
+}
+extension GenericExtension<T extends core::Object? = dynamic> on self::GenericClass<T%> {
+  get property = self::GenericExtension|get#property;
+  method method = self::GenericExtension|method;
+  tearoff method = self::GenericExtension|get#method;
+  method genericMethod1 = self::GenericExtension|genericMethod1;
+  tearoff genericMethod1 = self::GenericExtension|get#genericMethod1;
+}
+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>(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>(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>(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>(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;
+  self::B? bVariable;
+  self::C? cVariable;
+  self::GenericClass<self::A> aClass = new self::GenericClass::•<self::A>();
+  self::GenericClass<self::B> bClass = new self::GenericClass::•<self::B>();
+  self::GenericClass<self::C> cClass = new self::GenericClass::•<self::C>();
+  aVariable = self::GenericExtension|get#property<self::A>(aClass);
+  bVariable = self::GenericExtension|get#property<self::B>(bClass);
+  cVariable = self::GenericExtension|get#property<self::C>(cClass);
+  aVariable = self::GenericExtension|method<self::A>(aClass, aVariable);
+  bVariable = self::GenericExtension|method<self::B>(bClass, bVariable);
+  cVariable = self::GenericExtension|method<self::C>(cClass, cVariable);
+  cVariable = self::GenericExtension|genericMethod1<self::A, self::C>(aClass, cVariable);
+  aVariable = self::GenericExtension|genericMethod1<self::A, self::A>(aClass, aVariable);
+  bVariable = self::GenericExtension|genericMethod1<self::A, self::B>(aClass, bVariable);
+  cVariable = self::GenericExtension|genericMethod1<self::A, self::C>(aClass, cVariable);
+  cVariable = self::GenericExtension|genericMethod1<self::B, self::C>(bClass, cVariable);
+  aVariable = self::GenericExtension|genericMethod1<self::B, self::A>(bClass, cVariable);
+  bVariable = self::GenericExtension|genericMethod1<self::B, self::B>(bClass, cVariable);
+  cVariable = self::GenericExtension|genericMethod1<self::B, self::C>(bClass, cVariable);
+  cVariable = self::GenericExtension|genericMethod1<self::C, self::C>(cClass, cVariable);
+  aVariable = self::GenericExtension|genericMethod1<self::C, self::A>(cClass, cVariable);
+  bVariable = self::GenericExtension|genericMethod1<self::C, self::B>(cClass, cVariable);
+  cVariable = self::GenericExtension|genericMethod1<self::C, self::C>(cClass, cVariable);
+}
diff --git a/pkg/front_end/testcases/extensions/implicit_extension_inference2.dart.weak.outline.expect b/pkg/front_end/testcases/extensions/implicit_extension_inference2.dart.weak.outline.expect
new file mode 100644
index 0000000..dc779ee
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/implicit_extension_inference2.dart.weak.outline.expect
@@ -0,0 +1,39 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    ;
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    ;
+}
+class C extends self::B {
+  synthetic constructor •() → self::C
+    ;
+}
+class GenericClass<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::GenericClass<self::GenericClass::T%>
+    ;
+}
+extension GenericExtension<T extends core::Object? = dynamic> on self::GenericClass<T%> {
+  get property = self::GenericExtension|get#property;
+  method method = self::GenericExtension|method;
+  tearoff method = self::GenericExtension|get#method;
+  method genericMethod1 = self::GenericExtension|genericMethod1;
+  tearoff genericMethod1 = self::GenericExtension|get#genericMethod1;
+}
+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>(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>(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>(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>(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_inference2.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/implicit_extension_inference2.dart.weak.transformed.expect
new file mode 100644
index 0000000..2c5e5d7
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/implicit_extension_inference2.dart.weak.transformed.expect
@@ -0,0 +1,67 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+}
+class B extends self::A {
+  synthetic constructor •() → self::B
+    : super self::A::•()
+    ;
+}
+class C extends self::B {
+  synthetic constructor •() → self::C
+    : super self::B::•()
+    ;
+}
+class GenericClass<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::GenericClass<self::GenericClass::T%>
+    : super core::Object::•()
+    ;
+}
+extension GenericExtension<T extends core::Object? = dynamic> on self::GenericClass<T%> {
+  get property = self::GenericExtension|get#property;
+  method method = self::GenericExtension|method;
+  tearoff method = self::GenericExtension|get#method;
+  method genericMethod1 = self::GenericExtension|genericMethod1;
+  tearoff genericMethod1 = self::GenericExtension|get#genericMethod1;
+}
+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>(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>(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>(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>(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;
+  self::B? bVariable;
+  self::C? cVariable;
+  self::GenericClass<self::A> aClass = new self::GenericClass::•<self::A>();
+  self::GenericClass<self::B> bClass = new self::GenericClass::•<self::B>();
+  self::GenericClass<self::C> cClass = new self::GenericClass::•<self::C>();
+  aVariable = self::GenericExtension|get#property<self::A>(aClass);
+  bVariable = self::GenericExtension|get#property<self::B>(bClass);
+  cVariable = self::GenericExtension|get#property<self::C>(cClass);
+  aVariable = self::GenericExtension|method<self::A>(aClass, aVariable);
+  bVariable = self::GenericExtension|method<self::B>(bClass, bVariable);
+  cVariable = self::GenericExtension|method<self::C>(cClass, cVariable);
+  cVariable = self::GenericExtension|genericMethod1<self::A, self::C>(aClass, cVariable);
+  aVariable = self::GenericExtension|genericMethod1<self::A, self::A>(aClass, aVariable);
+  bVariable = self::GenericExtension|genericMethod1<self::A, self::B>(aClass, bVariable);
+  cVariable = self::GenericExtension|genericMethod1<self::A, self::C>(aClass, cVariable);
+  cVariable = self::GenericExtension|genericMethod1<self::B, self::C>(bClass, cVariable);
+  aVariable = self::GenericExtension|genericMethod1<self::B, self::A>(bClass, cVariable);
+  bVariable = self::GenericExtension|genericMethod1<self::B, self::B>(bClass, cVariable);
+  cVariable = self::GenericExtension|genericMethod1<self::B, self::C>(bClass, cVariable);
+  cVariable = self::GenericExtension|genericMethod1<self::C, self::C>(cClass, cVariable);
+  aVariable = self::GenericExtension|genericMethod1<self::C, self::A>(cClass, cVariable);
+  bVariable = self::GenericExtension|genericMethod1<self::C, self::B>(cClass, cVariable);
+  cVariable = self::GenericExtension|genericMethod1<self::C, self::C>(cClass, cVariable);
+}
diff --git a/pkg/front_end/testcases/extensions/implicit_this.dart b/pkg/front_end/testcases/extensions/implicit_this.dart
index 12db6db9..b313805 100644
--- a/pkg/front_end/testcases/extensions/implicit_this.dart
+++ b/pkg/front_end/testcases/extensions/implicit_this.dart
@@ -1,18 +1,18 @@
 // Copyright (c) 2019, 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.
-// @dart=2.9
+
 class A1 {
-  Object field;
+  Object? field;
   void method1() {}
 }
 
 extension A2 on A1 {
   void method2() => method1();
 
-  Object method3() => field;
+  Object? method3() => field;
 
-  void method4(Object o) {
+  void method4(Object? o) {
     field = o;
   }
 }
diff --git a/pkg/front_end/testcases/extensions/implicit_this.dart.textual_outline.expect b/pkg/front_end/testcases/extensions/implicit_this.dart.textual_outline.expect
index 50496bd..6281540 100644
--- a/pkg/front_end/testcases/extensions/implicit_this.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/extensions/implicit_this.dart.textual_outline.expect
@@ -1,13 +1,12 @@
-// @dart = 2.9
 class A1 {
-  Object field;
+  Object? field;
   void method1() {}
 }
 
 extension A2 on A1 {
   void method2() => method1();
-  Object method3() => field;
-  void method4(Object o) {}
+  Object? method3() => field;
+  void method4(Object? o) {}
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/extensions/implicit_this.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/extensions/implicit_this.dart.textual_outline_modelled.expect
index f48f869..d3cdb67 100644
--- a/pkg/front_end/testcases/extensions/implicit_this.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/extensions/implicit_this.dart.textual_outline_modelled.expect
@@ -1,13 +1,12 @@
-// @dart = 2.9
 class A1 {
-  Object field;
+  Object? field;
   void method1() {}
 }
 
 extension A2 on A1 {
-  Object method3() => field;
+  Object? method3() => field;
   void method2() => method1();
-  void method4(Object o) {}
+  void method4(Object? o) {}
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/extensions/implicit_this.dart.weak.expect b/pkg/front_end/testcases/extensions/implicit_this.dart.weak.expect
index 9328ef6..4c3c918 100644
--- a/pkg/front_end/testcases/extensions/implicit_this.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/implicit_this.dart.weak.expect
@@ -1,25 +1,15 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A1 extends core::Object {
-  field core::Object* field = null;
-  synthetic constructor •() → self::A1*
+  field core::Object? field = null;
+  synthetic constructor •() → self::A1
     : super core::Object::•()
     ;
   method method1() → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension A2 on self::A1* {
+extension A2 on self::A1 {
   method method2 = self::A2|method2;
   tearoff method2 = self::A2|get#method2;
   method method3 = self::A2|method3;
@@ -27,17 +17,17 @@
   method method4 = self::A2|method4;
   tearoff method4 = self::A2|get#method4;
 }
-static method A2|method2(lowered final self::A1* #this) → void
-  return #this.{self::A1::method1}(){() →* void};
-static method A2|get#method2(lowered final self::A1* #this) → () →* void
+static method A2|method2(lowered final self::A1 #this) → void
+  return #this.{self::A1::method1}(){() → void};
+static method A2|get#method2(lowered final self::A1 #this) → () → void
   return () → void => self::A2|method2(#this);
-static method A2|method3(lowered final self::A1* #this) → core::Object*
-  return #this.{self::A1::field}{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(lowered final self::A1* #this, core::Object* o) → void {
+static method A2|method3(lowered final self::A1 #this) → core::Object?
+  return #this.{self::A1::field}{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(lowered final self::A1 #this, core::Object? o) → void {
   #this.{self::A1::field} = o;
 }
-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 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.weak.modular.expect b/pkg/front_end/testcases/extensions/implicit_this.dart.weak.modular.expect
index 9328ef6..4c3c918 100644
--- a/pkg/front_end/testcases/extensions/implicit_this.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/extensions/implicit_this.dart.weak.modular.expect
@@ -1,25 +1,15 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A1 extends core::Object {
-  field core::Object* field = null;
-  synthetic constructor •() → self::A1*
+  field core::Object? field = null;
+  synthetic constructor •() → self::A1
     : super core::Object::•()
     ;
   method method1() → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension A2 on self::A1* {
+extension A2 on self::A1 {
   method method2 = self::A2|method2;
   tearoff method2 = self::A2|get#method2;
   method method3 = self::A2|method3;
@@ -27,17 +17,17 @@
   method method4 = self::A2|method4;
   tearoff method4 = self::A2|get#method4;
 }
-static method A2|method2(lowered final self::A1* #this) → void
-  return #this.{self::A1::method1}(){() →* void};
-static method A2|get#method2(lowered final self::A1* #this) → () →* void
+static method A2|method2(lowered final self::A1 #this) → void
+  return #this.{self::A1::method1}(){() → void};
+static method A2|get#method2(lowered final self::A1 #this) → () → void
   return () → void => self::A2|method2(#this);
-static method A2|method3(lowered final self::A1* #this) → core::Object*
-  return #this.{self::A1::field}{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(lowered final self::A1* #this, core::Object* o) → void {
+static method A2|method3(lowered final self::A1 #this) → core::Object?
+  return #this.{self::A1::field}{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(lowered final self::A1 #this, core::Object? o) → void {
   #this.{self::A1::field} = o;
 }
-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 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.weak.outline.expect b/pkg/front_end/testcases/extensions/implicit_this.dart.weak.outline.expect
index 21fa5c7..16c7c975 100644
--- a/pkg/front_end/testcases/extensions/implicit_this.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extensions/implicit_this.dart.weak.outline.expect
@@ -1,25 +1,15 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A1 extends core::Object {
-  field core::Object* field;
-  synthetic constructor •() → self::A1*
+  field core::Object? field;
+  synthetic constructor •() → self::A1
     ;
   method method1() → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension A2 on self::A1* {
+extension A2 on self::A1 {
   method method2 = self::A2|method2;
   tearoff method2 = self::A2|get#method2;
   method method3 = self::A2|method3;
@@ -27,17 +17,17 @@
   method method4 = self::A2|method4;
   tearoff method4 = self::A2|get#method4;
 }
-static method A2|method2(lowered final self::A1* #this) → void
+static method A2|method2(lowered final self::A1 #this) → void
   ;
-static method A2|get#method2(lowered 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(lowered final self::A1* #this) → core::Object*
+static method A2|method3(lowered 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(lowered final self::A1* #this, core::Object* o) → void
+static method A2|get#method3(lowered final self::A1 #this) → () → core::Object?
+  return () → core::Object? => self::A2|method3(#this);
+static method A2|method4(lowered final self::A1 #this, core::Object? o) → 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 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.weak.transformed.expect b/pkg/front_end/testcases/extensions/implicit_this.dart.weak.transformed.expect
index 9328ef6..4c3c918 100644
--- a/pkg/front_end/testcases/extensions/implicit_this.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/implicit_this.dart.weak.transformed.expect
@@ -1,25 +1,15 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A1 extends core::Object {
-  field core::Object* field = null;
-  synthetic constructor •() → self::A1*
+  field core::Object? field = null;
+  synthetic constructor •() → self::A1
     : super core::Object::•()
     ;
   method method1() → void {}
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension A2 on self::A1* {
+extension A2 on self::A1 {
   method method2 = self::A2|method2;
   tearoff method2 = self::A2|get#method2;
   method method3 = self::A2|method3;
@@ -27,17 +17,17 @@
   method method4 = self::A2|method4;
   tearoff method4 = self::A2|get#method4;
 }
-static method A2|method2(lowered final self::A1* #this) → void
-  return #this.{self::A1::method1}(){() →* void};
-static method A2|get#method2(lowered final self::A1* #this) → () →* void
+static method A2|method2(lowered final self::A1 #this) → void
+  return #this.{self::A1::method1}(){() → void};
+static method A2|get#method2(lowered final self::A1 #this) → () → void
   return () → void => self::A2|method2(#this);
-static method A2|method3(lowered final self::A1* #this) → core::Object*
-  return #this.{self::A1::field}{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(lowered final self::A1* #this, core::Object* o) → void {
+static method A2|method3(lowered final self::A1 #this) → core::Object?
+  return #this.{self::A1::field}{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(lowered final self::A1 #this, core::Object? o) → void {
   #this.{self::A1::field} = o;
 }
-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 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 b/pkg/front_end/testcases/extensions/import_from_dill/main.dart
index 3c64e58..6524b05 100644
--- a/pkg/front_end/testcases/extensions/import_from_dill/main.dart
+++ b/pkg/front_end/testcases/extensions/import_from_dill/main.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 import 'main_lib1.dart';
 
 main() {
diff --git a/pkg/front_end/testcases/extensions/import_from_dill/main.dart.textual_outline.expect b/pkg/front_end/testcases/extensions/import_from_dill/main.dart.textual_outline.expect
index 37f878a..b27adef 100644
--- a/pkg/front_end/testcases/extensions/import_from_dill/main.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/extensions/import_from_dill/main.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'main_lib1.dart';
 
 main() {}
diff --git a/pkg/front_end/testcases/extensions/import_from_dill/main.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/extensions/import_from_dill/main.dart.textual_outline_modelled.expect
index 37f878a..b27adef 100644
--- a/pkg/front_end/testcases/extensions/import_from_dill/main.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/extensions/import_from_dill/main.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'main_lib1.dart';
 
 main() {}
diff --git a/pkg/front_end/testcases/extensions/import_from_dill/main.dart.weak.expect b/pkg/front_end/testcases/extensions/import_from_dill/main.dart.weak.expect
index 4dc6953..4b282dc 100644
--- a/pkg/front_end/testcases/extensions/import_from_dill/main.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/import_from_dill/main.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "main_lib1.dart" as mai;
 import "dart:core" as core;
@@ -16,11 +16,11 @@
   #C2;
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as mai;
 import "dart:core" as core;
 
-extension Extension on core::int* {
+extension Extension on core::int {
   get instanceProperty = mai::Extension|get#instanceProperty;
   method instanceMethod = mai::Extension|instanceMethod;
   tearoff instanceMethod = mai::Extension|get#instanceMethod;
@@ -32,18 +32,18 @@
   set instanceProperty = mai::Extension|set#instanceProperty;
   static set staticProperty = set mai::Extension|staticProperty;
 }
-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(lowered final core::int* #this) → core::int*
+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(lowered final core::int #this) → core::int
   return 42;
-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
+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*
+static get Extension|staticProperty() → core::int
   return 42;
-static set Extension|staticProperty(core::int* value) → void {}
+static set Extension|staticProperty(core::int value) → void {}
 static method Extension|staticMethod() → void {}
 
 constants  {
diff --git a/pkg/front_end/testcases/extensions/import_from_dill/main.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/import_from_dill/main.dart.weak.modular.expect
index 216ab75..04aa597 100644
--- a/pkg/front_end/testcases/extensions/import_from_dill/main.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/extensions/import_from_dill/main.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "main_lib1.dart" as mai;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/extensions/import_from_dill/main.dart.weak.outline.expect b/pkg/front_end/testcases/extensions/import_from_dill/main.dart.weak.outline.expect
index 71c7348..9e39c5f 100644
--- a/pkg/front_end/testcases/extensions/import_from_dill/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extensions/import_from_dill/main.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 import "org-dartlang-testcase:///main_lib1.dart";
@@ -6,11 +6,11 @@
 static method main() → dynamic
   ;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
-extension Extension on core::int* {
+extension Extension on core::int {
   get instanceProperty = self2::Extension|get#instanceProperty;
   method instanceMethod = self2::Extension|instanceMethod;
   tearoff instanceMethod = self2::Extension|get#instanceMethod;
@@ -22,20 +22,20 @@
   set instanceProperty = self2::Extension|set#instanceProperty;
   static set staticProperty = set self2::Extension|staticProperty;
 }
-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(lowered final core::int* #this) → core::int*
+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(lowered final core::int #this) → core::int
   ;
-static method Extension|set#instanceProperty(lowered 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(lowered final core::int* #this) → void
+static method Extension|instanceMethod(lowered final core::int #this) → void
   ;
-static method Extension|get#instanceMethod(lowered 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*
+static get Extension|staticProperty() → core::int
   ;
-static set Extension|staticProperty(core::int* value) → void
+static set Extension|staticProperty(core::int value) → void
   ;
 static method Extension|staticMethod() → void
   ;
diff --git a/pkg/front_end/testcases/extensions/import_from_dill/main.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/import_from_dill/main.dart.weak.transformed.expect
index 4dc6953..4b282dc 100644
--- a/pkg/front_end/testcases/extensions/import_from_dill/main.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/import_from_dill/main.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "main_lib1.dart" as mai;
 import "dart:core" as core;
@@ -16,11 +16,11 @@
   #C2;
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as mai;
 import "dart:core" as core;
 
-extension Extension on core::int* {
+extension Extension on core::int {
   get instanceProperty = mai::Extension|get#instanceProperty;
   method instanceMethod = mai::Extension|instanceMethod;
   tearoff instanceMethod = mai::Extension|get#instanceMethod;
@@ -32,18 +32,18 @@
   set instanceProperty = mai::Extension|set#instanceProperty;
   static set staticProperty = set mai::Extension|staticProperty;
 }
-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(lowered final core::int* #this) → core::int*
+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(lowered final core::int #this) → core::int
   return 42;
-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
+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*
+static get Extension|staticProperty() → core::int
   return 42;
-static set Extension|staticProperty(core::int* value) → void {}
+static set Extension|staticProperty(core::int value) → void {}
 static method Extension|staticMethod() → void {}
 
 constants  {
diff --git a/pkg/front_end/testcases/extensions/import_from_dill/main_lib1.dart b/pkg/front_end/testcases/extensions/import_from_dill/main_lib1.dart
index 4eba373..b08ae03 100644
--- a/pkg/front_end/testcases/extensions/import_from_dill/main_lib1.dart
+++ b/pkg/front_end/testcases/extensions/import_from_dill/main_lib1.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 extension Extension on int {
   int get instanceProperty => 42;
   void set instanceProperty(int value) {}
diff --git a/pkg/front_end/testcases/extensions/import_via_prefix.dart b/pkg/front_end/testcases/extensions/import_via_prefix.dart
index 859334a..a266734 100644
--- a/pkg/front_end/testcases/extensions/import_via_prefix.dart
+++ b/pkg/front_end/testcases/extensions/import_via_prefix.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2019, 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.
-// @dart=2.9
+
 import 'import_via_prefix_lib.dart' as prefix;
 
 main() {
diff --git a/pkg/front_end/testcases/extensions/import_via_prefix.dart.textual_outline.expect b/pkg/front_end/testcases/extensions/import_via_prefix.dart.textual_outline.expect
index 493b461..b1848ace 100644
--- a/pkg/front_end/testcases/extensions/import_via_prefix.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/extensions/import_via_prefix.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'import_via_prefix_lib.dart' as prefix;
 
 main() {}
diff --git a/pkg/front_end/testcases/extensions/import_via_prefix.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/extensions/import_via_prefix.dart.textual_outline_modelled.expect
index 60e4620..72ac1a4 100644
--- a/pkg/front_end/testcases/extensions/import_via_prefix.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/extensions/import_via_prefix.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'import_via_prefix_lib.dart' as prefix;
 
 expect(expected, actual) {}
diff --git a/pkg/front_end/testcases/extensions/import_via_prefix.dart.weak.expect b/pkg/front_end/testcases/extensions/import_via_prefix.dart.weak.expect
index 0b2f376..533f4cd 100644
--- a/pkg/front_end/testcases/extensions/import_via_prefix.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/import_via_prefix.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "import_via_prefix_lib.dart" as imp;
 import "dart:core" as core;
@@ -9,19 +9,19 @@
   self::expect(3, imp::Extension|method("foo"));
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as imp;
 import "dart:core" as core;
 
-extension Extension on core::String* {
+extension Extension on core::String {
   method method = imp::Extension|method;
   tearoff method = imp::Extension|get#method;
 }
-static method Extension|method(lowered final core::String* #this) → core::int*
-  return #this.{core::String::length}{core::int*};
-static method Extension|get#method(lowered final core::String* #this) → () →* core::int*
-  return () → core::int* => imp::Extension|method(#this);
+static method Extension|method(lowered final core::String #this) → core::int
+  return #this.{core::String::length}{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.weak.modular.expect b/pkg/front_end/testcases/extensions/import_via_prefix.dart.weak.modular.expect
index 0b2f376..533f4cd 100644
--- a/pkg/front_end/testcases/extensions/import_via_prefix.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/extensions/import_via_prefix.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "import_via_prefix_lib.dart" as imp;
 import "dart:core" as core;
@@ -9,19 +9,19 @@
   self::expect(3, imp::Extension|method("foo"));
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as imp;
 import "dart:core" as core;
 
-extension Extension on core::String* {
+extension Extension on core::String {
   method method = imp::Extension|method;
   tearoff method = imp::Extension|get#method;
 }
-static method Extension|method(lowered final core::String* #this) → core::int*
-  return #this.{core::String::length}{core::int*};
-static method Extension|get#method(lowered final core::String* #this) → () →* core::int*
-  return () → core::int* => imp::Extension|method(#this);
+static method Extension|method(lowered final core::String #this) → core::int
+  return #this.{core::String::length}{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.weak.outline.expect b/pkg/front_end/testcases/extensions/import_via_prefix.dart.weak.outline.expect
index 920ce9c..68d8db6 100644
--- a/pkg/front_end/testcases/extensions/import_via_prefix.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extensions/import_via_prefix.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 import "org-dartlang-testcase:///import_via_prefix_lib.dart" as prefix;
@@ -8,15 +8,15 @@
 static method expect(dynamic expected, dynamic actual) → dynamic
   ;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
-extension Extension on core::String* {
+extension Extension on core::String {
   method method = self2::Extension|method;
   tearoff method = self2::Extension|get#method;
 }
-static method Extension|method(lowered final core::String* #this) → core::int*
+static method Extension|method(lowered 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);
+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.weak.transformed.expect b/pkg/front_end/testcases/extensions/import_via_prefix.dart.weak.transformed.expect
index 0b2f376..533f4cd 100644
--- a/pkg/front_end/testcases/extensions/import_via_prefix.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/import_via_prefix.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "import_via_prefix_lib.dart" as imp;
 import "dart:core" as core;
@@ -9,19 +9,19 @@
   self::expect(3, imp::Extension|method("foo"));
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}";
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as imp;
 import "dart:core" as core;
 
-extension Extension on core::String* {
+extension Extension on core::String {
   method method = imp::Extension|method;
   tearoff method = imp::Extension|get#method;
 }
-static method Extension|method(lowered final core::String* #this) → core::int*
-  return #this.{core::String::length}{core::int*};
-static method Extension|get#method(lowered final core::String* #this) → () →* core::int*
-  return () → core::int* => imp::Extension|method(#this);
+static method Extension|method(lowered final core::String #this) → core::int
+  return #this.{core::String::length}{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_lib.dart b/pkg/front_end/testcases/extensions/import_via_prefix_lib.dart
index 12a6894..a2f111a 100644
--- a/pkg/front_end/testcases/extensions/import_via_prefix_lib.dart
+++ b/pkg/front_end/testcases/extensions/import_via_prefix_lib.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2019, 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.
-// @dart=2.9
+
 extension Extension on String {
   int method() => length;
 }
diff --git a/pkg/front_end/testcases/extensions/index.dart b/pkg/front_end/testcases/extensions/index.dart
index c33cd60..ab0f01a 100644
--- a/pkg/front_end/testcases/extensions/index.dart
+++ b/pkg/front_end/testcases/extensions/index.dart
@@ -1,7 +1,9 @@
 // Copyright (c) 2019, 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.
+
 // @dart=2.9
+
 class MapLike<K, V> {
   final Map<K, V> _map = {};
 
diff --git a/pkg/front_end/testcases/extensions/index.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/index.dart.weak.transformed.expect
index 1b49a66..5741a4c 100644
--- a/pkg/front_end/testcases/extensions/index.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/index.dart.weak.transformed.expect
@@ -124,78 +124,78 @@
 
 
 Extra constant evaluation status:
-Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:31:20 -> IntConstant(1)
-Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:31:25 -> StringConstant("2")
-Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:31:25 -> StringConstant("2")
-Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:33:8 -> IntConstant(1)
-Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:33:8 -> IntConstant(1)
-Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:35:20 -> IntConstant(1)
-Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:35:20 -> IntConstant(1)
-Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:35:27 -> StringConstant("4")
-Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:35:27 -> StringConstant("4")
-Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:37:8 -> IntConstant(2)
-Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:37:8 -> IntConstant(2)
-Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:39:20 -> IntConstant(3)
-Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:39:20 -> IntConstant(3)
-Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:39:27 -> StringConstant("3")
-Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:39:27 -> StringConstant("3")
-Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:43:18 -> IntConstant(0)
-Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:43:23 -> IntConstant(1)
-Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:43:23 -> IntConstant(1)
-Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:44:18 -> IntConstant(0)
-Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:44:18 -> IntConstant(0)
+Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:33:20 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:33:25 -> StringConstant("2")
+Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:33:25 -> StringConstant("2")
+Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:35:8 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:35:8 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:37:20 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:37:20 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:37:27 -> StringConstant("4")
+Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:37:27 -> StringConstant("4")
+Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:39:8 -> IntConstant(2)
+Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:39:8 -> IntConstant(2)
+Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:41:20 -> IntConstant(3)
+Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:41:20 -> IntConstant(3)
+Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:41:27 -> StringConstant("3")
+Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:41:27 -> StringConstant("3")
 Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:45:18 -> IntConstant(0)
-Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:45:18 -> IntConstant(0)
+Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:45:23 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:45:23 -> IntConstant(1)
 Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:46:18 -> IntConstant(0)
 Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:46:18 -> IntConstant(0)
-Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:48:20 -> IntConstant(0)
-Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:48:20 -> IntConstant(0)
-Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:60:49 -> StringConstant("2")
-Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:60:49 -> StringConstant("2")
-Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:62:32 -> IntConstant(1)
-Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:62:32 -> IntConstant(1)
-Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:64:44 -> IntConstant(1)
-Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:64:44 -> IntConstant(1)
-Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:64:51 -> StringConstant("4")
-Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:64:51 -> StringConstant("4")
-Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:66:32 -> IntConstant(2)
-Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:66:32 -> IntConstant(2)
-Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:68:44 -> IntConstant(3)
-Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:68:44 -> IntConstant(3)
-Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:68:51 -> StringConstant("3")
-Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:68:51 -> StringConstant("3")
-Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:72:44 -> IntConstant(1)
-Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:72:44 -> IntConstant(1)
-Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:73:39 -> IntConstant(0)
-Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:73:39 -> IntConstant(0)
-Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:74:39 -> IntConstant(0)
-Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:74:39 -> IntConstant(0)
+Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:47:18 -> IntConstant(0)
+Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:47:18 -> IntConstant(0)
+Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:48:18 -> IntConstant(0)
+Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:48:18 -> IntConstant(0)
+Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:50:20 -> IntConstant(0)
+Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:50:20 -> IntConstant(0)
+Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:62:49 -> StringConstant("2")
+Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:62:49 -> StringConstant("2")
+Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:64:32 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:64:32 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:66:44 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:66:44 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:66:51 -> StringConstant("4")
+Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:66:51 -> StringConstant("4")
+Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:68:32 -> IntConstant(2)
+Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:68:32 -> IntConstant(2)
+Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:70:44 -> IntConstant(3)
+Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:70:44 -> IntConstant(3)
+Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:70:51 -> StringConstant("3")
+Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:70:51 -> StringConstant("3")
+Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:74:44 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:74:44 -> IntConstant(1)
 Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:75:39 -> IntConstant(0)
 Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:75:39 -> IntConstant(0)
-Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:77:41 -> IntConstant(0)
-Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:77:41 -> IntConstant(0)
-Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:89:36 -> StringConstant("2")
-Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:89:36 -> StringConstant("2")
-Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:91:19 -> IntConstant(1)
-Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:91:19 -> IntConstant(1)
-Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:93:31 -> IntConstant(1)
-Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:93:31 -> IntConstant(1)
-Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:93:38 -> StringConstant("4")
-Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:93:38 -> StringConstant("4")
-Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:95:19 -> IntConstant(2)
-Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:95:19 -> IntConstant(2)
-Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:97:31 -> IntConstant(3)
-Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:97:31 -> IntConstant(3)
-Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:97:38 -> StringConstant("3")
-Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:97:38 -> StringConstant("3")
-Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:101:34 -> IntConstant(1)
-Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:101:34 -> IntConstant(1)
-Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:102:29 -> IntConstant(0)
-Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:102:29 -> IntConstant(0)
-Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:103:29 -> IntConstant(0)
-Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:103:29 -> IntConstant(0)
+Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:76:39 -> IntConstant(0)
+Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:76:39 -> IntConstant(0)
+Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:77:39 -> IntConstant(0)
+Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:77:39 -> IntConstant(0)
+Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:79:41 -> IntConstant(0)
+Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:79:41 -> IntConstant(0)
+Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:91:36 -> StringConstant("2")
+Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:91:36 -> StringConstant("2")
+Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:93:19 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:93:19 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:95:31 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:95:31 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:95:38 -> StringConstant("4")
+Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:95:38 -> StringConstant("4")
+Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:97:19 -> IntConstant(2)
+Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:97:19 -> IntConstant(2)
+Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:99:31 -> IntConstant(3)
+Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:99:31 -> IntConstant(3)
+Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:99:38 -> StringConstant("3")
+Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:99:38 -> StringConstant("3")
+Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:103:34 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:103:34 -> IntConstant(1)
 Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:104:29 -> IntConstant(0)
 Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:104:29 -> IntConstant(0)
-Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:106:31 -> IntConstant(0)
-Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:106:31 -> IntConstant(0)
+Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:105:29 -> IntConstant(0)
+Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:105:29 -> IntConstant(0)
+Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:106:29 -> IntConstant(0)
+Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:106:29 -> IntConstant(0)
+Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:108:31 -> IntConstant(0)
+Evaluated: VariableGet @ org-dartlang-testcase:///index.dart:108:31 -> IntConstant(0)
 Extra constant evaluation: evaluated: 571, effectively constant: 74
diff --git a/pkg/front_end/testcases/extensions/index2.dart b/pkg/front_end/testcases/extensions/index2.dart
new file mode 100644
index 0000000..894f16a
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/index2.dart
@@ -0,0 +1,129 @@
+// Copyright (c) 2019, 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.
+
+class MapLike<K, V> {
+  final Map<K, V> _map = {};
+
+  V? get(Object key) => _map[key];
+  V put(K key, V value) => _map[key] = value;
+}
+
+extension Extension<K, V> on MapLike<K, V> {
+  V? operator [](Object key) => get(key);
+  void operator []=(K key, V value) => put(key, value);
+}
+
+class MapLike2<K, V> {
+  final Map<K, V> _map = {};
+  final V defaultValue;
+
+  MapLike2(this.defaultValue);
+
+  V get(Object key) => _map[key] ?? defaultValue;
+  V put(K key, V value) => _map[key] = value;
+}
+
+extension Extension2<K, V> on MapLike2<K, V> {
+  V operator [](Object key) => get(key);
+  void operator []=(K key, V value) => put(key, value);
+}
+
+main() {
+  implicit();
+  explicitWithTypeArguments();
+  explicitInferredTypeArguments();
+}
+
+implicit() {
+  MapLike<int, String> map1 = new MapLike();
+  expect(null, map1[0]);
+  map1.put(0, '0');
+  expect('0', map1[0]);
+  expect(null, map1[1]);
+  map1[1] = '1';
+  expect('1', map1[1]);
+  expect('2', map1[1] = '2');
+  expect('2', map1[1]);
+  map1[1] ??= '3';
+  expect('2', map1[1]);
+  expect('2', map1[1] ??= '4');
+  expect('2', map1[1]);
+  map1[2] ??= '2';
+  expect('2', map1[2]);
+  expect('3', map1[3] ??= '3');
+  expect('3', map1[3]);
+
+  MapLike2<int, int> map2 = new MapLike2(0);
+  expect(1, map2[0] = 1);
+  expect(3, map2[0] += 2);
+  expect(5, map2[0] += 2);
+  expect(5, map2[0]++);
+  expect(6, map2[0]);
+  expect(5, --map2[0]);
+  expect(5, map2[0]);
+}
+
+explicitWithTypeArguments() {
+  MapLike<int, String> map1 = new MapLike();
+  expect(null, Extension<int, String>(map1)[0]);
+  map1.put(0, '0');
+  expect('0', Extension<int, String>(map1)[0]);
+  expect(null, Extension<int, String>(map1)[1]);
+  Extension<int, String>(map1)[1] = '1';
+  expect('1', Extension<int, String>(map1)[1]);
+  expect('2', Extension<int, String>(map1)[1] = '2');
+  expect('2', Extension<int, String>(map1)[1]);
+  Extension<int, String>(map1)[1] ??= '3';
+  expect('2', Extension<int, String>(map1)[1]);
+  expect('2', Extension<int, String>(map1)[1] ??= '4');
+  expect('2', Extension<int, String>(map1)[1]);
+  Extension<int, String>(map1)[2] ??= '2';
+  expect('2', Extension<int, String>(map1)[2]);
+  expect('3', Extension<int, String>(map1)[3] ??= '3');
+  expect('3', Extension<int, String>(map1)[3]);
+
+  MapLike2<int, int> map2 = new MapLike2(0);
+  expect(1, Extension2<int, int>(map2)[0] = 1);
+  expect(3, Extension2<int, int>(map2)[0] += 2);
+  expect(5, Extension2<int, int>(map2)[0] += 2);
+  expect(5, Extension2<int, int>(map2)[0]++);
+  expect(6, Extension2<int, int>(map2)[0]);
+  expect(5, --Extension2<int, int>(map2)[0]);
+  expect(5, Extension2<int, int>(map2)[0]);
+}
+
+explicitInferredTypeArguments() {
+  MapLike<int, String> map1 = new MapLike();
+  expect(null, Extension(map1)[0]);
+  map1.put(0, '0');
+  expect('0', Extension(map1)[0]);
+  expect(null, Extension(map1)[1]);
+  Extension(map1)[1] = '1';
+  expect('1', Extension(map1)[1]);
+  expect('2', Extension(map1)[1] = '2');
+  expect('2', Extension(map1)[1]);
+  Extension(map1)[1] ??= '3';
+  expect('2', Extension(map1)[1]);
+  expect('2', Extension(map1)[1] ??= '4');
+  expect('2', Extension(map1)[1]);
+  Extension(map1)[2] ??= '2';
+  expect('2', Extension(map1)[2]);
+  expect('3', Extension(map1)[3] ??= '3');
+  expect('3', Extension(map1)[3]);
+
+  MapLike2<int, int> map2 = new MapLike2(0);
+  expect(1, Extension2(map2)[0] = 1);
+  expect(3, Extension2(map2)[0] += 2);
+  expect(5, Extension2(map2)[0] += 2);
+  expect(5, Extension2(map2)[0]++);
+  expect(6, Extension2(map2)[0]);
+  expect(5, --Extension2(map2)[0]);
+  expect(5, Extension2(map2)[0]);
+}
+
+expect(expected, actual) {
+  if (expected != actual) {
+    throw 'Mismatch: expected=$expected, actual=$actual';
+  }
+}
diff --git a/pkg/front_end/testcases/extensions/index2.dart.textual_outline.expect b/pkg/front_end/testcases/extensions/index2.dart.textual_outline.expect
new file mode 100644
index 0000000..fcfebe2
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/index2.dart.textual_outline.expect
@@ -0,0 +1,29 @@
+class MapLike<K, V> {
+  final Map<K, V> _map = {};
+  V? get(Object key) => _map[key];
+  V put(K key, V value) => _map[key] = value;
+}
+
+extension Extension<K, V> on MapLike<K, V> {
+  V? operator [](Object key) => get(key);
+  void operator []=(K key, V value) => put(key, value);
+}
+
+class MapLike2<K, V> {
+  final Map<K, V> _map = {};
+  final V defaultValue;
+  MapLike2(this.defaultValue);
+  V get(Object key) => _map[key] ?? defaultValue;
+  V put(K key, V value) => _map[key] = value;
+}
+
+extension Extension2<K, V> on MapLike2<K, V> {
+  V operator [](Object key) => get(key);
+  void operator []=(K key, V value) => put(key, value);
+}
+
+main() {}
+implicit() {}
+explicitWithTypeArguments() {}
+explicitInferredTypeArguments() {}
+expect(expected, actual) {}
diff --git a/pkg/front_end/testcases/extensions/index2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/extensions/index2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..5dda1bd3
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/index2.dart.textual_outline_modelled.expect
@@ -0,0 +1,30 @@
+class MapLike<K, V> {
+  V? get(Object key) => _map[key];
+  V put(K key, V value) => _map[key] = value;
+  final Map<K, V> _map = {};
+}
+
+class MapLike2<K, V> {
+  MapLike2(this.defaultValue);
+  V get(Object key) => _map[key] ?? defaultValue;
+  V put(K key, V value) => _map[key] = value;
+  final Map<K, V> _map = {};
+  final V defaultValue;
+}
+
+expect(expected, actual) {}
+explicitInferredTypeArguments() {}
+explicitWithTypeArguments() {}
+
+extension Extension<K, V> on MapLike<K, V> {
+  V? operator [](Object key) => get(key);
+  void operator []=(K key, V value) => put(key, value);
+}
+
+extension Extension2<K, V> on MapLike2<K, V> {
+  V operator [](Object key) => get(key);
+  void operator []=(K key, V value) => put(key, value);
+}
+
+implicit() {}
+main() {}
diff --git a/pkg/front_end/testcases/extensions/index2.dart.weak.expect b/pkg/front_end/testcases/extensions/index2.dart.weak.expect
new file mode 100644
index 0000000..25a3f28
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/index2.dart.weak.expect
@@ -0,0 +1,132 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class MapLike<K extends core::Object? = dynamic, V extends core::Object? = dynamic> extends core::Object {
+  final field core::Map<self::MapLike::K%, self::MapLike::V%> _map = <self::MapLike::K%, self::MapLike::V%>{};
+  synthetic constructor •() → self::MapLike<self::MapLike::K%, self::MapLike::V%>
+    : super core::Object::•()
+    ;
+  method get(core::Object key) → self::MapLike::V?
+    return this.{self::MapLike::_map}{core::Map<self::MapLike::K%, self::MapLike::V%>}.{core::Map::[]}(key){(core::Object?) → self::MapLike::V?};
+  method put(covariant-by-class self::MapLike::K% key, covariant-by-class self::MapLike::V% value) → self::MapLike::V%
+    return let final core::Map<self::MapLike::K%, self::MapLike::V%> #t1 = this.{self::MapLike::_map}{core::Map<self::MapLike::K%, self::MapLike::V%>} in let final self::MapLike::K% #t2 = key in let final self::MapLike::V% #t3 = value in let final void #t4 = #t1.{core::Map::[]=}(#t2, #t3){(self::MapLike::K%, self::MapLike::V%) → void} in #t3;
+}
+class MapLike2<K extends core::Object? = dynamic, V extends core::Object? = dynamic> extends core::Object {
+  final field core::Map<self::MapLike2::K%, self::MapLike2::V%> _map = <self::MapLike2::K%, self::MapLike2::V%>{};
+  final field self::MapLike2::V% defaultValue;
+  constructor •(self::MapLike2::V% defaultValue) → self::MapLike2<self::MapLike2::K%, self::MapLike2::V%>
+    : self::MapLike2::defaultValue = defaultValue, super core::Object::•()
+    ;
+  method get(core::Object key) → self::MapLike2::V%
+    return let final self::MapLike2::V? #t5 = this.{self::MapLike2::_map}{core::Map<self::MapLike2::K%, self::MapLike2::V%>}.{core::Map::[]}(key){(core::Object?) → self::MapLike2::V?} in #t5 == null ?{self::MapLike2::V%} this.{self::MapLike2::defaultValue}{self::MapLike2::V%} : #t5{self::MapLike2::V% & core::Object /* '%' & '!' = '!' */};
+  method put(covariant-by-class self::MapLike2::K% key, covariant-by-class self::MapLike2::V% value) → self::MapLike2::V%
+    return let final core::Map<self::MapLike2::K%, self::MapLike2::V%> #t6 = this.{self::MapLike2::_map}{core::Map<self::MapLike2::K%, self::MapLike2::V%>} in let final self::MapLike2::K% #t7 = key in let final self::MapLike2::V% #t8 = value in let final void #t9 = #t6.{core::Map::[]=}(#t7, #t8){(self::MapLike2::K%, self::MapLike2::V%) → void} in #t8;
+}
+extension Extension<K extends core::Object? = dynamic, V extends core::Object? = dynamic> on self::MapLike<K%, V%> {
+  operator [] = self::Extension|[];
+  operator []= = self::Extension|[]=;
+}
+extension Extension2<K extends core::Object? = dynamic, V extends core::Object? = dynamic> on self::MapLike2<K%, V%> {
+  operator [] = self::Extension2|[];
+  operator []= = self::Extension2|[]=;
+}
+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){(core::Object) → 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, self::Extension|[]=::K% key, self::Extension|[]=::V% value) → void
+  return #this.{self::MapLike::put}(key, value){(self::Extension|[]=::K%, self::Extension|[]=::V%) → self::Extension|[]=::V%};
+static method Extension2|[]<K extends core::Object? = dynamic, V extends core::Object? = dynamic>(lowered final self::MapLike2<self::Extension2|[]::K%, self::Extension2|[]::V%> #this, core::Object key) → self::Extension2|[]::V%
+  return #this.{self::MapLike2::get}(key){(core::Object) → self::Extension2|[]::V%};
+static method Extension2|[]=<K extends core::Object? = dynamic, V extends core::Object? = dynamic>(lowered final self::MapLike2<self::Extension2|[]=::K%, self::Extension2|[]=::V%> #this, self::Extension2|[]=::K% key, self::Extension2|[]=::V% value) → void
+  return #this.{self::MapLike2::put}(key, value){(self::Extension2|[]=::K%, self::Extension2|[]=::V%) → self::Extension2|[]=::V%};
+static method main() → dynamic {
+  self::implicit();
+  self::explicitWithTypeArguments();
+  self::explicitInferredTypeArguments();
+}
+static method implicit() → dynamic {
+  self::MapLike<core::int, core::String> map1 = new self::MapLike::•<core::int, core::String>();
+  self::expect(null, self::Extension|[]<core::int, core::String>(map1, 0));
+  map1.{self::MapLike::put}(0, "0"){(core::int, core::String) → core::String};
+  self::expect("0", self::Extension|[]<core::int, core::String>(map1, 0));
+  self::expect(null, self::Extension|[]<core::int, core::String>(map1, 1));
+  self::Extension|[]=<core::int, core::String>(map1, 1, "1");
+  self::expect("1", self::Extension|[]<core::int, core::String>(map1, 1));
+  self::expect("2", let final self::MapLike<core::int, core::String> #t10 = map1 in let final core::int #t11 = 1 in let final core::String #t12 = "2" in let final void #t13 = self::Extension|[]=<core::int, core::String>(#t10, #t11, #t12) in #t12);
+  self::expect("2", self::Extension|[]<core::int, core::String>(map1, 1));
+  let final self::MapLike<core::int, core::String> #t14 = map1 in let final core::int #t15 = 1 in self::Extension|[]<core::int, core::String>(#t14, #t15) == null ?{core::String} self::Extension|[]=<core::int, core::String>(#t14, #t15, "3") : null;
+  self::expect("2", self::Extension|[]<core::int, core::String>(map1, 1));
+  self::expect("2", let final self::MapLike<core::int, core::String> #t16 = map1 in let final core::int #t17 = 1 in let final core::String? #t18 = self::Extension|[]<core::int, core::String>(#t16, #t17) in #t18 == null ?{core::String} let final core::String #t19 = "4" in let final void #t20 = self::Extension|[]=<core::int, core::String>(#t16, #t17, #t19) in #t19 : #t18{core::String});
+  self::expect("2", self::Extension|[]<core::int, core::String>(map1, 1));
+  let final self::MapLike<core::int, core::String> #t21 = map1 in let final core::int #t22 = 2 in self::Extension|[]<core::int, core::String>(#t21, #t22) == null ?{core::String} self::Extension|[]=<core::int, core::String>(#t21, #t22, "2") : null;
+  self::expect("2", self::Extension|[]<core::int, core::String>(map1, 2));
+  self::expect("3", let final self::MapLike<core::int, core::String> #t23 = map1 in let final core::int #t24 = 3 in let final core::String? #t25 = self::Extension|[]<core::int, core::String>(#t23, #t24) in #t25 == null ?{core::String} let final core::String #t26 = "3" in let final void #t27 = self::Extension|[]=<core::int, core::String>(#t23, #t24, #t26) in #t26 : #t25{core::String});
+  self::expect("3", self::Extension|[]<core::int, core::String>(map1, 3));
+  self::MapLike2<core::int, core::int> map2 = new self::MapLike2::•<core::int, core::int>(0);
+  self::expect(1, let final self::MapLike2<core::int, core::int> #t28 = map2 in let final core::int #t29 = 0 in let final core::int #t30 = 1 in let final void #t31 = self::Extension2|[]=<core::int, core::int>(#t28, #t29, #t30) in #t30);
+  self::expect(3, let final self::MapLike2<core::int, core::int> #t32 = map2 in let final core::int #t33 = 0 in let final core::int #t34 = self::Extension2|[]<core::int, core::int>(#t32, #t33).{core::num::+}(2){(core::num) → core::int} in let final void #t35 = self::Extension2|[]=<core::int, core::int>(#t32, #t33, #t34) in #t34);
+  self::expect(5, let final self::MapLike2<core::int, core::int> #t36 = map2 in let final core::int #t37 = 0 in let final core::int #t38 = self::Extension2|[]<core::int, core::int>(#t36, #t37).{core::num::+}(2){(core::num) → core::int} in let final void #t39 = self::Extension2|[]=<core::int, core::int>(#t36, #t37, #t38) in #t38);
+  self::expect(5, let final self::MapLike2<core::int, core::int> #t40 = map2 in let final core::int #t41 = 0 in let final core::int #t42 = self::Extension2|[]<core::int, core::int>(#t40, #t41) in let final void #t43 = self::Extension2|[]=<core::int, core::int>(#t40, #t41, #t42.{core::num::+}(1){(core::num) → core::int}) in #t42);
+  self::expect(6, self::Extension2|[]<core::int, core::int>(map2, 0));
+  self::expect(5, let final self::MapLike2<core::int, core::int> #t44 = map2 in let final core::int #t45 = 0 in let final core::int #t46 = self::Extension2|[]<core::int, core::int>(#t44, #t45).{core::num::-}(1){(core::num) → core::int} in let final void #t47 = self::Extension2|[]=<core::int, core::int>(#t44, #t45, #t46) in #t46);
+  self::expect(5, self::Extension2|[]<core::int, core::int>(map2, 0));
+}
+static method explicitWithTypeArguments() → dynamic {
+  self::MapLike<core::int, core::String> map1 = new self::MapLike::•<core::int, core::String>();
+  self::expect(null, self::Extension|[]<core::int, core::String>(map1, 0));
+  map1.{self::MapLike::put}(0, "0"){(core::int, core::String) → core::String};
+  self::expect("0", self::Extension|[]<core::int, core::String>(map1, 0));
+  self::expect(null, self::Extension|[]<core::int, core::String>(map1, 1));
+  self::Extension|[]=<core::int, core::String>(map1, 1, "1");
+  self::expect("1", self::Extension|[]<core::int, core::String>(map1, 1));
+  self::expect("2", let final self::MapLike<core::int, core::String> #t48 = map1 in let final core::String #t49 = "2" in let final void #t50 = self::Extension|[]=<core::int, core::String>(#t48, 1, #t49) in #t49);
+  self::expect("2", self::Extension|[]<core::int, core::String>(map1, 1));
+  let final self::MapLike<core::int, core::String> #t51 = map1 in let final core::int #t52 = 1 in self::Extension|[]<core::int, core::String>(#t51, #t52) == null ?{core::String} self::Extension|[]=<core::int, core::String>(#t51, #t52, "3") : null;
+  self::expect("2", self::Extension|[]<core::int, core::String>(map1, 1));
+  self::expect("2", let final self::MapLike<core::int, core::String> #t53 = map1 in let final core::int #t54 = 1 in let final core::String? #t55 = self::Extension|[]<core::int, core::String>(#t53, #t54) in #t55 == null ?{core::String} let final core::String #t56 = "4" in let final void #t57 = self::Extension|[]=<core::int, core::String>(#t53, #t54, #t56) in #t56 : #t55{core::String});
+  self::expect("2", self::Extension|[]<core::int, core::String>(map1, 1));
+  let final self::MapLike<core::int, core::String> #t58 = map1 in let final core::int #t59 = 2 in self::Extension|[]<core::int, core::String>(#t58, #t59) == null ?{core::String} self::Extension|[]=<core::int, core::String>(#t58, #t59, "2") : null;
+  self::expect("2", self::Extension|[]<core::int, core::String>(map1, 2));
+  self::expect("3", let final self::MapLike<core::int, core::String> #t60 = map1 in let final core::int #t61 = 3 in let final core::String? #t62 = self::Extension|[]<core::int, core::String>(#t60, #t61) in #t62 == null ?{core::String} let final core::String #t63 = "3" in let final void #t64 = self::Extension|[]=<core::int, core::String>(#t60, #t61, #t63) in #t63 : #t62{core::String});
+  self::expect("3", self::Extension|[]<core::int, core::String>(map1, 3));
+  self::MapLike2<core::int, core::int> map2 = new self::MapLike2::•<core::int, core::int>(0);
+  self::expect(1, let final self::MapLike2<core::int, core::int> #t65 = map2 in let final core::int #t66 = 1 in let final void #t67 = self::Extension2|[]=<core::int, core::int>(#t65, 0, #t66) in #t66);
+  self::expect(3, let final self::MapLike2<core::int, core::int> #t68 = map2 in let final core::int #t69 = 0 in let final core::int #t70 = self::Extension2|[]<core::int, core::int>(#t68, #t69).{core::num::+}(2){(core::num) → core::int} in let final void #t71 = self::Extension2|[]=<core::int, core::int>(#t68, #t69, #t70) in #t70);
+  self::expect(5, let final self::MapLike2<core::int, core::int> #t72 = map2 in let final core::int #t73 = 0 in let final core::int #t74 = self::Extension2|[]<core::int, core::int>(#t72, #t73).{core::num::+}(2){(core::num) → core::int} in let final void #t75 = self::Extension2|[]=<core::int, core::int>(#t72, #t73, #t74) in #t74);
+  self::expect(5, let final self::MapLike2<core::int, core::int> #t76 = map2 in let final core::int #t77 = 0 in let final core::int #t78 = self::Extension2|[]<core::int, core::int>(#t76, #t77) in let final void #t79 = self::Extension2|[]=<core::int, core::int>(#t76, #t77, #t78.{core::num::+}(1){(core::num) → core::int}) in #t78);
+  self::expect(6, self::Extension2|[]<core::int, core::int>(map2, 0));
+  self::expect(5, let final self::MapLike2<core::int, core::int> #t80 = map2 in let final core::int #t81 = 0 in let final core::int #t82 = self::Extension2|[]<core::int, core::int>(#t80, #t81).{core::num::-}(1){(core::num) → core::int} in let final void #t83 = self::Extension2|[]=<core::int, core::int>(#t80, #t81, #t82) in #t82);
+  self::expect(5, self::Extension2|[]<core::int, core::int>(map2, 0));
+}
+static method explicitInferredTypeArguments() → dynamic {
+  self::MapLike<core::int, core::String> map1 = new self::MapLike::•<core::int, core::String>();
+  self::expect(null, self::Extension|[]<core::int, core::String>(map1, 0));
+  map1.{self::MapLike::put}(0, "0"){(core::int, core::String) → core::String};
+  self::expect("0", self::Extension|[]<core::int, core::String>(map1, 0));
+  self::expect(null, self::Extension|[]<core::int, core::String>(map1, 1));
+  self::Extension|[]=<core::int, core::String>(map1, 1, "1");
+  self::expect("1", self::Extension|[]<core::int, core::String>(map1, 1));
+  self::expect("2", let final self::MapLike<core::int, core::String> #t84 = map1 in let final core::String #t85 = "2" in let final void #t86 = self::Extension|[]=<core::int, core::String>(#t84, 1, #t85) in #t85);
+  self::expect("2", self::Extension|[]<core::int, core::String>(map1, 1));
+  let final self::MapLike<core::int, core::String> #t87 = map1 in let final core::int #t88 = 1 in self::Extension|[]<core::int, core::String>(#t87, #t88) == null ?{core::String} self::Extension|[]=<core::int, core::String>(#t87, #t88, "3") : null;
+  self::expect("2", self::Extension|[]<core::int, core::String>(map1, 1));
+  self::expect("2", let final self::MapLike<core::int, core::String> #t89 = map1 in let final core::int #t90 = 1 in let final core::String? #t91 = self::Extension|[]<core::int, core::String>(#t89, #t90) in #t91 == null ?{core::String} let final core::String #t92 = "4" in let final void #t93 = self::Extension|[]=<core::int, core::String>(#t89, #t90, #t92) in #t92 : #t91{core::String});
+  self::expect("2", self::Extension|[]<core::int, core::String>(map1, 1));
+  let final self::MapLike<core::int, core::String> #t94 = map1 in let final core::int #t95 = 2 in self::Extension|[]<core::int, core::String>(#t94, #t95) == null ?{core::String} self::Extension|[]=<core::int, core::String>(#t94, #t95, "2") : null;
+  self::expect("2", self::Extension|[]<core::int, core::String>(map1, 2));
+  self::expect("3", let final self::MapLike<core::int, core::String> #t96 = map1 in let final core::int #t97 = 3 in let final core::String? #t98 = self::Extension|[]<core::int, core::String>(#t96, #t97) in #t98 == null ?{core::String} let final core::String #t99 = "3" in let final void #t100 = self::Extension|[]=<core::int, core::String>(#t96, #t97, #t99) in #t99 : #t98{core::String});
+  self::expect("3", self::Extension|[]<core::int, core::String>(map1, 3));
+  self::MapLike2<core::int, core::int> map2 = new self::MapLike2::•<core::int, core::int>(0);
+  self::expect(1, let final self::MapLike2<core::int, core::int> #t101 = map2 in let final core::int #t102 = 1 in let final void #t103 = self::Extension2|[]=<core::int, core::int>(#t101, 0, #t102) in #t102);
+  self::expect(3, let final self::MapLike2<core::int, core::int> #t104 = map2 in let final core::int #t105 = 0 in let final core::int #t106 = self::Extension2|[]<core::int, core::int>(#t104, #t105).{core::num::+}(2){(core::num) → core::int} in let final void #t107 = self::Extension2|[]=<core::int, core::int>(#t104, #t105, #t106) in #t106);
+  self::expect(5, let final self::MapLike2<core::int, core::int> #t108 = map2 in let final core::int #t109 = 0 in let final core::int #t110 = self::Extension2|[]<core::int, core::int>(#t108, #t109).{core::num::+}(2){(core::num) → core::int} in let final void #t111 = self::Extension2|[]=<core::int, core::int>(#t108, #t109, #t110) in #t110);
+  self::expect(5, let final self::MapLike2<core::int, core::int> #t112 = map2 in let final core::int #t113 = 0 in let final core::int #t114 = self::Extension2|[]<core::int, core::int>(#t112, #t113) in let final void #t115 = self::Extension2|[]=<core::int, core::int>(#t112, #t113, #t114.{core::num::+}(1){(core::num) → core::int}) in #t114);
+  self::expect(6, self::Extension2|[]<core::int, core::int>(map2, 0));
+  self::expect(5, let final self::MapLike2<core::int, core::int> #t116 = map2 in let final core::int #t117 = 0 in let final core::int #t118 = self::Extension2|[]<core::int, core::int>(#t116, #t117).{core::num::-}(1){(core::num) → core::int} in let final void #t119 = self::Extension2|[]=<core::int, core::int>(#t116, #t117, #t118) in #t118);
+  self::expect(5, self::Extension2|[]<core::int, core::int>(map2, 0));
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual)) {
+    throw "Mismatch: expected=${expected}, actual=${actual}";
+  }
+}
diff --git a/pkg/front_end/testcases/extensions/index2.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/index2.dart.weak.modular.expect
new file mode 100644
index 0000000..25a3f28
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/index2.dart.weak.modular.expect
@@ -0,0 +1,132 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class MapLike<K extends core::Object? = dynamic, V extends core::Object? = dynamic> extends core::Object {
+  final field core::Map<self::MapLike::K%, self::MapLike::V%> _map = <self::MapLike::K%, self::MapLike::V%>{};
+  synthetic constructor •() → self::MapLike<self::MapLike::K%, self::MapLike::V%>
+    : super core::Object::•()
+    ;
+  method get(core::Object key) → self::MapLike::V?
+    return this.{self::MapLike::_map}{core::Map<self::MapLike::K%, self::MapLike::V%>}.{core::Map::[]}(key){(core::Object?) → self::MapLike::V?};
+  method put(covariant-by-class self::MapLike::K% key, covariant-by-class self::MapLike::V% value) → self::MapLike::V%
+    return let final core::Map<self::MapLike::K%, self::MapLike::V%> #t1 = this.{self::MapLike::_map}{core::Map<self::MapLike::K%, self::MapLike::V%>} in let final self::MapLike::K% #t2 = key in let final self::MapLike::V% #t3 = value in let final void #t4 = #t1.{core::Map::[]=}(#t2, #t3){(self::MapLike::K%, self::MapLike::V%) → void} in #t3;
+}
+class MapLike2<K extends core::Object? = dynamic, V extends core::Object? = dynamic> extends core::Object {
+  final field core::Map<self::MapLike2::K%, self::MapLike2::V%> _map = <self::MapLike2::K%, self::MapLike2::V%>{};
+  final field self::MapLike2::V% defaultValue;
+  constructor •(self::MapLike2::V% defaultValue) → self::MapLike2<self::MapLike2::K%, self::MapLike2::V%>
+    : self::MapLike2::defaultValue = defaultValue, super core::Object::•()
+    ;
+  method get(core::Object key) → self::MapLike2::V%
+    return let final self::MapLike2::V? #t5 = this.{self::MapLike2::_map}{core::Map<self::MapLike2::K%, self::MapLike2::V%>}.{core::Map::[]}(key){(core::Object?) → self::MapLike2::V?} in #t5 == null ?{self::MapLike2::V%} this.{self::MapLike2::defaultValue}{self::MapLike2::V%} : #t5{self::MapLike2::V% & core::Object /* '%' & '!' = '!' */};
+  method put(covariant-by-class self::MapLike2::K% key, covariant-by-class self::MapLike2::V% value) → self::MapLike2::V%
+    return let final core::Map<self::MapLike2::K%, self::MapLike2::V%> #t6 = this.{self::MapLike2::_map}{core::Map<self::MapLike2::K%, self::MapLike2::V%>} in let final self::MapLike2::K% #t7 = key in let final self::MapLike2::V% #t8 = value in let final void #t9 = #t6.{core::Map::[]=}(#t7, #t8){(self::MapLike2::K%, self::MapLike2::V%) → void} in #t8;
+}
+extension Extension<K extends core::Object? = dynamic, V extends core::Object? = dynamic> on self::MapLike<K%, V%> {
+  operator [] = self::Extension|[];
+  operator []= = self::Extension|[]=;
+}
+extension Extension2<K extends core::Object? = dynamic, V extends core::Object? = dynamic> on self::MapLike2<K%, V%> {
+  operator [] = self::Extension2|[];
+  operator []= = self::Extension2|[]=;
+}
+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){(core::Object) → 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, self::Extension|[]=::K% key, self::Extension|[]=::V% value) → void
+  return #this.{self::MapLike::put}(key, value){(self::Extension|[]=::K%, self::Extension|[]=::V%) → self::Extension|[]=::V%};
+static method Extension2|[]<K extends core::Object? = dynamic, V extends core::Object? = dynamic>(lowered final self::MapLike2<self::Extension2|[]::K%, self::Extension2|[]::V%> #this, core::Object key) → self::Extension2|[]::V%
+  return #this.{self::MapLike2::get}(key){(core::Object) → self::Extension2|[]::V%};
+static method Extension2|[]=<K extends core::Object? = dynamic, V extends core::Object? = dynamic>(lowered final self::MapLike2<self::Extension2|[]=::K%, self::Extension2|[]=::V%> #this, self::Extension2|[]=::K% key, self::Extension2|[]=::V% value) → void
+  return #this.{self::MapLike2::put}(key, value){(self::Extension2|[]=::K%, self::Extension2|[]=::V%) → self::Extension2|[]=::V%};
+static method main() → dynamic {
+  self::implicit();
+  self::explicitWithTypeArguments();
+  self::explicitInferredTypeArguments();
+}
+static method implicit() → dynamic {
+  self::MapLike<core::int, core::String> map1 = new self::MapLike::•<core::int, core::String>();
+  self::expect(null, self::Extension|[]<core::int, core::String>(map1, 0));
+  map1.{self::MapLike::put}(0, "0"){(core::int, core::String) → core::String};
+  self::expect("0", self::Extension|[]<core::int, core::String>(map1, 0));
+  self::expect(null, self::Extension|[]<core::int, core::String>(map1, 1));
+  self::Extension|[]=<core::int, core::String>(map1, 1, "1");
+  self::expect("1", self::Extension|[]<core::int, core::String>(map1, 1));
+  self::expect("2", let final self::MapLike<core::int, core::String> #t10 = map1 in let final core::int #t11 = 1 in let final core::String #t12 = "2" in let final void #t13 = self::Extension|[]=<core::int, core::String>(#t10, #t11, #t12) in #t12);
+  self::expect("2", self::Extension|[]<core::int, core::String>(map1, 1));
+  let final self::MapLike<core::int, core::String> #t14 = map1 in let final core::int #t15 = 1 in self::Extension|[]<core::int, core::String>(#t14, #t15) == null ?{core::String} self::Extension|[]=<core::int, core::String>(#t14, #t15, "3") : null;
+  self::expect("2", self::Extension|[]<core::int, core::String>(map1, 1));
+  self::expect("2", let final self::MapLike<core::int, core::String> #t16 = map1 in let final core::int #t17 = 1 in let final core::String? #t18 = self::Extension|[]<core::int, core::String>(#t16, #t17) in #t18 == null ?{core::String} let final core::String #t19 = "4" in let final void #t20 = self::Extension|[]=<core::int, core::String>(#t16, #t17, #t19) in #t19 : #t18{core::String});
+  self::expect("2", self::Extension|[]<core::int, core::String>(map1, 1));
+  let final self::MapLike<core::int, core::String> #t21 = map1 in let final core::int #t22 = 2 in self::Extension|[]<core::int, core::String>(#t21, #t22) == null ?{core::String} self::Extension|[]=<core::int, core::String>(#t21, #t22, "2") : null;
+  self::expect("2", self::Extension|[]<core::int, core::String>(map1, 2));
+  self::expect("3", let final self::MapLike<core::int, core::String> #t23 = map1 in let final core::int #t24 = 3 in let final core::String? #t25 = self::Extension|[]<core::int, core::String>(#t23, #t24) in #t25 == null ?{core::String} let final core::String #t26 = "3" in let final void #t27 = self::Extension|[]=<core::int, core::String>(#t23, #t24, #t26) in #t26 : #t25{core::String});
+  self::expect("3", self::Extension|[]<core::int, core::String>(map1, 3));
+  self::MapLike2<core::int, core::int> map2 = new self::MapLike2::•<core::int, core::int>(0);
+  self::expect(1, let final self::MapLike2<core::int, core::int> #t28 = map2 in let final core::int #t29 = 0 in let final core::int #t30 = 1 in let final void #t31 = self::Extension2|[]=<core::int, core::int>(#t28, #t29, #t30) in #t30);
+  self::expect(3, let final self::MapLike2<core::int, core::int> #t32 = map2 in let final core::int #t33 = 0 in let final core::int #t34 = self::Extension2|[]<core::int, core::int>(#t32, #t33).{core::num::+}(2){(core::num) → core::int} in let final void #t35 = self::Extension2|[]=<core::int, core::int>(#t32, #t33, #t34) in #t34);
+  self::expect(5, let final self::MapLike2<core::int, core::int> #t36 = map2 in let final core::int #t37 = 0 in let final core::int #t38 = self::Extension2|[]<core::int, core::int>(#t36, #t37).{core::num::+}(2){(core::num) → core::int} in let final void #t39 = self::Extension2|[]=<core::int, core::int>(#t36, #t37, #t38) in #t38);
+  self::expect(5, let final self::MapLike2<core::int, core::int> #t40 = map2 in let final core::int #t41 = 0 in let final core::int #t42 = self::Extension2|[]<core::int, core::int>(#t40, #t41) in let final void #t43 = self::Extension2|[]=<core::int, core::int>(#t40, #t41, #t42.{core::num::+}(1){(core::num) → core::int}) in #t42);
+  self::expect(6, self::Extension2|[]<core::int, core::int>(map2, 0));
+  self::expect(5, let final self::MapLike2<core::int, core::int> #t44 = map2 in let final core::int #t45 = 0 in let final core::int #t46 = self::Extension2|[]<core::int, core::int>(#t44, #t45).{core::num::-}(1){(core::num) → core::int} in let final void #t47 = self::Extension2|[]=<core::int, core::int>(#t44, #t45, #t46) in #t46);
+  self::expect(5, self::Extension2|[]<core::int, core::int>(map2, 0));
+}
+static method explicitWithTypeArguments() → dynamic {
+  self::MapLike<core::int, core::String> map1 = new self::MapLike::•<core::int, core::String>();
+  self::expect(null, self::Extension|[]<core::int, core::String>(map1, 0));
+  map1.{self::MapLike::put}(0, "0"){(core::int, core::String) → core::String};
+  self::expect("0", self::Extension|[]<core::int, core::String>(map1, 0));
+  self::expect(null, self::Extension|[]<core::int, core::String>(map1, 1));
+  self::Extension|[]=<core::int, core::String>(map1, 1, "1");
+  self::expect("1", self::Extension|[]<core::int, core::String>(map1, 1));
+  self::expect("2", let final self::MapLike<core::int, core::String> #t48 = map1 in let final core::String #t49 = "2" in let final void #t50 = self::Extension|[]=<core::int, core::String>(#t48, 1, #t49) in #t49);
+  self::expect("2", self::Extension|[]<core::int, core::String>(map1, 1));
+  let final self::MapLike<core::int, core::String> #t51 = map1 in let final core::int #t52 = 1 in self::Extension|[]<core::int, core::String>(#t51, #t52) == null ?{core::String} self::Extension|[]=<core::int, core::String>(#t51, #t52, "3") : null;
+  self::expect("2", self::Extension|[]<core::int, core::String>(map1, 1));
+  self::expect("2", let final self::MapLike<core::int, core::String> #t53 = map1 in let final core::int #t54 = 1 in let final core::String? #t55 = self::Extension|[]<core::int, core::String>(#t53, #t54) in #t55 == null ?{core::String} let final core::String #t56 = "4" in let final void #t57 = self::Extension|[]=<core::int, core::String>(#t53, #t54, #t56) in #t56 : #t55{core::String});
+  self::expect("2", self::Extension|[]<core::int, core::String>(map1, 1));
+  let final self::MapLike<core::int, core::String> #t58 = map1 in let final core::int #t59 = 2 in self::Extension|[]<core::int, core::String>(#t58, #t59) == null ?{core::String} self::Extension|[]=<core::int, core::String>(#t58, #t59, "2") : null;
+  self::expect("2", self::Extension|[]<core::int, core::String>(map1, 2));
+  self::expect("3", let final self::MapLike<core::int, core::String> #t60 = map1 in let final core::int #t61 = 3 in let final core::String? #t62 = self::Extension|[]<core::int, core::String>(#t60, #t61) in #t62 == null ?{core::String} let final core::String #t63 = "3" in let final void #t64 = self::Extension|[]=<core::int, core::String>(#t60, #t61, #t63) in #t63 : #t62{core::String});
+  self::expect("3", self::Extension|[]<core::int, core::String>(map1, 3));
+  self::MapLike2<core::int, core::int> map2 = new self::MapLike2::•<core::int, core::int>(0);
+  self::expect(1, let final self::MapLike2<core::int, core::int> #t65 = map2 in let final core::int #t66 = 1 in let final void #t67 = self::Extension2|[]=<core::int, core::int>(#t65, 0, #t66) in #t66);
+  self::expect(3, let final self::MapLike2<core::int, core::int> #t68 = map2 in let final core::int #t69 = 0 in let final core::int #t70 = self::Extension2|[]<core::int, core::int>(#t68, #t69).{core::num::+}(2){(core::num) → core::int} in let final void #t71 = self::Extension2|[]=<core::int, core::int>(#t68, #t69, #t70) in #t70);
+  self::expect(5, let final self::MapLike2<core::int, core::int> #t72 = map2 in let final core::int #t73 = 0 in let final core::int #t74 = self::Extension2|[]<core::int, core::int>(#t72, #t73).{core::num::+}(2){(core::num) → core::int} in let final void #t75 = self::Extension2|[]=<core::int, core::int>(#t72, #t73, #t74) in #t74);
+  self::expect(5, let final self::MapLike2<core::int, core::int> #t76 = map2 in let final core::int #t77 = 0 in let final core::int #t78 = self::Extension2|[]<core::int, core::int>(#t76, #t77) in let final void #t79 = self::Extension2|[]=<core::int, core::int>(#t76, #t77, #t78.{core::num::+}(1){(core::num) → core::int}) in #t78);
+  self::expect(6, self::Extension2|[]<core::int, core::int>(map2, 0));
+  self::expect(5, let final self::MapLike2<core::int, core::int> #t80 = map2 in let final core::int #t81 = 0 in let final core::int #t82 = self::Extension2|[]<core::int, core::int>(#t80, #t81).{core::num::-}(1){(core::num) → core::int} in let final void #t83 = self::Extension2|[]=<core::int, core::int>(#t80, #t81, #t82) in #t82);
+  self::expect(5, self::Extension2|[]<core::int, core::int>(map2, 0));
+}
+static method explicitInferredTypeArguments() → dynamic {
+  self::MapLike<core::int, core::String> map1 = new self::MapLike::•<core::int, core::String>();
+  self::expect(null, self::Extension|[]<core::int, core::String>(map1, 0));
+  map1.{self::MapLike::put}(0, "0"){(core::int, core::String) → core::String};
+  self::expect("0", self::Extension|[]<core::int, core::String>(map1, 0));
+  self::expect(null, self::Extension|[]<core::int, core::String>(map1, 1));
+  self::Extension|[]=<core::int, core::String>(map1, 1, "1");
+  self::expect("1", self::Extension|[]<core::int, core::String>(map1, 1));
+  self::expect("2", let final self::MapLike<core::int, core::String> #t84 = map1 in let final core::String #t85 = "2" in let final void #t86 = self::Extension|[]=<core::int, core::String>(#t84, 1, #t85) in #t85);
+  self::expect("2", self::Extension|[]<core::int, core::String>(map1, 1));
+  let final self::MapLike<core::int, core::String> #t87 = map1 in let final core::int #t88 = 1 in self::Extension|[]<core::int, core::String>(#t87, #t88) == null ?{core::String} self::Extension|[]=<core::int, core::String>(#t87, #t88, "3") : null;
+  self::expect("2", self::Extension|[]<core::int, core::String>(map1, 1));
+  self::expect("2", let final self::MapLike<core::int, core::String> #t89 = map1 in let final core::int #t90 = 1 in let final core::String? #t91 = self::Extension|[]<core::int, core::String>(#t89, #t90) in #t91 == null ?{core::String} let final core::String #t92 = "4" in let final void #t93 = self::Extension|[]=<core::int, core::String>(#t89, #t90, #t92) in #t92 : #t91{core::String});
+  self::expect("2", self::Extension|[]<core::int, core::String>(map1, 1));
+  let final self::MapLike<core::int, core::String> #t94 = map1 in let final core::int #t95 = 2 in self::Extension|[]<core::int, core::String>(#t94, #t95) == null ?{core::String} self::Extension|[]=<core::int, core::String>(#t94, #t95, "2") : null;
+  self::expect("2", self::Extension|[]<core::int, core::String>(map1, 2));
+  self::expect("3", let final self::MapLike<core::int, core::String> #t96 = map1 in let final core::int #t97 = 3 in let final core::String? #t98 = self::Extension|[]<core::int, core::String>(#t96, #t97) in #t98 == null ?{core::String} let final core::String #t99 = "3" in let final void #t100 = self::Extension|[]=<core::int, core::String>(#t96, #t97, #t99) in #t99 : #t98{core::String});
+  self::expect("3", self::Extension|[]<core::int, core::String>(map1, 3));
+  self::MapLike2<core::int, core::int> map2 = new self::MapLike2::•<core::int, core::int>(0);
+  self::expect(1, let final self::MapLike2<core::int, core::int> #t101 = map2 in let final core::int #t102 = 1 in let final void #t103 = self::Extension2|[]=<core::int, core::int>(#t101, 0, #t102) in #t102);
+  self::expect(3, let final self::MapLike2<core::int, core::int> #t104 = map2 in let final core::int #t105 = 0 in let final core::int #t106 = self::Extension2|[]<core::int, core::int>(#t104, #t105).{core::num::+}(2){(core::num) → core::int} in let final void #t107 = self::Extension2|[]=<core::int, core::int>(#t104, #t105, #t106) in #t106);
+  self::expect(5, let final self::MapLike2<core::int, core::int> #t108 = map2 in let final core::int #t109 = 0 in let final core::int #t110 = self::Extension2|[]<core::int, core::int>(#t108, #t109).{core::num::+}(2){(core::num) → core::int} in let final void #t111 = self::Extension2|[]=<core::int, core::int>(#t108, #t109, #t110) in #t110);
+  self::expect(5, let final self::MapLike2<core::int, core::int> #t112 = map2 in let final core::int #t113 = 0 in let final core::int #t114 = self::Extension2|[]<core::int, core::int>(#t112, #t113) in let final void #t115 = self::Extension2|[]=<core::int, core::int>(#t112, #t113, #t114.{core::num::+}(1){(core::num) → core::int}) in #t114);
+  self::expect(6, self::Extension2|[]<core::int, core::int>(map2, 0));
+  self::expect(5, let final self::MapLike2<core::int, core::int> #t116 = map2 in let final core::int #t117 = 0 in let final core::int #t118 = self::Extension2|[]<core::int, core::int>(#t116, #t117).{core::num::-}(1){(core::num) → core::int} in let final void #t119 = self::Extension2|[]=<core::int, core::int>(#t116, #t117, #t118) in #t118);
+  self::expect(5, self::Extension2|[]<core::int, core::int>(map2, 0));
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual)) {
+    throw "Mismatch: expected=${expected}, actual=${actual}";
+  }
+}
diff --git a/pkg/front_end/testcases/extensions/index2.dart.weak.outline.expect b/pkg/front_end/testcases/extensions/index2.dart.weak.outline.expect
new file mode 100644
index 0000000..3227a86
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/index2.dart.weak.outline.expect
@@ -0,0 +1,49 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class MapLike<K extends core::Object? = dynamic, V extends core::Object? = dynamic> extends core::Object {
+  final field core::Map<self::MapLike::K%, self::MapLike::V%> _map;
+  synthetic constructor •() → self::MapLike<self::MapLike::K%, self::MapLike::V%>
+    ;
+  method get(core::Object key) → self::MapLike::V?
+    ;
+  method put(covariant-by-class self::MapLike::K% key, covariant-by-class self::MapLike::V% value) → self::MapLike::V%
+    ;
+}
+class MapLike2<K extends core::Object? = dynamic, V extends core::Object? = dynamic> extends core::Object {
+  final field core::Map<self::MapLike2::K%, self::MapLike2::V%> _map;
+  final field self::MapLike2::V% defaultValue;
+  constructor •(self::MapLike2::V% defaultValue) → self::MapLike2<self::MapLike2::K%, self::MapLike2::V%>
+    ;
+  method get(core::Object key) → self::MapLike2::V%
+    ;
+  method put(covariant-by-class self::MapLike2::K% key, covariant-by-class self::MapLike2::V% value) → self::MapLike2::V%
+    ;
+}
+extension Extension<K extends core::Object? = dynamic, V extends core::Object? = dynamic> on self::MapLike<K%, V%> {
+  operator [] = self::Extension|[];
+  operator []= = self::Extension|[]=;
+}
+extension Extension2<K extends core::Object? = dynamic, V extends core::Object? = dynamic> on self::MapLike2<K%, V%> {
+  operator [] = self::Extension2|[];
+  operator []= = self::Extension2|[]=;
+}
+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>(lowered final self::MapLike<self::Extension|[]=::K%, self::Extension|[]=::V%> #this, self::Extension|[]=::K% key, self::Extension|[]=::V% value) → void
+  ;
+static method Extension2|[]<K extends core::Object? = dynamic, V extends core::Object? = dynamic>(lowered final self::MapLike2<self::Extension2|[]::K%, self::Extension2|[]::V%> #this, core::Object key) → self::Extension2|[]::V%
+  ;
+static method Extension2|[]=<K extends core::Object? = dynamic, V extends core::Object? = dynamic>(lowered final self::MapLike2<self::Extension2|[]=::K%, self::Extension2|[]=::V%> #this, self::Extension2|[]=::K% key, self::Extension2|[]=::V% value) → void
+  ;
+static method main() → dynamic
+  ;
+static method implicit() → dynamic
+  ;
+static method explicitWithTypeArguments() → dynamic
+  ;
+static method explicitInferredTypeArguments() → dynamic
+  ;
+static method expect(dynamic expected, dynamic actual) → dynamic
+  ;
diff --git a/pkg/front_end/testcases/extensions/index2.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/index2.dart.weak.transformed.expect
new file mode 100644
index 0000000..57fee44
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/index2.dart.weak.transformed.expect
@@ -0,0 +1,210 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class MapLike<K extends core::Object? = dynamic, V extends core::Object? = dynamic> extends core::Object {
+  final field core::Map<self::MapLike::K%, self::MapLike::V%> _map = <self::MapLike::K%, self::MapLike::V%>{};
+  synthetic constructor •() → self::MapLike<self::MapLike::K%, self::MapLike::V%>
+    : super core::Object::•()
+    ;
+  method get(core::Object key) → self::MapLike::V?
+    return this.{self::MapLike::_map}{core::Map<self::MapLike::K%, self::MapLike::V%>}.{core::Map::[]}(key){(core::Object?) → self::MapLike::V?};
+  method put(covariant-by-class self::MapLike::K% key, covariant-by-class self::MapLike::V% value) → self::MapLike::V%
+    return let final core::Map<self::MapLike::K%, self::MapLike::V%> #t1 = this.{self::MapLike::_map}{core::Map<self::MapLike::K%, self::MapLike::V%>} in let final self::MapLike::K% #t2 = key in let final self::MapLike::V% #t3 = value in let final void #t4 = #t1.{core::Map::[]=}(#t2, #t3){(self::MapLike::K%, self::MapLike::V%) → void} in #t3;
+}
+class MapLike2<K extends core::Object? = dynamic, V extends core::Object? = dynamic> extends core::Object {
+  final field core::Map<self::MapLike2::K%, self::MapLike2::V%> _map = <self::MapLike2::K%, self::MapLike2::V%>{};
+  final field self::MapLike2::V% defaultValue;
+  constructor •(self::MapLike2::V% defaultValue) → self::MapLike2<self::MapLike2::K%, self::MapLike2::V%>
+    : self::MapLike2::defaultValue = defaultValue, super core::Object::•()
+    ;
+  method get(core::Object key) → self::MapLike2::V%
+    return let final self::MapLike2::V? #t5 = this.{self::MapLike2::_map}{core::Map<self::MapLike2::K%, self::MapLike2::V%>}.{core::Map::[]}(key){(core::Object?) → self::MapLike2::V?} in #t5 == null ?{self::MapLike2::V%} this.{self::MapLike2::defaultValue}{self::MapLike2::V%} : #t5{self::MapLike2::V% & core::Object /* '%' & '!' = '!' */};
+  method put(covariant-by-class self::MapLike2::K% key, covariant-by-class self::MapLike2::V% value) → self::MapLike2::V%
+    return let final core::Map<self::MapLike2::K%, self::MapLike2::V%> #t6 = this.{self::MapLike2::_map}{core::Map<self::MapLike2::K%, self::MapLike2::V%>} in let final self::MapLike2::K% #t7 = key in let final self::MapLike2::V% #t8 = value in let final void #t9 = #t6.{core::Map::[]=}(#t7, #t8){(self::MapLike2::K%, self::MapLike2::V%) → void} in #t8;
+}
+extension Extension<K extends core::Object? = dynamic, V extends core::Object? = dynamic> on self::MapLike<K%, V%> {
+  operator [] = self::Extension|[];
+  operator []= = self::Extension|[]=;
+}
+extension Extension2<K extends core::Object? = dynamic, V extends core::Object? = dynamic> on self::MapLike2<K%, V%> {
+  operator [] = self::Extension2|[];
+  operator []= = self::Extension2|[]=;
+}
+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){(core::Object) → 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, self::Extension|[]=::K% key, self::Extension|[]=::V% value) → void
+  return #this.{self::MapLike::put}(key, value){(self::Extension|[]=::K%, self::Extension|[]=::V%) → self::Extension|[]=::V%};
+static method Extension2|[]<K extends core::Object? = dynamic, V extends core::Object? = dynamic>(lowered final self::MapLike2<self::Extension2|[]::K%, self::Extension2|[]::V%> #this, core::Object key) → self::Extension2|[]::V%
+  return #this.{self::MapLike2::get}(key){(core::Object) → self::Extension2|[]::V%};
+static method Extension2|[]=<K extends core::Object? = dynamic, V extends core::Object? = dynamic>(lowered final self::MapLike2<self::Extension2|[]=::K%, self::Extension2|[]=::V%> #this, self::Extension2|[]=::K% key, self::Extension2|[]=::V% value) → void
+  return #this.{self::MapLike2::put}(key, value){(self::Extension2|[]=::K%, self::Extension2|[]=::V%) → self::Extension2|[]=::V%};
+static method main() → dynamic {
+  self::implicit();
+  self::explicitWithTypeArguments();
+  self::explicitInferredTypeArguments();
+}
+static method implicit() → dynamic {
+  self::MapLike<core::int, core::String> map1 = new self::MapLike::•<core::int, core::String>();
+  self::expect(null, self::Extension|[]<core::int, core::String>(map1, 0));
+  map1.{self::MapLike::put}(0, "0"){(core::int, core::String) → core::String};
+  self::expect("0", self::Extension|[]<core::int, core::String>(map1, 0));
+  self::expect(null, self::Extension|[]<core::int, core::String>(map1, 1));
+  self::Extension|[]=<core::int, core::String>(map1, 1, "1");
+  self::expect("1", self::Extension|[]<core::int, core::String>(map1, 1));
+  self::expect("2", let final self::MapLike<core::int, core::String> #t10 = map1 in let final core::int #t11 = 1 in let final core::String #t12 = "2" in let final void #t13 = self::Extension|[]=<core::int, core::String>(#t10, #t11, #t12) in #t12);
+  self::expect("2", self::Extension|[]<core::int, core::String>(map1, 1));
+  let final self::MapLike<core::int, core::String> #t14 = map1 in let final core::int #t15 = 1 in self::Extension|[]<core::int, core::String>(#t14, #t15) == null ?{core::String} self::Extension|[]=<core::int, core::String>(#t14, #t15, "3") : null;
+  self::expect("2", self::Extension|[]<core::int, core::String>(map1, 1));
+  self::expect("2", let final self::MapLike<core::int, core::String> #t16 = map1 in let final core::int #t17 = 1 in let final core::String? #t18 = self::Extension|[]<core::int, core::String>(#t16, #t17) in #t18 == null ?{core::String} let final core::String #t19 = "4" in let final void #t20 = self::Extension|[]=<core::int, core::String>(#t16, #t17, #t19) in #t19 : #t18{core::String});
+  self::expect("2", self::Extension|[]<core::int, core::String>(map1, 1));
+  let final self::MapLike<core::int, core::String> #t21 = map1 in let final core::int #t22 = 2 in self::Extension|[]<core::int, core::String>(#t21, #t22) == null ?{core::String} self::Extension|[]=<core::int, core::String>(#t21, #t22, "2") : null;
+  self::expect("2", self::Extension|[]<core::int, core::String>(map1, 2));
+  self::expect("3", let final self::MapLike<core::int, core::String> #t23 = map1 in let final core::int #t24 = 3 in let final core::String? #t25 = self::Extension|[]<core::int, core::String>(#t23, #t24) in #t25 == null ?{core::String} let final core::String #t26 = "3" in let final void #t27 = self::Extension|[]=<core::int, core::String>(#t23, #t24, #t26) in #t26 : #t25{core::String});
+  self::expect("3", self::Extension|[]<core::int, core::String>(map1, 3));
+  self::MapLike2<core::int, core::int> map2 = new self::MapLike2::•<core::int, core::int>(0);
+  self::expect(1, let final self::MapLike2<core::int, core::int> #t28 = map2 in let final core::int #t29 = 0 in let final core::int #t30 = 1 in let final void #t31 = self::Extension2|[]=<core::int, core::int>(#t28, #t29, #t30) in #t30);
+  self::expect(3, let final self::MapLike2<core::int, core::int> #t32 = map2 in let final core::int #t33 = 0 in let final core::int #t34 = self::Extension2|[]<core::int, core::int>(#t32, #t33).{core::num::+}(2){(core::num) → core::int} in let final void #t35 = self::Extension2|[]=<core::int, core::int>(#t32, #t33, #t34) in #t34);
+  self::expect(5, let final self::MapLike2<core::int, core::int> #t36 = map2 in let final core::int #t37 = 0 in let final core::int #t38 = self::Extension2|[]<core::int, core::int>(#t36, #t37).{core::num::+}(2){(core::num) → core::int} in let final void #t39 = self::Extension2|[]=<core::int, core::int>(#t36, #t37, #t38) in #t38);
+  self::expect(5, let final self::MapLike2<core::int, core::int> #t40 = map2 in let final core::int #t41 = 0 in let final core::int #t42 = self::Extension2|[]<core::int, core::int>(#t40, #t41) in let final void #t43 = self::Extension2|[]=<core::int, core::int>(#t40, #t41, #t42.{core::num::+}(1){(core::num) → core::int}) in #t42);
+  self::expect(6, self::Extension2|[]<core::int, core::int>(map2, 0));
+  self::expect(5, let final self::MapLike2<core::int, core::int> #t44 = map2 in let final core::int #t45 = 0 in let final core::int #t46 = self::Extension2|[]<core::int, core::int>(#t44, #t45).{core::num::-}(1){(core::num) → core::int} in let final void #t47 = self::Extension2|[]=<core::int, core::int>(#t44, #t45, #t46) in #t46);
+  self::expect(5, self::Extension2|[]<core::int, core::int>(map2, 0));
+}
+static method explicitWithTypeArguments() → dynamic {
+  self::MapLike<core::int, core::String> map1 = new self::MapLike::•<core::int, core::String>();
+  self::expect(null, self::Extension|[]<core::int, core::String>(map1, 0));
+  map1.{self::MapLike::put}(0, "0"){(core::int, core::String) → core::String};
+  self::expect("0", self::Extension|[]<core::int, core::String>(map1, 0));
+  self::expect(null, self::Extension|[]<core::int, core::String>(map1, 1));
+  self::Extension|[]=<core::int, core::String>(map1, 1, "1");
+  self::expect("1", self::Extension|[]<core::int, core::String>(map1, 1));
+  self::expect("2", let final self::MapLike<core::int, core::String> #t48 = map1 in let final core::String #t49 = "2" in let final void #t50 = self::Extension|[]=<core::int, core::String>(#t48, 1, #t49) in #t49);
+  self::expect("2", self::Extension|[]<core::int, core::String>(map1, 1));
+  let final self::MapLike<core::int, core::String> #t51 = map1 in let final core::int #t52 = 1 in self::Extension|[]<core::int, core::String>(#t51, #t52) == null ?{core::String} self::Extension|[]=<core::int, core::String>(#t51, #t52, "3") : null;
+  self::expect("2", self::Extension|[]<core::int, core::String>(map1, 1));
+  self::expect("2", let final self::MapLike<core::int, core::String> #t53 = map1 in let final core::int #t54 = 1 in let final core::String? #t55 = self::Extension|[]<core::int, core::String>(#t53, #t54) in #t55 == null ?{core::String} let final core::String #t56 = "4" in let final void #t57 = self::Extension|[]=<core::int, core::String>(#t53, #t54, #t56) in #t56 : #t55{core::String});
+  self::expect("2", self::Extension|[]<core::int, core::String>(map1, 1));
+  let final self::MapLike<core::int, core::String> #t58 = map1 in let final core::int #t59 = 2 in self::Extension|[]<core::int, core::String>(#t58, #t59) == null ?{core::String} self::Extension|[]=<core::int, core::String>(#t58, #t59, "2") : null;
+  self::expect("2", self::Extension|[]<core::int, core::String>(map1, 2));
+  self::expect("3", let final self::MapLike<core::int, core::String> #t60 = map1 in let final core::int #t61 = 3 in let final core::String? #t62 = self::Extension|[]<core::int, core::String>(#t60, #t61) in #t62 == null ?{core::String} let final core::String #t63 = "3" in let final void #t64 = self::Extension|[]=<core::int, core::String>(#t60, #t61, #t63) in #t63 : #t62{core::String});
+  self::expect("3", self::Extension|[]<core::int, core::String>(map1, 3));
+  self::MapLike2<core::int, core::int> map2 = new self::MapLike2::•<core::int, core::int>(0);
+  self::expect(1, let final self::MapLike2<core::int, core::int> #t65 = map2 in let final core::int #t66 = 1 in let final void #t67 = self::Extension2|[]=<core::int, core::int>(#t65, 0, #t66) in #t66);
+  self::expect(3, let final self::MapLike2<core::int, core::int> #t68 = map2 in let final core::int #t69 = 0 in let final core::int #t70 = self::Extension2|[]<core::int, core::int>(#t68, #t69).{core::num::+}(2){(core::num) → core::int} in let final void #t71 = self::Extension2|[]=<core::int, core::int>(#t68, #t69, #t70) in #t70);
+  self::expect(5, let final self::MapLike2<core::int, core::int> #t72 = map2 in let final core::int #t73 = 0 in let final core::int #t74 = self::Extension2|[]<core::int, core::int>(#t72, #t73).{core::num::+}(2){(core::num) → core::int} in let final void #t75 = self::Extension2|[]=<core::int, core::int>(#t72, #t73, #t74) in #t74);
+  self::expect(5, let final self::MapLike2<core::int, core::int> #t76 = map2 in let final core::int #t77 = 0 in let final core::int #t78 = self::Extension2|[]<core::int, core::int>(#t76, #t77) in let final void #t79 = self::Extension2|[]=<core::int, core::int>(#t76, #t77, #t78.{core::num::+}(1){(core::num) → core::int}) in #t78);
+  self::expect(6, self::Extension2|[]<core::int, core::int>(map2, 0));
+  self::expect(5, let final self::MapLike2<core::int, core::int> #t80 = map2 in let final core::int #t81 = 0 in let final core::int #t82 = self::Extension2|[]<core::int, core::int>(#t80, #t81).{core::num::-}(1){(core::num) → core::int} in let final void #t83 = self::Extension2|[]=<core::int, core::int>(#t80, #t81, #t82) in #t82);
+  self::expect(5, self::Extension2|[]<core::int, core::int>(map2, 0));
+}
+static method explicitInferredTypeArguments() → dynamic {
+  self::MapLike<core::int, core::String> map1 = new self::MapLike::•<core::int, core::String>();
+  self::expect(null, self::Extension|[]<core::int, core::String>(map1, 0));
+  map1.{self::MapLike::put}(0, "0"){(core::int, core::String) → core::String};
+  self::expect("0", self::Extension|[]<core::int, core::String>(map1, 0));
+  self::expect(null, self::Extension|[]<core::int, core::String>(map1, 1));
+  self::Extension|[]=<core::int, core::String>(map1, 1, "1");
+  self::expect("1", self::Extension|[]<core::int, core::String>(map1, 1));
+  self::expect("2", let final self::MapLike<core::int, core::String> #t84 = map1 in let final core::String #t85 = "2" in let final void #t86 = self::Extension|[]=<core::int, core::String>(#t84, 1, #t85) in #t85);
+  self::expect("2", self::Extension|[]<core::int, core::String>(map1, 1));
+  let final self::MapLike<core::int, core::String> #t87 = map1 in let final core::int #t88 = 1 in self::Extension|[]<core::int, core::String>(#t87, #t88) == null ?{core::String} self::Extension|[]=<core::int, core::String>(#t87, #t88, "3") : null;
+  self::expect("2", self::Extension|[]<core::int, core::String>(map1, 1));
+  self::expect("2", let final self::MapLike<core::int, core::String> #t89 = map1 in let final core::int #t90 = 1 in let final core::String? #t91 = self::Extension|[]<core::int, core::String>(#t89, #t90) in #t91 == null ?{core::String} let final core::String #t92 = "4" in let final void #t93 = self::Extension|[]=<core::int, core::String>(#t89, #t90, #t92) in #t92 : #t91{core::String});
+  self::expect("2", self::Extension|[]<core::int, core::String>(map1, 1));
+  let final self::MapLike<core::int, core::String> #t94 = map1 in let final core::int #t95 = 2 in self::Extension|[]<core::int, core::String>(#t94, #t95) == null ?{core::String} self::Extension|[]=<core::int, core::String>(#t94, #t95, "2") : null;
+  self::expect("2", self::Extension|[]<core::int, core::String>(map1, 2));
+  self::expect("3", let final self::MapLike<core::int, core::String> #t96 = map1 in let final core::int #t97 = 3 in let final core::String? #t98 = self::Extension|[]<core::int, core::String>(#t96, #t97) in #t98 == null ?{core::String} let final core::String #t99 = "3" in let final void #t100 = self::Extension|[]=<core::int, core::String>(#t96, #t97, #t99) in #t99 : #t98{core::String});
+  self::expect("3", self::Extension|[]<core::int, core::String>(map1, 3));
+  self::MapLike2<core::int, core::int> map2 = new self::MapLike2::•<core::int, core::int>(0);
+  self::expect(1, let final self::MapLike2<core::int, core::int> #t101 = map2 in let final core::int #t102 = 1 in let final void #t103 = self::Extension2|[]=<core::int, core::int>(#t101, 0, #t102) in #t102);
+  self::expect(3, let final self::MapLike2<core::int, core::int> #t104 = map2 in let final core::int #t105 = 0 in let final core::int #t106 = self::Extension2|[]<core::int, core::int>(#t104, #t105).{core::num::+}(2){(core::num) → core::int} in let final void #t107 = self::Extension2|[]=<core::int, core::int>(#t104, #t105, #t106) in #t106);
+  self::expect(5, let final self::MapLike2<core::int, core::int> #t108 = map2 in let final core::int #t109 = 0 in let final core::int #t110 = self::Extension2|[]<core::int, core::int>(#t108, #t109).{core::num::+}(2){(core::num) → core::int} in let final void #t111 = self::Extension2|[]=<core::int, core::int>(#t108, #t109, #t110) in #t110);
+  self::expect(5, let final self::MapLike2<core::int, core::int> #t112 = map2 in let final core::int #t113 = 0 in let final core::int #t114 = self::Extension2|[]<core::int, core::int>(#t112, #t113) in let final void #t115 = self::Extension2|[]=<core::int, core::int>(#t112, #t113, #t114.{core::num::+}(1){(core::num) → core::int}) in #t114);
+  self::expect(6, self::Extension2|[]<core::int, core::int>(map2, 0));
+  self::expect(5, let final self::MapLike2<core::int, core::int> #t116 = map2 in let final core::int #t117 = 0 in let final core::int #t118 = self::Extension2|[]<core::int, core::int>(#t116, #t117).{core::num::-}(1){(core::num) → core::int} in let final void #t119 = self::Extension2|[]=<core::int, core::int>(#t116, #t117, #t118) in #t118);
+  self::expect(5, self::Extension2|[]<core::int, core::int>(map2, 0));
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual)) {
+    throw "Mismatch: expected=${expected}, actual=${actual}";
+  }
+}
+
+
+Extra constant evaluation status:
+Evaluated: VariableGet @ org-dartlang-testcase:///index2.dart:46:20 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///index2.dart:46:25 -> StringConstant("2")
+Evaluated: VariableGet @ org-dartlang-testcase:///index2.dart:46:25 -> StringConstant("2")
+Evaluated: VariableGet @ org-dartlang-testcase:///index2.dart:48:8 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///index2.dart:48:8 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///index2.dart:50:20 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///index2.dart:50:20 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///index2.dart:50:27 -> StringConstant("4")
+Evaluated: VariableGet @ org-dartlang-testcase:///index2.dart:50:27 -> StringConstant("4")
+Evaluated: VariableGet @ org-dartlang-testcase:///index2.dart:52:8 -> IntConstant(2)
+Evaluated: VariableGet @ org-dartlang-testcase:///index2.dart:52:8 -> IntConstant(2)
+Evaluated: VariableGet @ org-dartlang-testcase:///index2.dart:54:20 -> IntConstant(3)
+Evaluated: VariableGet @ org-dartlang-testcase:///index2.dart:54:20 -> IntConstant(3)
+Evaluated: VariableGet @ org-dartlang-testcase:///index2.dart:54:27 -> StringConstant("3")
+Evaluated: VariableGet @ org-dartlang-testcase:///index2.dart:54:27 -> StringConstant("3")
+Evaluated: VariableGet @ org-dartlang-testcase:///index2.dart:58:18 -> IntConstant(0)
+Evaluated: VariableGet @ org-dartlang-testcase:///index2.dart:58:23 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///index2.dart:58:23 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///index2.dart:59:18 -> IntConstant(0)
+Evaluated: VariableGet @ org-dartlang-testcase:///index2.dart:59:18 -> IntConstant(0)
+Evaluated: VariableGet @ org-dartlang-testcase:///index2.dart:60:18 -> IntConstant(0)
+Evaluated: VariableGet @ org-dartlang-testcase:///index2.dart:60:18 -> IntConstant(0)
+Evaluated: VariableGet @ org-dartlang-testcase:///index2.dart:61:18 -> IntConstant(0)
+Evaluated: VariableGet @ org-dartlang-testcase:///index2.dart:61:18 -> IntConstant(0)
+Evaluated: VariableGet @ org-dartlang-testcase:///index2.dart:63:20 -> IntConstant(0)
+Evaluated: VariableGet @ org-dartlang-testcase:///index2.dart:63:20 -> IntConstant(0)
+Evaluated: VariableGet @ org-dartlang-testcase:///index2.dart:75:49 -> StringConstant("2")
+Evaluated: VariableGet @ org-dartlang-testcase:///index2.dart:75:49 -> StringConstant("2")
+Evaluated: VariableGet @ org-dartlang-testcase:///index2.dart:77:32 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///index2.dart:77:32 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///index2.dart:79:44 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///index2.dart:79:44 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///index2.dart:79:51 -> StringConstant("4")
+Evaluated: VariableGet @ org-dartlang-testcase:///index2.dart:79:51 -> StringConstant("4")
+Evaluated: VariableGet @ org-dartlang-testcase:///index2.dart:81:32 -> IntConstant(2)
+Evaluated: VariableGet @ org-dartlang-testcase:///index2.dart:81:32 -> IntConstant(2)
+Evaluated: VariableGet @ org-dartlang-testcase:///index2.dart:83:44 -> IntConstant(3)
+Evaluated: VariableGet @ org-dartlang-testcase:///index2.dart:83:44 -> IntConstant(3)
+Evaluated: VariableGet @ org-dartlang-testcase:///index2.dart:83:51 -> StringConstant("3")
+Evaluated: VariableGet @ org-dartlang-testcase:///index2.dart:83:51 -> StringConstant("3")
+Evaluated: VariableGet @ org-dartlang-testcase:///index2.dart:87:45 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///index2.dart:87:45 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///index2.dart:88:40 -> IntConstant(0)
+Evaluated: VariableGet @ org-dartlang-testcase:///index2.dart:88:40 -> IntConstant(0)
+Evaluated: VariableGet @ org-dartlang-testcase:///index2.dart:89:40 -> IntConstant(0)
+Evaluated: VariableGet @ org-dartlang-testcase:///index2.dart:89:40 -> IntConstant(0)
+Evaluated: VariableGet @ org-dartlang-testcase:///index2.dart:90:40 -> IntConstant(0)
+Evaluated: VariableGet @ org-dartlang-testcase:///index2.dart:90:40 -> IntConstant(0)
+Evaluated: VariableGet @ org-dartlang-testcase:///index2.dart:92:42 -> IntConstant(0)
+Evaluated: VariableGet @ org-dartlang-testcase:///index2.dart:92:42 -> IntConstant(0)
+Evaluated: VariableGet @ org-dartlang-testcase:///index2.dart:104:36 -> StringConstant("2")
+Evaluated: VariableGet @ org-dartlang-testcase:///index2.dart:104:36 -> StringConstant("2")
+Evaluated: VariableGet @ org-dartlang-testcase:///index2.dart:106:19 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///index2.dart:106:19 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///index2.dart:108:31 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///index2.dart:108:31 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///index2.dart:108:38 -> StringConstant("4")
+Evaluated: VariableGet @ org-dartlang-testcase:///index2.dart:108:38 -> StringConstant("4")
+Evaluated: VariableGet @ org-dartlang-testcase:///index2.dart:110:19 -> IntConstant(2)
+Evaluated: VariableGet @ org-dartlang-testcase:///index2.dart:110:19 -> IntConstant(2)
+Evaluated: VariableGet @ org-dartlang-testcase:///index2.dart:112:31 -> IntConstant(3)
+Evaluated: VariableGet @ org-dartlang-testcase:///index2.dart:112:31 -> IntConstant(3)
+Evaluated: VariableGet @ org-dartlang-testcase:///index2.dart:112:38 -> StringConstant("3")
+Evaluated: VariableGet @ org-dartlang-testcase:///index2.dart:112:38 -> StringConstant("3")
+Evaluated: VariableGet @ org-dartlang-testcase:///index2.dart:116:35 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///index2.dart:116:35 -> IntConstant(1)
+Evaluated: VariableGet @ org-dartlang-testcase:///index2.dart:117:30 -> IntConstant(0)
+Evaluated: VariableGet @ org-dartlang-testcase:///index2.dart:117:30 -> IntConstant(0)
+Evaluated: VariableGet @ org-dartlang-testcase:///index2.dart:118:30 -> IntConstant(0)
+Evaluated: VariableGet @ org-dartlang-testcase:///index2.dart:118:30 -> IntConstant(0)
+Evaluated: VariableGet @ org-dartlang-testcase:///index2.dart:119:30 -> IntConstant(0)
+Evaluated: VariableGet @ org-dartlang-testcase:///index2.dart:119:30 -> IntConstant(0)
+Evaluated: VariableGet @ org-dartlang-testcase:///index2.dart:121:32 -> IntConstant(0)
+Evaluated: VariableGet @ org-dartlang-testcase:///index2.dart:121:32 -> IntConstant(0)
+Extra constant evaluation: evaluated: 604, effectively constant: 74
diff --git a/pkg/front_end/testcases/extensions/instance_access.dart b/pkg/front_end/testcases/extensions/instance_access.dart
index 6a2598d..7336e0f 100644
--- a/pkg/front_end/testcases/extensions/instance_access.dart
+++ b/pkg/front_end/testcases/extensions/instance_access.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2019, 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.
-// @dart=2.9
+
 class Class1 {
   int field;
 
@@ -23,7 +23,7 @@
     print('Extension1.method on $this');
     return field;
   }
-  int genericMethod<T extends num>(T t) {
+  num genericMethod<T extends num>(T t) {
     print('Extension1.genericMethod<$T>($t) on $this');
     return field + t;
   }
@@ -44,7 +44,7 @@
     print('Extension2.method on $this');
     return field + 3;
   }
-  int genericMethod<T extends num>(T t) {
+  num genericMethod<T extends num>(T t) {
     print('Extension2.genericMethod<$T>($t) on $this');
     return field + t + 4;
   }
@@ -60,22 +60,24 @@
 }
 
 main() {
-  testExtension1();
-  testExtension2();
+  Class1 c10 = new Class1(0);
+  Class1 c11 = new Class1(1);
+  testExtension1(c10, c11, c10, c11);
+  Class2 c20 = new Class2(0);
+  Class2 c21 = new Class2(1);
+  testExtension2(c20, c21, c20);
 }
 
-testExtension1() {
-  Class1 c0 = new Class1(0);
-  Class1 c1 = new Class1(1);
+testExtension1(Class1 c0, Class1 c1, Class1? c0n, Class1? c1n) {
   expect(0, c0.method());
   expect(1, c1.method());
-  expect(1, c1?.method());
+  expect(1, c1n?.method());
   expect(42, c0.genericMethod(42));
   expect(43, c0.genericMethod<num>(43));
   expect(88, c1.genericMethod(87));
   expect(89, c1.genericMethod<num>(88));
   expect(0, c0.property);
-  expect(0, c0?.property);
+  expect(0, c0n?.property);
   expect(42, c0.property = 42);
   expect(1, c1.property);
   expect(87, c0.property = 87);
@@ -85,18 +87,16 @@
   expect(67, c0.property = c1.property = c0.property = 67);
 }
 
-testExtension2() {
-  Class2 c0 = new Class2(0);
-  Class2 c1 = new Class2(1);
+testExtension2(Class2 c0, Class2 c1, Class2? c0n) {
   expect(3, c0.method());
-  expect(3, c0?.method());
+  expect(3, c0n?.method());
   expect(4, c1.method());
   expect(46, c0.genericMethod(42));
   expect(47, c0.genericMethod<num>(43));
   expect(92, c1.genericMethod(87));
   expect(93, c1.genericMethod<num>(88));
   expect(5, c0.property);
-  expect(5, c0?.property);
+  expect(5, c0n?.property);
   expect(42, c0.property = 42);
   expect(48, c0.property);
   expect(6, c1.property);
diff --git a/pkg/front_end/testcases/extensions/instance_access.dart.textual_outline.expect b/pkg/front_end/testcases/extensions/instance_access.dart.textual_outline.expect
index b1a3aa6..a739e58 100644
--- a/pkg/front_end/testcases/extensions/instance_access.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/extensions/instance_access.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Class1 {
   int field;
   Class1(this.field);
@@ -13,19 +12,19 @@
 
 extension Extension1 on Class1 {
   int method() {}
-  int genericMethod<T extends num>(T t) {}
+  num genericMethod<T extends num>(T t) {}
   int get property {}
   set property(int value) {}
 }
 
 extension Extension2 on Class2 {
   int method() {}
-  int genericMethod<T extends num>(T t) {}
+  num genericMethod<T extends num>(T t) {}
   int get property {}
   set property(int value) {}
 }
 
 main() {}
-testExtension1() {}
-testExtension2() {}
+testExtension1(Class1 c0, Class1 c1, Class1? c0n, Class1? c1n) {}
+testExtension2(Class2 c0, Class2 c1, Class2? c0n) {}
 expect(expected, actual) {}
diff --git a/pkg/front_end/testcases/extensions/instance_access.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/extensions/instance_access.dart.textual_outline_modelled.expect
index 55a5670..796d226 100644
--- a/pkg/front_end/testcases/extensions/instance_access.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/extensions/instance_access.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Class1 {
   Class1(this.field);
   String toString() => 'Class1($field)';
@@ -14,19 +13,19 @@
 expect(expected, actual) {}
 
 extension Extension1 on Class1 {
-  int genericMethod<T extends num>(T t) {}
   int get property {}
   int method() {}
+  num genericMethod<T extends num>(T t) {}
   set property(int value) {}
 }
 
 extension Extension2 on Class2 {
-  int genericMethod<T extends num>(T t) {}
   int get property {}
   int method() {}
+  num genericMethod<T extends num>(T t) {}
   set property(int value) {}
 }
 
 main() {}
-testExtension1() {}
-testExtension2() {}
+testExtension1(Class1 c0, Class1 c1, Class1? c0n, Class1? c1n) {}
+testExtension2(Class2 c0, Class2 c1, Class2? c0n) {}
diff --git a/pkg/front_end/testcases/extensions/instance_access.dart.weak.expect b/pkg/front_end/testcases/extensions/instance_access.dart.weak.expect
index 215028e..8ddf7d9 100644
--- a/pkg/front_end/testcases/extensions/instance_access.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/instance_access.dart.weak.expect
@@ -1,42 +1,24 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Class1 extends core::Object {
-  field core::int* field;
-  constructor •(core::int* field) → self::Class1*
+  field core::int field;
+  constructor •(core::int field) → self::Class1
     : self::Class1::field = field, super core::Object::•()
     ;
-  method toString() → core::String*
-    return "Class1(${this.{self::Class1::field}{core::int*}})";
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method toString() → core::String
+    return "Class1(${this.{self::Class1::field}{core::int}})";
 }
 class Class2 extends core::Object {
-  field core::int* field;
-  constructor •(core::int* field) → self::Class2*
+  field core::int field;
+  constructor •(core::int field) → self::Class2
     : self::Class2::field = field, super core::Object::•()
     ;
-  method toString() → core::String*
-    return "Class2(${this.{self::Class2::field}{core::int*}})";
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method toString() → core::String
+    return "Class2(${this.{self::Class2::field}{core::int}})";
 }
-extension Extension1 on self::Class1* {
+extension Extension1 on self::Class1 {
   method method = self::Extension1|method;
   tearoff method = self::Extension1|get#method;
   method genericMethod = self::Extension1|genericMethod;
@@ -44,7 +26,7 @@
   get property = self::Extension1|get#property;
   set property = self::Extension1|set#property;
 }
-extension Extension2 on self::Class2* {
+extension Extension2 on self::Class2 {
   method method = self::Extension2|method;
   tearoff method = self::Extension2|get#method;
   method genericMethod = self::Extension2|genericMethod;
@@ -52,96 +34,96 @@
   get property = self::Extension2|get#property;
   set property = self::Extension2|set#property;
 }
-static method Extension1|method(lowered 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}{core::int*};
+  return #this.{self::Class1::field}{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*>(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::int*}.{core::num::+}(t){(core::num*) →* core::num*} as{TypeError} 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>(lowered final self::Class1 #this, self::Extension1|genericMethod::T t) → core::num {
+  core::print("Extension1.genericMethod<${self::Extension1|genericMethod::T}>(${t}) on ${#this}");
+  return #this.{self::Class1::field}{core::int}.{core::num::+}(t){(core::num) → core::num};
 }
-static method Extension1|get#genericMethod(lowered final self::Class1* #this) → <T extends core::num*>(T*) →* core::int*
-  return <T extends core::num*>(T* t) → core::int* => self::Extension1|genericMethod<T*>(#this, t);
-static method Extension1|get#property(lowered final self::Class1* #this) → core::int* {
+static method Extension1|get#genericMethod(lowered final self::Class1 #this) → <T extends core::num>(T) → core::num
+  return <T extends core::num>(T t) → core::num => self::Extension1|genericMethod<T>(#this, t);
+static method Extension1|get#property(lowered final self::Class1 #this) → core::int {
   core::print("Extension1.property get on ${#this}");
-  return #this.{self::Class1::field}{core::int*};
+  return #this.{self::Class1::field}{core::int};
 }
-static method Extension1|set#property(lowered 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){(core::num*) →* core::int*};
+  value = value.{core::num::+}(1){(core::num) → core::int};
 }
-static method Extension2|method(lowered 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::int*}.{core::num::+}(3){(core::num*) →* core::int*};
+  return #this.{self::Class2::field}{core::int}.{core::num::+}(3){(core::num) → 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*>(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::int*}.{core::num::+}(t){(core::num*) →* core::num*}.{core::num::+}(4){(core::num*) →* core::num*} as{TypeError} 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>(lowered final self::Class2 #this, self::Extension2|genericMethod::T t) → core::num {
+  core::print("Extension2.genericMethod<${self::Extension2|genericMethod::T}>(${t}) on ${#this}");
+  return #this.{self::Class2::field}{core::int}.{core::num::+}(t){(core::num) → core::num}.{core::num::+}(4){(core::num) → core::num};
 }
-static method Extension2|get#genericMethod(lowered final self::Class2* #this) → <T extends core::num*>(T*) →* core::int*
-  return <T extends core::num*>(T* t) → core::int* => self::Extension2|genericMethod<T*>(#this, t);
-static method Extension2|get#property(lowered final self::Class2* #this) → core::int* {
+static method Extension2|get#genericMethod(lowered final self::Class2 #this) → <T extends core::num>(T) → core::num
+  return <T extends core::num>(T t) → core::num => self::Extension2|genericMethod<T>(#this, t);
+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::int*}.{core::num::+}(5){(core::num*) →* core::int*};
+  return #this.{self::Class2::field}{core::int}.{core::num::+}(5){(core::num) → core::int};
 }
-static method Extension2|set#property(lowered 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){(core::num*) →* core::int*};
+  value = value.{core::num::+}(1){(core::num) → core::int};
   #this.{self::Class2::field} = value;
 }
 static method main() → dynamic {
-  self::testExtension1();
-  self::testExtension2();
+  self::Class1 c10 = new self::Class1::•(0);
+  self::Class1 c11 = new self::Class1::•(1);
+  self::testExtension1(c10, c11, c10, c11);
+  self::Class2 c20 = new self::Class2::•(0);
+  self::Class2 c21 = new self::Class2::•(1);
+  self::testExtension2(c20, c21, c20);
 }
-static method testExtension1() → dynamic {
-  self::Class1* c0 = new self::Class1::•(0);
-  self::Class1* c1 = new self::Class1::•(1);
+static method testExtension1(self::Class1 c0, self::Class1 c1, self::Class1? c0n, self::Class1? c1n) → dynamic {
   self::expect(0, self::Extension1|method(c0));
   self::expect(1, self::Extension1|method(c1));
-  self::expect(1, let final self::Class1* #t1 = c1 in #t1 == null ?{core::int*} null : self::Extension1|method(#t1));
-  self::expect(42, self::Extension1|genericMethod<core::int*>(c0, 42));
-  self::expect(43, self::Extension1|genericMethod<core::num*>(c0, 43));
-  self::expect(88, self::Extension1|genericMethod<core::int*>(c1, 87));
-  self::expect(89, self::Extension1|genericMethod<core::num*>(c1, 88));
+  self::expect(1, let final self::Class1? #t1 = c1n in #t1 == null ?{core::int?} null : self::Extension1|method(#t1{self::Class1}));
+  self::expect(42, self::Extension1|genericMethod<core::int>(c0, 42));
+  self::expect(43, self::Extension1|genericMethod<core::num>(c0, 43));
+  self::expect(88, self::Extension1|genericMethod<core::int>(c1, 87));
+  self::expect(89, self::Extension1|genericMethod<core::num>(c1, 88));
   self::expect(0, self::Extension1|get#property(c0));
-  self::expect(0, let final self::Class1* #t2 = c0 in #t2 == null ?{core::int*} null : self::Extension1|get#property(#t2));
-  self::expect(42, let final core::int* #t3 = 42 in let final void #t4 = self::Extension1|set#property(c0, #t3) in #t3);
+  self::expect(0, let final self::Class1? #t2 = c0n in #t2 == null ?{core::int?} null : self::Extension1|get#property(#t2{self::Class1}));
+  self::expect(42, let final core::int #t3 = 42 in let final void #t4 = self::Extension1|set#property(c0, #t3) in #t3);
   self::expect(1, self::Extension1|get#property(c1));
-  self::expect(87, let final core::int* #t5 = 87 in let final void #t6 = self::Extension1|set#property(c0, #t5) in #t5);
-  self::expect(27, let final core::int* #t7 = let final core::int* #t8 = 27 in let final void #t9 = self::Extension1|set#property(c1, #t8) in #t8 in let final void #t10 = self::Extension1|set#property(c0, #t7) in #t7);
-  self::expect(37, let final core::int* #t11 = let final core::int* #t12 = 37 in let final void #t13 = self::Extension1|set#property(c0, #t12) in #t12 in let final void #t14 = self::Extension1|set#property(c1, #t11) in #t11);
-  self::expect(77, let final core::int* #t15 = let final core::int* #t16 = let final core::int* #t17 = 77 in let final void #t18 = self::Extension1|set#property(c1, #t17) in #t17 in let final void #t19 = self::Extension1|set#property(c0, #t16) in #t16 in let final void #t20 = self::Extension1|set#property(c1, #t15) in #t15);
-  self::expect(67, let final core::int* #t21 = let final core::int* #t22 = let final core::int* #t23 = 67 in let final void #t24 = self::Extension1|set#property(c0, #t23) in #t23 in let final void #t25 = self::Extension1|set#property(c1, #t22) in #t22 in let final void #t26 = self::Extension1|set#property(c0, #t21) in #t21);
+  self::expect(87, let final core::int #t5 = 87 in let final void #t6 = self::Extension1|set#property(c0, #t5) in #t5);
+  self::expect(27, let final core::int #t7 = let final core::int #t8 = 27 in let final void #t9 = self::Extension1|set#property(c1, #t8) in #t8 in let final void #t10 = self::Extension1|set#property(c0, #t7) in #t7);
+  self::expect(37, let final core::int #t11 = let final core::int #t12 = 37 in let final void #t13 = self::Extension1|set#property(c0, #t12) in #t12 in let final void #t14 = self::Extension1|set#property(c1, #t11) in #t11);
+  self::expect(77, let final core::int #t15 = let final core::int #t16 = let final core::int #t17 = 77 in let final void #t18 = self::Extension1|set#property(c1, #t17) in #t17 in let final void #t19 = self::Extension1|set#property(c0, #t16) in #t16 in let final void #t20 = self::Extension1|set#property(c1, #t15) in #t15);
+  self::expect(67, let final core::int #t21 = let final core::int #t22 = let final core::int #t23 = 67 in let final void #t24 = self::Extension1|set#property(c0, #t23) in #t23 in let final void #t25 = self::Extension1|set#property(c1, #t22) in #t22 in let final void #t26 = self::Extension1|set#property(c0, #t21) in #t21);
 }
-static method testExtension2() → dynamic {
-  self::Class2* c0 = new self::Class2::•(0);
-  self::Class2* c1 = new self::Class2::•(1);
+static method testExtension2(self::Class2 c0, self::Class2 c1, self::Class2? c0n) → dynamic {
   self::expect(3, self::Extension2|method(c0));
-  self::expect(3, let final self::Class2* #t27 = c0 in #t27 == null ?{core::int*} null : self::Extension2|method(#t27));
+  self::expect(3, let final self::Class2? #t27 = c0n in #t27 == null ?{core::int?} null : self::Extension2|method(#t27{self::Class2}));
   self::expect(4, self::Extension2|method(c1));
-  self::expect(46, self::Extension2|genericMethod<core::int*>(c0, 42));
-  self::expect(47, self::Extension2|genericMethod<core::num*>(c0, 43));
-  self::expect(92, self::Extension2|genericMethod<core::int*>(c1, 87));
-  self::expect(93, self::Extension2|genericMethod<core::num*>(c1, 88));
+  self::expect(46, self::Extension2|genericMethod<core::int>(c0, 42));
+  self::expect(47, self::Extension2|genericMethod<core::num>(c0, 43));
+  self::expect(92, self::Extension2|genericMethod<core::int>(c1, 87));
+  self::expect(93, self::Extension2|genericMethod<core::num>(c1, 88));
   self::expect(5, self::Extension2|get#property(c0));
-  self::expect(5, let final self::Class2* #t28 = c0 in #t28 == null ?{core::int*} null : self::Extension2|get#property(#t28));
-  self::expect(42, let final core::int* #t29 = 42 in let final void #t30 = self::Extension2|set#property(c0, #t29) in #t29);
+  self::expect(5, let final self::Class2? #t28 = c0n in #t28 == null ?{core::int?} null : self::Extension2|get#property(#t28{self::Class2}));
+  self::expect(42, let final core::int #t29 = 42 in let final void #t30 = self::Extension2|set#property(c0, #t29) in #t29);
   self::expect(48, self::Extension2|get#property(c0));
   self::expect(6, self::Extension2|get#property(c1));
-  self::expect(43, let final core::int* #t31 = 43 in let final void #t32 = self::Extension2|set#property(c1, #t31) in #t31);
+  self::expect(43, let final core::int #t31 = 43 in let final void #t32 = self::Extension2|set#property(c1, #t31) in #t31);
   self::expect(49, self::Extension2|get#property(c1));
-  self::expect(49, let final core::int* #t33 = self::Extension2|get#property(c1) in let final void #t34 = self::Extension2|set#property(c0, #t33) in #t33);
-  self::expect(55, let final core::int* #t35 = self::Extension2|get#property(c0) in let final void #t36 = self::Extension2|set#property(c1, #t35) in #t35);
-  self::expect(61, let final core::int* #t37 = let final core::int* #t38 = self::Extension2|get#property(c1) in let final void #t39 = self::Extension2|set#property(c0, #t38) in #t38 in let final void #t40 = self::Extension2|set#property(c1, #t37) in #t37);
-  self::expect(67, let final core::int* #t41 = let final core::int* #t42 = self::Extension2|get#property(c0) in let final void #t43 = self::Extension2|set#property(c1, #t42) in #t42 in let final void #t44 = self::Extension2|set#property(c0, #t41) in #t41);
+  self::expect(49, let final core::int #t33 = self::Extension2|get#property(c1) in let final void #t34 = self::Extension2|set#property(c0, #t33) in #t33);
+  self::expect(55, let final core::int #t35 = self::Extension2|get#property(c0) in let final void #t36 = self::Extension2|set#property(c1, #t35) in #t35);
+  self::expect(61, let final core::int #t37 = let final core::int #t38 = self::Extension2|get#property(c1) in let final void #t39 = self::Extension2|set#property(c0, #t38) in #t38 in let final void #t40 = self::Extension2|set#property(c1, #t37) in #t37);
+  self::expect(67, let final core::int #t41 = let final core::int #t42 = self::Extension2|get#property(c0) in let final void #t43 = self::Extension2|set#property(c1, #t42) in #t42 in let final void #t44 = self::Extension2|set#property(c0, #t41) in #t41);
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual)) {
     throw "Mismatch: expected=${expected}, actual=${actual}";
   }
 }
diff --git a/pkg/front_end/testcases/extensions/instance_access.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/instance_access.dart.weak.modular.expect
index 215028e..8ddf7d9 100644
--- a/pkg/front_end/testcases/extensions/instance_access.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/extensions/instance_access.dart.weak.modular.expect
@@ -1,42 +1,24 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Class1 extends core::Object {
-  field core::int* field;
-  constructor •(core::int* field) → self::Class1*
+  field core::int field;
+  constructor •(core::int field) → self::Class1
     : self::Class1::field = field, super core::Object::•()
     ;
-  method toString() → core::String*
-    return "Class1(${this.{self::Class1::field}{core::int*}})";
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method toString() → core::String
+    return "Class1(${this.{self::Class1::field}{core::int}})";
 }
 class Class2 extends core::Object {
-  field core::int* field;
-  constructor •(core::int* field) → self::Class2*
+  field core::int field;
+  constructor •(core::int field) → self::Class2
     : self::Class2::field = field, super core::Object::•()
     ;
-  method toString() → core::String*
-    return "Class2(${this.{self::Class2::field}{core::int*}})";
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method toString() → core::String
+    return "Class2(${this.{self::Class2::field}{core::int}})";
 }
-extension Extension1 on self::Class1* {
+extension Extension1 on self::Class1 {
   method method = self::Extension1|method;
   tearoff method = self::Extension1|get#method;
   method genericMethod = self::Extension1|genericMethod;
@@ -44,7 +26,7 @@
   get property = self::Extension1|get#property;
   set property = self::Extension1|set#property;
 }
-extension Extension2 on self::Class2* {
+extension Extension2 on self::Class2 {
   method method = self::Extension2|method;
   tearoff method = self::Extension2|get#method;
   method genericMethod = self::Extension2|genericMethod;
@@ -52,96 +34,96 @@
   get property = self::Extension2|get#property;
   set property = self::Extension2|set#property;
 }
-static method Extension1|method(lowered 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}{core::int*};
+  return #this.{self::Class1::field}{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*>(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::int*}.{core::num::+}(t){(core::num*) →* core::num*} as{TypeError} 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>(lowered final self::Class1 #this, self::Extension1|genericMethod::T t) → core::num {
+  core::print("Extension1.genericMethod<${self::Extension1|genericMethod::T}>(${t}) on ${#this}");
+  return #this.{self::Class1::field}{core::int}.{core::num::+}(t){(core::num) → core::num};
 }
-static method Extension1|get#genericMethod(lowered final self::Class1* #this) → <T extends core::num*>(T*) →* core::int*
-  return <T extends core::num*>(T* t) → core::int* => self::Extension1|genericMethod<T*>(#this, t);
-static method Extension1|get#property(lowered final self::Class1* #this) → core::int* {
+static method Extension1|get#genericMethod(lowered final self::Class1 #this) → <T extends core::num>(T) → core::num
+  return <T extends core::num>(T t) → core::num => self::Extension1|genericMethod<T>(#this, t);
+static method Extension1|get#property(lowered final self::Class1 #this) → core::int {
   core::print("Extension1.property get on ${#this}");
-  return #this.{self::Class1::field}{core::int*};
+  return #this.{self::Class1::field}{core::int};
 }
-static method Extension1|set#property(lowered 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){(core::num*) →* core::int*};
+  value = value.{core::num::+}(1){(core::num) → core::int};
 }
-static method Extension2|method(lowered 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::int*}.{core::num::+}(3){(core::num*) →* core::int*};
+  return #this.{self::Class2::field}{core::int}.{core::num::+}(3){(core::num) → 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*>(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::int*}.{core::num::+}(t){(core::num*) →* core::num*}.{core::num::+}(4){(core::num*) →* core::num*} as{TypeError} 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>(lowered final self::Class2 #this, self::Extension2|genericMethod::T t) → core::num {
+  core::print("Extension2.genericMethod<${self::Extension2|genericMethod::T}>(${t}) on ${#this}");
+  return #this.{self::Class2::field}{core::int}.{core::num::+}(t){(core::num) → core::num}.{core::num::+}(4){(core::num) → core::num};
 }
-static method Extension2|get#genericMethod(lowered final self::Class2* #this) → <T extends core::num*>(T*) →* core::int*
-  return <T extends core::num*>(T* t) → core::int* => self::Extension2|genericMethod<T*>(#this, t);
-static method Extension2|get#property(lowered final self::Class2* #this) → core::int* {
+static method Extension2|get#genericMethod(lowered final self::Class2 #this) → <T extends core::num>(T) → core::num
+  return <T extends core::num>(T t) → core::num => self::Extension2|genericMethod<T>(#this, t);
+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::int*}.{core::num::+}(5){(core::num*) →* core::int*};
+  return #this.{self::Class2::field}{core::int}.{core::num::+}(5){(core::num) → core::int};
 }
-static method Extension2|set#property(lowered 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){(core::num*) →* core::int*};
+  value = value.{core::num::+}(1){(core::num) → core::int};
   #this.{self::Class2::field} = value;
 }
 static method main() → dynamic {
-  self::testExtension1();
-  self::testExtension2();
+  self::Class1 c10 = new self::Class1::•(0);
+  self::Class1 c11 = new self::Class1::•(1);
+  self::testExtension1(c10, c11, c10, c11);
+  self::Class2 c20 = new self::Class2::•(0);
+  self::Class2 c21 = new self::Class2::•(1);
+  self::testExtension2(c20, c21, c20);
 }
-static method testExtension1() → dynamic {
-  self::Class1* c0 = new self::Class1::•(0);
-  self::Class1* c1 = new self::Class1::•(1);
+static method testExtension1(self::Class1 c0, self::Class1 c1, self::Class1? c0n, self::Class1? c1n) → dynamic {
   self::expect(0, self::Extension1|method(c0));
   self::expect(1, self::Extension1|method(c1));
-  self::expect(1, let final self::Class1* #t1 = c1 in #t1 == null ?{core::int*} null : self::Extension1|method(#t1));
-  self::expect(42, self::Extension1|genericMethod<core::int*>(c0, 42));
-  self::expect(43, self::Extension1|genericMethod<core::num*>(c0, 43));
-  self::expect(88, self::Extension1|genericMethod<core::int*>(c1, 87));
-  self::expect(89, self::Extension1|genericMethod<core::num*>(c1, 88));
+  self::expect(1, let final self::Class1? #t1 = c1n in #t1 == null ?{core::int?} null : self::Extension1|method(#t1{self::Class1}));
+  self::expect(42, self::Extension1|genericMethod<core::int>(c0, 42));
+  self::expect(43, self::Extension1|genericMethod<core::num>(c0, 43));
+  self::expect(88, self::Extension1|genericMethod<core::int>(c1, 87));
+  self::expect(89, self::Extension1|genericMethod<core::num>(c1, 88));
   self::expect(0, self::Extension1|get#property(c0));
-  self::expect(0, let final self::Class1* #t2 = c0 in #t2 == null ?{core::int*} null : self::Extension1|get#property(#t2));
-  self::expect(42, let final core::int* #t3 = 42 in let final void #t4 = self::Extension1|set#property(c0, #t3) in #t3);
+  self::expect(0, let final self::Class1? #t2 = c0n in #t2 == null ?{core::int?} null : self::Extension1|get#property(#t2{self::Class1}));
+  self::expect(42, let final core::int #t3 = 42 in let final void #t4 = self::Extension1|set#property(c0, #t3) in #t3);
   self::expect(1, self::Extension1|get#property(c1));
-  self::expect(87, let final core::int* #t5 = 87 in let final void #t6 = self::Extension1|set#property(c0, #t5) in #t5);
-  self::expect(27, let final core::int* #t7 = let final core::int* #t8 = 27 in let final void #t9 = self::Extension1|set#property(c1, #t8) in #t8 in let final void #t10 = self::Extension1|set#property(c0, #t7) in #t7);
-  self::expect(37, let final core::int* #t11 = let final core::int* #t12 = 37 in let final void #t13 = self::Extension1|set#property(c0, #t12) in #t12 in let final void #t14 = self::Extension1|set#property(c1, #t11) in #t11);
-  self::expect(77, let final core::int* #t15 = let final core::int* #t16 = let final core::int* #t17 = 77 in let final void #t18 = self::Extension1|set#property(c1, #t17) in #t17 in let final void #t19 = self::Extension1|set#property(c0, #t16) in #t16 in let final void #t20 = self::Extension1|set#property(c1, #t15) in #t15);
-  self::expect(67, let final core::int* #t21 = let final core::int* #t22 = let final core::int* #t23 = 67 in let final void #t24 = self::Extension1|set#property(c0, #t23) in #t23 in let final void #t25 = self::Extension1|set#property(c1, #t22) in #t22 in let final void #t26 = self::Extension1|set#property(c0, #t21) in #t21);
+  self::expect(87, let final core::int #t5 = 87 in let final void #t6 = self::Extension1|set#property(c0, #t5) in #t5);
+  self::expect(27, let final core::int #t7 = let final core::int #t8 = 27 in let final void #t9 = self::Extension1|set#property(c1, #t8) in #t8 in let final void #t10 = self::Extension1|set#property(c0, #t7) in #t7);
+  self::expect(37, let final core::int #t11 = let final core::int #t12 = 37 in let final void #t13 = self::Extension1|set#property(c0, #t12) in #t12 in let final void #t14 = self::Extension1|set#property(c1, #t11) in #t11);
+  self::expect(77, let final core::int #t15 = let final core::int #t16 = let final core::int #t17 = 77 in let final void #t18 = self::Extension1|set#property(c1, #t17) in #t17 in let final void #t19 = self::Extension1|set#property(c0, #t16) in #t16 in let final void #t20 = self::Extension1|set#property(c1, #t15) in #t15);
+  self::expect(67, let final core::int #t21 = let final core::int #t22 = let final core::int #t23 = 67 in let final void #t24 = self::Extension1|set#property(c0, #t23) in #t23 in let final void #t25 = self::Extension1|set#property(c1, #t22) in #t22 in let final void #t26 = self::Extension1|set#property(c0, #t21) in #t21);
 }
-static method testExtension2() → dynamic {
-  self::Class2* c0 = new self::Class2::•(0);
-  self::Class2* c1 = new self::Class2::•(1);
+static method testExtension2(self::Class2 c0, self::Class2 c1, self::Class2? c0n) → dynamic {
   self::expect(3, self::Extension2|method(c0));
-  self::expect(3, let final self::Class2* #t27 = c0 in #t27 == null ?{core::int*} null : self::Extension2|method(#t27));
+  self::expect(3, let final self::Class2? #t27 = c0n in #t27 == null ?{core::int?} null : self::Extension2|method(#t27{self::Class2}));
   self::expect(4, self::Extension2|method(c1));
-  self::expect(46, self::Extension2|genericMethod<core::int*>(c0, 42));
-  self::expect(47, self::Extension2|genericMethod<core::num*>(c0, 43));
-  self::expect(92, self::Extension2|genericMethod<core::int*>(c1, 87));
-  self::expect(93, self::Extension2|genericMethod<core::num*>(c1, 88));
+  self::expect(46, self::Extension2|genericMethod<core::int>(c0, 42));
+  self::expect(47, self::Extension2|genericMethod<core::num>(c0, 43));
+  self::expect(92, self::Extension2|genericMethod<core::int>(c1, 87));
+  self::expect(93, self::Extension2|genericMethod<core::num>(c1, 88));
   self::expect(5, self::Extension2|get#property(c0));
-  self::expect(5, let final self::Class2* #t28 = c0 in #t28 == null ?{core::int*} null : self::Extension2|get#property(#t28));
-  self::expect(42, let final core::int* #t29 = 42 in let final void #t30 = self::Extension2|set#property(c0, #t29) in #t29);
+  self::expect(5, let final self::Class2? #t28 = c0n in #t28 == null ?{core::int?} null : self::Extension2|get#property(#t28{self::Class2}));
+  self::expect(42, let final core::int #t29 = 42 in let final void #t30 = self::Extension2|set#property(c0, #t29) in #t29);
   self::expect(48, self::Extension2|get#property(c0));
   self::expect(6, self::Extension2|get#property(c1));
-  self::expect(43, let final core::int* #t31 = 43 in let final void #t32 = self::Extension2|set#property(c1, #t31) in #t31);
+  self::expect(43, let final core::int #t31 = 43 in let final void #t32 = self::Extension2|set#property(c1, #t31) in #t31);
   self::expect(49, self::Extension2|get#property(c1));
-  self::expect(49, let final core::int* #t33 = self::Extension2|get#property(c1) in let final void #t34 = self::Extension2|set#property(c0, #t33) in #t33);
-  self::expect(55, let final core::int* #t35 = self::Extension2|get#property(c0) in let final void #t36 = self::Extension2|set#property(c1, #t35) in #t35);
-  self::expect(61, let final core::int* #t37 = let final core::int* #t38 = self::Extension2|get#property(c1) in let final void #t39 = self::Extension2|set#property(c0, #t38) in #t38 in let final void #t40 = self::Extension2|set#property(c1, #t37) in #t37);
-  self::expect(67, let final core::int* #t41 = let final core::int* #t42 = self::Extension2|get#property(c0) in let final void #t43 = self::Extension2|set#property(c1, #t42) in #t42 in let final void #t44 = self::Extension2|set#property(c0, #t41) in #t41);
+  self::expect(49, let final core::int #t33 = self::Extension2|get#property(c1) in let final void #t34 = self::Extension2|set#property(c0, #t33) in #t33);
+  self::expect(55, let final core::int #t35 = self::Extension2|get#property(c0) in let final void #t36 = self::Extension2|set#property(c1, #t35) in #t35);
+  self::expect(61, let final core::int #t37 = let final core::int #t38 = self::Extension2|get#property(c1) in let final void #t39 = self::Extension2|set#property(c0, #t38) in #t38 in let final void #t40 = self::Extension2|set#property(c1, #t37) in #t37);
+  self::expect(67, let final core::int #t41 = let final core::int #t42 = self::Extension2|get#property(c0) in let final void #t43 = self::Extension2|set#property(c1, #t42) in #t42 in let final void #t44 = self::Extension2|set#property(c0, #t41) in #t41);
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual)) {
     throw "Mismatch: expected=${expected}, actual=${actual}";
   }
 }
diff --git a/pkg/front_end/testcases/extensions/instance_access.dart.weak.outline.expect b/pkg/front_end/testcases/extensions/instance_access.dart.weak.outline.expect
index 4e0c07a..e75ed74 100644
--- a/pkg/front_end/testcases/extensions/instance_access.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extensions/instance_access.dart.weak.outline.expect
@@ -1,40 +1,22 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Class1 extends core::Object {
-  field core::int* field;
-  constructor •(core::int* field) → self::Class1*
+  field core::int field;
+  constructor •(core::int field) → self::Class1
     ;
-  method toString() → core::String*
+  method toString() → core::String
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Class2 extends core::Object {
-  field core::int* field;
-  constructor •(core::int* field) → self::Class2*
+  field core::int field;
+  constructor •(core::int field) → self::Class2
     ;
-  method toString() → core::String*
+  method toString() → core::String
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension Extension1 on self::Class1* {
+extension Extension1 on self::Class1 {
   method method = self::Extension1|method;
   tearoff method = self::Extension1|get#method;
   method genericMethod = self::Extension1|genericMethod;
@@ -42,7 +24,7 @@
   get property = self::Extension1|get#property;
   set property = self::Extension1|set#property;
 }
-extension Extension2 on self::Class2* {
+extension Extension2 on self::Class2 {
   method method = self::Extension2|method;
   tearoff method = self::Extension2|get#method;
   method genericMethod = self::Extension2|genericMethod;
@@ -50,35 +32,35 @@
   get property = self::Extension2|get#property;
   set property = self::Extension2|set#property;
 }
-static method Extension1|method(lowered final self::Class1* #this) → core::int*
+static method Extension1|method(lowered 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*>(lowered final self::Class1* #this, self::Extension1|genericMethod::T* t) → 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>(lowered final self::Class1 #this, self::Extension1|genericMethod::T t) → core::num
   ;
-static method Extension1|get#genericMethod(lowered final self::Class1* #this) → <T extends core::num*>(T*) →* core::int*
-  return <T extends core::num*>(T* t) → core::int* => self::Extension1|genericMethod<T*>(#this, t);
-static method Extension1|get#property(lowered final self::Class1* #this) → core::int*
+static method Extension1|get#genericMethod(lowered final self::Class1 #this) → <T extends core::num>(T) → core::num
+  return <T extends core::num>(T t) → core::num => self::Extension1|genericMethod<T>(#this, t);
+static method Extension1|get#property(lowered final self::Class1 #this) → core::int
   ;
-static method Extension1|set#property(lowered 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(lowered final self::Class2* #this) → core::int*
+static method Extension2|method(lowered 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*>(lowered final self::Class2* #this, self::Extension2|genericMethod::T* t) → 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>(lowered final self::Class2 #this, self::Extension2|genericMethod::T t) → core::num
   ;
-static method Extension2|get#genericMethod(lowered final self::Class2* #this) → <T extends core::num*>(T*) →* core::int*
-  return <T extends core::num*>(T* t) → core::int* => self::Extension2|genericMethod<T*>(#this, t);
-static method Extension2|get#property(lowered final self::Class2* #this) → core::int*
+static method Extension2|get#genericMethod(lowered final self::Class2 #this) → <T extends core::num>(T) → core::num
+  return <T extends core::num>(T t) → core::num => self::Extension2|genericMethod<T>(#this, t);
+static method Extension2|get#property(lowered final self::Class2 #this) → core::int
   ;
-static method Extension2|set#property(lowered 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
   ;
-static method testExtension1() → dynamic
+static method testExtension1(self::Class1 c0, self::Class1 c1, self::Class1? c0n, self::Class1? c1n) → dynamic
   ;
-static method testExtension2() → dynamic
+static method testExtension2(self::Class2 c0, self::Class2 c1, self::Class2? c0n) → dynamic
   ;
 static method expect(dynamic expected, dynamic actual) → dynamic
   ;
diff --git a/pkg/front_end/testcases/extensions/instance_access.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/instance_access.dart.weak.transformed.expect
index a0cad7e..91a04f1 100644
--- a/pkg/front_end/testcases/extensions/instance_access.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/instance_access.dart.weak.transformed.expect
@@ -1,42 +1,24 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Class1 extends core::Object {
-  field core::int* field;
-  constructor •(core::int* field) → self::Class1*
+  field core::int field;
+  constructor •(core::int field) → self::Class1
     : self::Class1::field = field, super core::Object::•()
     ;
-  method toString() → core::String*
-    return "Class1(${this.{self::Class1::field}{core::int*}})";
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method toString() → core::String
+    return "Class1(${this.{self::Class1::field}{core::int}})";
 }
 class Class2 extends core::Object {
-  field core::int* field;
-  constructor •(core::int* field) → self::Class2*
+  field core::int field;
+  constructor •(core::int field) → self::Class2
     : self::Class2::field = field, super core::Object::•()
     ;
-  method toString() → core::String*
-    return "Class2(${this.{self::Class2::field}{core::int*}})";
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method toString() → core::String
+    return "Class2(${this.{self::Class2::field}{core::int}})";
 }
-extension Extension1 on self::Class1* {
+extension Extension1 on self::Class1 {
   method method = self::Extension1|method;
   tearoff method = self::Extension1|get#method;
   method genericMethod = self::Extension1|genericMethod;
@@ -44,7 +26,7 @@
   get property = self::Extension1|get#property;
   set property = self::Extension1|set#property;
 }
-extension Extension2 on self::Class2* {
+extension Extension2 on self::Class2 {
   method method = self::Extension2|method;
   tearoff method = self::Extension2|get#method;
   method genericMethod = self::Extension2|genericMethod;
@@ -52,116 +34,116 @@
   get property = self::Extension2|get#property;
   set property = self::Extension2|set#property;
 }
-static method Extension1|method(lowered 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}{core::int*};
+  return #this.{self::Class1::field}{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*>(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::int*}.{core::num::+}(t){(core::num*) →* core::num*} as{TypeError} 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>(lowered final self::Class1 #this, self::Extension1|genericMethod::T t) → core::num {
+  core::print("Extension1.genericMethod<${self::Extension1|genericMethod::T}>(${t}) on ${#this}");
+  return #this.{self::Class1::field}{core::int}.{core::num::+}(t){(core::num) → core::num};
 }
-static method Extension1|get#genericMethod(lowered final self::Class1* #this) → <T extends core::num*>(T*) →* core::int*
-  return <T extends core::num*>(T* t) → core::int* => self::Extension1|genericMethod<T*>(#this, t);
-static method Extension1|get#property(lowered final self::Class1* #this) → core::int* {
+static method Extension1|get#genericMethod(lowered final self::Class1 #this) → <T extends core::num>(T) → core::num
+  return <T extends core::num>(T t) → core::num => self::Extension1|genericMethod<T>(#this, t);
+static method Extension1|get#property(lowered final self::Class1 #this) → core::int {
   core::print("Extension1.property get on ${#this}");
-  return #this.{self::Class1::field}{core::int*};
+  return #this.{self::Class1::field}{core::int};
 }
-static method Extension1|set#property(lowered 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){(core::num*) →* core::int*};
+  value = value.{core::num::+}(1){(core::num) → core::int};
 }
-static method Extension2|method(lowered 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::int*}.{core::num::+}(3){(core::num*) →* core::int*};
+  return #this.{self::Class2::field}{core::int}.{core::num::+}(3){(core::num) → 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*>(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::int*}.{core::num::+}(t){(core::num*) →* core::num*}.{core::num::+}(4){(core::num*) →* core::num*} as{TypeError} 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>(lowered final self::Class2 #this, self::Extension2|genericMethod::T t) → core::num {
+  core::print("Extension2.genericMethod<${self::Extension2|genericMethod::T}>(${t}) on ${#this}");
+  return #this.{self::Class2::field}{core::int}.{core::num::+}(t){(core::num) → core::num}.{core::num::+}(4){(core::num) → core::num};
 }
-static method Extension2|get#genericMethod(lowered final self::Class2* #this) → <T extends core::num*>(T*) →* core::int*
-  return <T extends core::num*>(T* t) → core::int* => self::Extension2|genericMethod<T*>(#this, t);
-static method Extension2|get#property(lowered final self::Class2* #this) → core::int* {
+static method Extension2|get#genericMethod(lowered final self::Class2 #this) → <T extends core::num>(T) → core::num
+  return <T extends core::num>(T t) → core::num => self::Extension2|genericMethod<T>(#this, t);
+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::int*}.{core::num::+}(5){(core::num*) →* core::int*};
+  return #this.{self::Class2::field}{core::int}.{core::num::+}(5){(core::num) → core::int};
 }
-static method Extension2|set#property(lowered 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){(core::num*) →* core::int*};
+  value = value.{core::num::+}(1){(core::num) → core::int};
   #this.{self::Class2::field} = value;
 }
 static method main() → dynamic {
-  self::testExtension1();
-  self::testExtension2();
+  self::Class1 c10 = new self::Class1::•(0);
+  self::Class1 c11 = new self::Class1::•(1);
+  self::testExtension1(c10, c11, c10, c11);
+  self::Class2 c20 = new self::Class2::•(0);
+  self::Class2 c21 = new self::Class2::•(1);
+  self::testExtension2(c20, c21, c20);
 }
-static method testExtension1() → dynamic {
-  self::Class1* c0 = new self::Class1::•(0);
-  self::Class1* c1 = new self::Class1::•(1);
+static method testExtension1(self::Class1 c0, self::Class1 c1, self::Class1? c0n, self::Class1? c1n) → dynamic {
   self::expect(0, self::Extension1|method(c0));
   self::expect(1, self::Extension1|method(c1));
-  self::expect(1, let final self::Class1* #t1 = c1 in #t1 == null ?{core::int*} null : self::Extension1|method(#t1));
-  self::expect(42, self::Extension1|genericMethod<core::int*>(c0, 42));
-  self::expect(43, self::Extension1|genericMethod<core::num*>(c0, 43));
-  self::expect(88, self::Extension1|genericMethod<core::int*>(c1, 87));
-  self::expect(89, self::Extension1|genericMethod<core::num*>(c1, 88));
+  self::expect(1, let final self::Class1? #t1 = c1n in #t1 == null ?{core::int?} null : self::Extension1|method(#t1{self::Class1}));
+  self::expect(42, self::Extension1|genericMethod<core::int>(c0, 42));
+  self::expect(43, self::Extension1|genericMethod<core::num>(c0, 43));
+  self::expect(88, self::Extension1|genericMethod<core::int>(c1, 87));
+  self::expect(89, self::Extension1|genericMethod<core::num>(c1, 88));
   self::expect(0, self::Extension1|get#property(c0));
-  self::expect(0, let final self::Class1* #t2 = c0 in #t2 == null ?{core::int*} null : self::Extension1|get#property(#t2));
-  self::expect(42, let final core::int* #t3 = 42 in let final void #t4 = self::Extension1|set#property(c0, #t3) in #t3);
+  self::expect(0, let final self::Class1? #t2 = c0n in #t2 == null ?{core::int?} null : self::Extension1|get#property(#t2{self::Class1}));
+  self::expect(42, let final core::int #t3 = 42 in let final void #t4 = self::Extension1|set#property(c0, #t3) in #t3);
   self::expect(1, self::Extension1|get#property(c1));
-  self::expect(87, let final core::int* #t5 = 87 in let final void #t6 = self::Extension1|set#property(c0, #t5) in #t5);
-  self::expect(27, let final core::int* #t7 = let final core::int* #t8 = 27 in let final void #t9 = self::Extension1|set#property(c1, #t8) in #t8 in let final void #t10 = self::Extension1|set#property(c0, #t7) in #t7);
-  self::expect(37, let final core::int* #t11 = let final core::int* #t12 = 37 in let final void #t13 = self::Extension1|set#property(c0, #t12) in #t12 in let final void #t14 = self::Extension1|set#property(c1, #t11) in #t11);
-  self::expect(77, let final core::int* #t15 = let final core::int* #t16 = let final core::int* #t17 = 77 in let final void #t18 = self::Extension1|set#property(c1, #t17) in #t17 in let final void #t19 = self::Extension1|set#property(c0, #t16) in #t16 in let final void #t20 = self::Extension1|set#property(c1, #t15) in #t15);
-  self::expect(67, let final core::int* #t21 = let final core::int* #t22 = let final core::int* #t23 = 67 in let final void #t24 = self::Extension1|set#property(c0, #t23) in #t23 in let final void #t25 = self::Extension1|set#property(c1, #t22) in #t22 in let final void #t26 = self::Extension1|set#property(c0, #t21) in #t21);
+  self::expect(87, let final core::int #t5 = 87 in let final void #t6 = self::Extension1|set#property(c0, #t5) in #t5);
+  self::expect(27, let final core::int #t7 = let final core::int #t8 = 27 in let final void #t9 = self::Extension1|set#property(c1, #t8) in #t8 in let final void #t10 = self::Extension1|set#property(c0, #t7) in #t7);
+  self::expect(37, let final core::int #t11 = let final core::int #t12 = 37 in let final void #t13 = self::Extension1|set#property(c0, #t12) in #t12 in let final void #t14 = self::Extension1|set#property(c1, #t11) in #t11);
+  self::expect(77, let final core::int #t15 = let final core::int #t16 = let final core::int #t17 = 77 in let final void #t18 = self::Extension1|set#property(c1, #t17) in #t17 in let final void #t19 = self::Extension1|set#property(c0, #t16) in #t16 in let final void #t20 = self::Extension1|set#property(c1, #t15) in #t15);
+  self::expect(67, let final core::int #t21 = let final core::int #t22 = let final core::int #t23 = 67 in let final void #t24 = self::Extension1|set#property(c0, #t23) in #t23 in let final void #t25 = self::Extension1|set#property(c1, #t22) in #t22 in let final void #t26 = self::Extension1|set#property(c0, #t21) in #t21);
 }
-static method testExtension2() → dynamic {
-  self::Class2* c0 = new self::Class2::•(0);
-  self::Class2* c1 = new self::Class2::•(1);
+static method testExtension2(self::Class2 c0, self::Class2 c1, self::Class2? c0n) → dynamic {
   self::expect(3, self::Extension2|method(c0));
-  self::expect(3, let final self::Class2* #t27 = c0 in #t27 == null ?{core::int*} null : self::Extension2|method(#t27));
+  self::expect(3, let final self::Class2? #t27 = c0n in #t27 == null ?{core::int?} null : self::Extension2|method(#t27{self::Class2}));
   self::expect(4, self::Extension2|method(c1));
-  self::expect(46, self::Extension2|genericMethod<core::int*>(c0, 42));
-  self::expect(47, self::Extension2|genericMethod<core::num*>(c0, 43));
-  self::expect(92, self::Extension2|genericMethod<core::int*>(c1, 87));
-  self::expect(93, self::Extension2|genericMethod<core::num*>(c1, 88));
+  self::expect(46, self::Extension2|genericMethod<core::int>(c0, 42));
+  self::expect(47, self::Extension2|genericMethod<core::num>(c0, 43));
+  self::expect(92, self::Extension2|genericMethod<core::int>(c1, 87));
+  self::expect(93, self::Extension2|genericMethod<core::num>(c1, 88));
   self::expect(5, self::Extension2|get#property(c0));
-  self::expect(5, let final self::Class2* #t28 = c0 in #t28 == null ?{core::int*} null : self::Extension2|get#property(#t28));
-  self::expect(42, let final core::int* #t29 = 42 in let final void #t30 = self::Extension2|set#property(c0, #t29) in #t29);
+  self::expect(5, let final self::Class2? #t28 = c0n in #t28 == null ?{core::int?} null : self::Extension2|get#property(#t28{self::Class2}));
+  self::expect(42, let final core::int #t29 = 42 in let final void #t30 = self::Extension2|set#property(c0, #t29) in #t29);
   self::expect(48, self::Extension2|get#property(c0));
   self::expect(6, self::Extension2|get#property(c1));
-  self::expect(43, let final core::int* #t31 = 43 in let final void #t32 = self::Extension2|set#property(c1, #t31) in #t31);
+  self::expect(43, let final core::int #t31 = 43 in let final void #t32 = self::Extension2|set#property(c1, #t31) in #t31);
   self::expect(49, self::Extension2|get#property(c1));
-  self::expect(49, let final core::int* #t33 = self::Extension2|get#property(c1) in let final void #t34 = self::Extension2|set#property(c0, #t33) in #t33);
-  self::expect(55, let final core::int* #t35 = self::Extension2|get#property(c0) in let final void #t36 = self::Extension2|set#property(c1, #t35) in #t35);
-  self::expect(61, let final core::int* #t37 = let final core::int* #t38 = self::Extension2|get#property(c1) in let final void #t39 = self::Extension2|set#property(c0, #t38) in #t38 in let final void #t40 = self::Extension2|set#property(c1, #t37) in #t37);
-  self::expect(67, let final core::int* #t41 = let final core::int* #t42 = self::Extension2|get#property(c0) in let final void #t43 = self::Extension2|set#property(c1, #t42) in #t42 in let final void #t44 = self::Extension2|set#property(c0, #t41) in #t41);
+  self::expect(49, let final core::int #t33 = self::Extension2|get#property(c1) in let final void #t34 = self::Extension2|set#property(c0, #t33) in #t33);
+  self::expect(55, let final core::int #t35 = self::Extension2|get#property(c0) in let final void #t36 = self::Extension2|set#property(c1, #t35) in #t35);
+  self::expect(61, let final core::int #t37 = let final core::int #t38 = self::Extension2|get#property(c1) in let final void #t39 = self::Extension2|set#property(c0, #t38) in #t38 in let final void #t40 = self::Extension2|set#property(c1, #t37) in #t37);
+  self::expect(67, let final core::int #t41 = let final core::int #t42 = self::Extension2|get#property(c0) in let final void #t43 = self::Extension2|set#property(c1, #t42) in #t42 in let final void #t44 = self::Extension2|set#property(c0, #t41) in #t41);
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual)) {
     throw "Mismatch: expected=${expected}, actual=${actual}";
   }
 }
 
 
 Extra constant evaluation status:
-Evaluated: VariableGet @ org-dartlang-testcase:///instance_access.dart:79:28 -> IntConstant(42)
-Evaluated: VariableGet @ org-dartlang-testcase:///instance_access.dart:79:28 -> IntConstant(42)
-Evaluated: VariableGet @ org-dartlang-testcase:///instance_access.dart:81:28 -> IntConstant(87)
-Evaluated: VariableGet @ org-dartlang-testcase:///instance_access.dart:81:28 -> IntConstant(87)
-Evaluated: VariableGet @ org-dartlang-testcase:///instance_access.dart:82:42 -> IntConstant(27)
-Evaluated: VariableGet @ org-dartlang-testcase:///instance_access.dart:82:42 -> IntConstant(27)
-Evaluated: VariableGet @ org-dartlang-testcase:///instance_access.dart:83:42 -> IntConstant(37)
-Evaluated: VariableGet @ org-dartlang-testcase:///instance_access.dart:83:42 -> IntConstant(37)
-Evaluated: VariableGet @ org-dartlang-testcase:///instance_access.dart:84:56 -> IntConstant(77)
-Evaluated: VariableGet @ org-dartlang-testcase:///instance_access.dart:84:56 -> IntConstant(77)
-Evaluated: VariableGet @ org-dartlang-testcase:///instance_access.dart:85:56 -> IntConstant(67)
-Evaluated: VariableGet @ org-dartlang-testcase:///instance_access.dart:85:56 -> IntConstant(67)
+Evaluated: VariableGet @ org-dartlang-testcase:///instance_access.dart:81:28 -> IntConstant(42)
+Evaluated: VariableGet @ org-dartlang-testcase:///instance_access.dart:81:28 -> IntConstant(42)
+Evaluated: VariableGet @ org-dartlang-testcase:///instance_access.dart:83:28 -> IntConstant(87)
+Evaluated: VariableGet @ org-dartlang-testcase:///instance_access.dart:83:28 -> IntConstant(87)
+Evaluated: VariableGet @ org-dartlang-testcase:///instance_access.dart:84:42 -> IntConstant(27)
+Evaluated: VariableGet @ org-dartlang-testcase:///instance_access.dart:84:42 -> IntConstant(27)
+Evaluated: VariableGet @ org-dartlang-testcase:///instance_access.dart:85:42 -> IntConstant(37)
+Evaluated: VariableGet @ org-dartlang-testcase:///instance_access.dart:85:42 -> IntConstant(37)
+Evaluated: VariableGet @ org-dartlang-testcase:///instance_access.dart:86:56 -> IntConstant(77)
+Evaluated: VariableGet @ org-dartlang-testcase:///instance_access.dart:86:56 -> IntConstant(77)
+Evaluated: VariableGet @ org-dartlang-testcase:///instance_access.dart:87:56 -> IntConstant(67)
+Evaluated: VariableGet @ org-dartlang-testcase:///instance_access.dart:87:56 -> IntConstant(67)
 Evaluated: VariableGet @ org-dartlang-testcase:///instance_access.dart:100:28 -> IntConstant(42)
 Evaluated: VariableGet @ org-dartlang-testcase:///instance_access.dart:100:28 -> IntConstant(42)
 Evaluated: VariableGet @ org-dartlang-testcase:///instance_access.dart:103:28 -> IntConstant(43)
 Evaluated: VariableGet @ org-dartlang-testcase:///instance_access.dart:103:28 -> IntConstant(43)
-Extra constant evaluation: evaluated: 325, effectively constant: 16
+Extra constant evaluation: evaluated: 330, effectively constant: 16
diff --git a/pkg/front_end/testcases/extensions/instance_access_of_static.dart b/pkg/front_end/testcases/extensions/instance_access_of_static.dart
index 5c06df4..10db47f 100644
--- a/pkg/front_end/testcases/extensions/instance_access_of_static.dart
+++ b/pkg/front_end/testcases/extensions/instance_access_of_static.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2019, 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.
-// @dart=2.9
+
 class Class1 {
 }
 
@@ -10,8 +10,9 @@
     print('Extension1.staticMethod()');
   }
 
-  static get staticProperty {
+  static int get staticProperty {
     print('Extension1.staticProperty()');
+    return 0;
   }
   static set staticProperty(int value) {
     print('Extension1.staticProperty($value)');
diff --git a/pkg/front_end/testcases/extensions/instance_access_of_static.dart.textual_outline.expect b/pkg/front_end/testcases/extensions/instance_access_of_static.dart.textual_outline.expect
index de48df1..34e9b92 100644
--- a/pkg/front_end/testcases/extensions/instance_access_of_static.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/extensions/instance_access_of_static.dart.textual_outline.expect
@@ -1,9 +1,8 @@
-// @dart = 2.9
 class Class1 {}
 
 extension Extension1 on Class1 {
   static staticMethod() {}
-  static get staticProperty {}
+  static int get staticProperty {}
   static set staticProperty(int value) {}
   static var staticField = 42;
 }
diff --git a/pkg/front_end/testcases/extensions/instance_access_of_static.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/extensions/instance_access_of_static.dart.textual_outline_modelled.expect
index 61592f5..9f28a88 100644
--- a/pkg/front_end/testcases/extensions/instance_access_of_static.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/extensions/instance_access_of_static.dart.textual_outline_modelled.expect
@@ -1,8 +1,7 @@
-// @dart = 2.9
 class Class1 {}
 
 extension Extension1 on Class1 {
-  static get staticProperty {}
+  static int get staticProperty {}
   static set staticProperty(int value) {}
   static staticMethod() {}
   static var staticField = 42;
diff --git a/pkg/front_end/testcases/extensions/instance_access_of_static.dart.weak.expect b/pkg/front_end/testcases/extensions/instance_access_of_static.dart.weak.expect
index 1dadbb1..3dfab80 100644
--- a/pkg/front_end/testcases/extensions/instance_access_of_static.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/instance_access_of_static.dart.weak.expect
@@ -1,38 +1,38 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/extensions/instance_access_of_static.dart:26:5: Error: The method 'staticMethod' isn't defined for the class 'Class1'.
+// pkg/front_end/testcases/extensions/instance_access_of_static.dart:27:5: Error: The method 'staticMethod' isn't defined for the class 'Class1'.
 //  - 'Class1' is from 'pkg/front_end/testcases/extensions/instance_access_of_static.dart'.
 // Try correcting the name to the name of an existing method, or defining a method named 'staticMethod'.
 //   c.staticMethod();
 //     ^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/extensions/instance_access_of_static.dart:27:5: Error: The getter 'staticMethod' isn't defined for the class 'Class1'.
+// pkg/front_end/testcases/extensions/instance_access_of_static.dart:28:5: Error: The getter 'staticMethod' isn't defined for the class 'Class1'.
 //  - 'Class1' is from 'pkg/front_end/testcases/extensions/instance_access_of_static.dart'.
 // Try correcting the name to the name of an existing getter, or defining a getter or field named 'staticMethod'.
 //   c.staticMethod;
 //     ^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/extensions/instance_access_of_static.dart:28:5: Error: The getter 'staticProperty' isn't defined for the class 'Class1'.
+// pkg/front_end/testcases/extensions/instance_access_of_static.dart:29:5: Error: The getter 'staticProperty' isn't defined for the class 'Class1'.
 //  - 'Class1' is from 'pkg/front_end/testcases/extensions/instance_access_of_static.dart'.
 // Try correcting the name to the name of an existing getter, or defining a getter or field named 'staticProperty'.
 //   c.staticProperty;
 //     ^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/extensions/instance_access_of_static.dart:29:5: Error: The setter 'staticProperty' isn't defined for the class 'Class1'.
+// pkg/front_end/testcases/extensions/instance_access_of_static.dart:30:5: Error: The setter 'staticProperty' isn't defined for the class 'Class1'.
 //  - 'Class1' is from 'pkg/front_end/testcases/extensions/instance_access_of_static.dart'.
 // Try correcting the name to the name of an existing setter, or defining a setter or field named 'staticProperty'.
 //   c.staticProperty = 42;
 //     ^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/extensions/instance_access_of_static.dart:30:5: Error: The getter 'staticField' isn't defined for the class 'Class1'.
+// pkg/front_end/testcases/extensions/instance_access_of_static.dart:31:5: Error: The getter 'staticField' isn't defined for the class 'Class1'.
 //  - 'Class1' is from 'pkg/front_end/testcases/extensions/instance_access_of_static.dart'.
 // Try correcting the name to the name of an existing getter, or defining a getter or field named 'staticField'.
 //   c.staticField;
 //     ^^^^^^^^^^^
 //
-// pkg/front_end/testcases/extensions/instance_access_of_static.dart:31:5: Error: The setter 'staticField' isn't defined for the class 'Class1'.
+// pkg/front_end/testcases/extensions/instance_access_of_static.dart:32:5: Error: The setter 'staticField' isn't defined for the class 'Class1'.
 //  - 'Class1' is from 'pkg/front_end/testcases/extensions/instance_access_of_static.dart'.
 // Try correcting the name to the name of an existing setter, or defining a setter or field named 'staticField'.
 //   c.staticField = 42;
@@ -42,65 +42,56 @@
 import "dart:core" as core;
 
 class Class1 extends core::Object {
-  synthetic constructor •() → self::Class1*
+  synthetic constructor •() → self::Class1
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension Extension1 on self::Class1* {
+extension Extension1 on self::Class1 {
   static method staticMethod = self::Extension1|staticMethod;
   static get staticProperty = get self::Extension1|staticProperty;
   static field staticField = self::Extension1|staticField;
   static set staticProperty = set self::Extension1|staticProperty;
 }
-static field core::int* Extension1|staticField = 42;
+static field core::int Extension1|staticField = 42;
 static method Extension1|staticMethod() → dynamic {
   core::print("Extension1.staticMethod()");
 }
-static get Extension1|staticProperty() → dynamic {
+static get Extension1|staticProperty() → core::int {
   core::print("Extension1.staticProperty()");
+  return 0;
 }
-static set Extension1|staticProperty(core::int* value) → void {
+static set Extension1|staticProperty(core::int value) → void {
   core::print("Extension1.staticProperty(${value})");
-  value = value.{core::num::+}(1){(core::num*) →* core::int*};
+  value = value.{core::num::+}(1){(core::num) → core::int};
 }
 static method main() → dynamic {
-  self::Class1* c = new self::Class1::•();
-  invalid-expression "pkg/front_end/testcases/extensions/instance_access_of_static.dart:26:5: Error: The method 'staticMethod' isn't defined for the class 'Class1'.
+  self::Class1 c = new self::Class1::•();
+  invalid-expression "pkg/front_end/testcases/extensions/instance_access_of_static.dart:27:5: Error: The method 'staticMethod' isn't defined for the class 'Class1'.
  - 'Class1' is from 'pkg/front_end/testcases/extensions/instance_access_of_static.dart'.
 Try correcting the name to the name of an existing method, or defining a method named 'staticMethod'.
   c.staticMethod();
     ^^^^^^^^^^^^" in c{<unresolved>}.staticMethod();
-  invalid-expression "pkg/front_end/testcases/extensions/instance_access_of_static.dart:27:5: Error: The getter 'staticMethod' isn't defined for the class 'Class1'.
+  invalid-expression "pkg/front_end/testcases/extensions/instance_access_of_static.dart:28:5: Error: The getter 'staticMethod' isn't defined for the class 'Class1'.
  - 'Class1' is from 'pkg/front_end/testcases/extensions/instance_access_of_static.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'staticMethod'.
   c.staticMethod;
     ^^^^^^^^^^^^" in c{<unresolved>}.staticMethod;
-  invalid-expression "pkg/front_end/testcases/extensions/instance_access_of_static.dart:28:5: Error: The getter 'staticProperty' isn't defined for the class 'Class1'.
+  invalid-expression "pkg/front_end/testcases/extensions/instance_access_of_static.dart:29:5: Error: The getter 'staticProperty' isn't defined for the class 'Class1'.
  - 'Class1' is from 'pkg/front_end/testcases/extensions/instance_access_of_static.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'staticProperty'.
   c.staticProperty;
     ^^^^^^^^^^^^^^" in c{<unresolved>}.staticProperty;
-  invalid-expression "pkg/front_end/testcases/extensions/instance_access_of_static.dart:29:5: Error: The setter 'staticProperty' isn't defined for the class 'Class1'.
+  invalid-expression "pkg/front_end/testcases/extensions/instance_access_of_static.dart:30:5: Error: The setter 'staticProperty' isn't defined for the class 'Class1'.
  - 'Class1' is from 'pkg/front_end/testcases/extensions/instance_access_of_static.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'staticProperty'.
   c.staticProperty = 42;
     ^^^^^^^^^^^^^^" in c{<unresolved>}.staticProperty = 42;
-  invalid-expression "pkg/front_end/testcases/extensions/instance_access_of_static.dart:30:5: Error: The getter 'staticField' isn't defined for the class 'Class1'.
+  invalid-expression "pkg/front_end/testcases/extensions/instance_access_of_static.dart:31:5: Error: The getter 'staticField' isn't defined for the class 'Class1'.
  - 'Class1' is from 'pkg/front_end/testcases/extensions/instance_access_of_static.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'staticField'.
   c.staticField;
     ^^^^^^^^^^^" in c{<unresolved>}.staticField;
-  invalid-expression "pkg/front_end/testcases/extensions/instance_access_of_static.dart:31:5: Error: The setter 'staticField' isn't defined for the class 'Class1'.
+  invalid-expression "pkg/front_end/testcases/extensions/instance_access_of_static.dart:32:5: Error: The setter 'staticField' isn't defined for the class 'Class1'.
  - 'Class1' is from 'pkg/front_end/testcases/extensions/instance_access_of_static.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'staticField'.
   c.staticField = 42;
diff --git a/pkg/front_end/testcases/extensions/instance_access_of_static.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/instance_access_of_static.dart.weak.modular.expect
index 1dadbb1..3dfab80 100644
--- a/pkg/front_end/testcases/extensions/instance_access_of_static.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/extensions/instance_access_of_static.dart.weak.modular.expect
@@ -1,38 +1,38 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/extensions/instance_access_of_static.dart:26:5: Error: The method 'staticMethod' isn't defined for the class 'Class1'.
+// pkg/front_end/testcases/extensions/instance_access_of_static.dart:27:5: Error: The method 'staticMethod' isn't defined for the class 'Class1'.
 //  - 'Class1' is from 'pkg/front_end/testcases/extensions/instance_access_of_static.dart'.
 // Try correcting the name to the name of an existing method, or defining a method named 'staticMethod'.
 //   c.staticMethod();
 //     ^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/extensions/instance_access_of_static.dart:27:5: Error: The getter 'staticMethod' isn't defined for the class 'Class1'.
+// pkg/front_end/testcases/extensions/instance_access_of_static.dart:28:5: Error: The getter 'staticMethod' isn't defined for the class 'Class1'.
 //  - 'Class1' is from 'pkg/front_end/testcases/extensions/instance_access_of_static.dart'.
 // Try correcting the name to the name of an existing getter, or defining a getter or field named 'staticMethod'.
 //   c.staticMethod;
 //     ^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/extensions/instance_access_of_static.dart:28:5: Error: The getter 'staticProperty' isn't defined for the class 'Class1'.
+// pkg/front_end/testcases/extensions/instance_access_of_static.dart:29:5: Error: The getter 'staticProperty' isn't defined for the class 'Class1'.
 //  - 'Class1' is from 'pkg/front_end/testcases/extensions/instance_access_of_static.dart'.
 // Try correcting the name to the name of an existing getter, or defining a getter or field named 'staticProperty'.
 //   c.staticProperty;
 //     ^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/extensions/instance_access_of_static.dart:29:5: Error: The setter 'staticProperty' isn't defined for the class 'Class1'.
+// pkg/front_end/testcases/extensions/instance_access_of_static.dart:30:5: Error: The setter 'staticProperty' isn't defined for the class 'Class1'.
 //  - 'Class1' is from 'pkg/front_end/testcases/extensions/instance_access_of_static.dart'.
 // Try correcting the name to the name of an existing setter, or defining a setter or field named 'staticProperty'.
 //   c.staticProperty = 42;
 //     ^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/extensions/instance_access_of_static.dart:30:5: Error: The getter 'staticField' isn't defined for the class 'Class1'.
+// pkg/front_end/testcases/extensions/instance_access_of_static.dart:31:5: Error: The getter 'staticField' isn't defined for the class 'Class1'.
 //  - 'Class1' is from 'pkg/front_end/testcases/extensions/instance_access_of_static.dart'.
 // Try correcting the name to the name of an existing getter, or defining a getter or field named 'staticField'.
 //   c.staticField;
 //     ^^^^^^^^^^^
 //
-// pkg/front_end/testcases/extensions/instance_access_of_static.dart:31:5: Error: The setter 'staticField' isn't defined for the class 'Class1'.
+// pkg/front_end/testcases/extensions/instance_access_of_static.dart:32:5: Error: The setter 'staticField' isn't defined for the class 'Class1'.
 //  - 'Class1' is from 'pkg/front_end/testcases/extensions/instance_access_of_static.dart'.
 // Try correcting the name to the name of an existing setter, or defining a setter or field named 'staticField'.
 //   c.staticField = 42;
@@ -42,65 +42,56 @@
 import "dart:core" as core;
 
 class Class1 extends core::Object {
-  synthetic constructor •() → self::Class1*
+  synthetic constructor •() → self::Class1
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension Extension1 on self::Class1* {
+extension Extension1 on self::Class1 {
   static method staticMethod = self::Extension1|staticMethod;
   static get staticProperty = get self::Extension1|staticProperty;
   static field staticField = self::Extension1|staticField;
   static set staticProperty = set self::Extension1|staticProperty;
 }
-static field core::int* Extension1|staticField = 42;
+static field core::int Extension1|staticField = 42;
 static method Extension1|staticMethod() → dynamic {
   core::print("Extension1.staticMethod()");
 }
-static get Extension1|staticProperty() → dynamic {
+static get Extension1|staticProperty() → core::int {
   core::print("Extension1.staticProperty()");
+  return 0;
 }
-static set Extension1|staticProperty(core::int* value) → void {
+static set Extension1|staticProperty(core::int value) → void {
   core::print("Extension1.staticProperty(${value})");
-  value = value.{core::num::+}(1){(core::num*) →* core::int*};
+  value = value.{core::num::+}(1){(core::num) → core::int};
 }
 static method main() → dynamic {
-  self::Class1* c = new self::Class1::•();
-  invalid-expression "pkg/front_end/testcases/extensions/instance_access_of_static.dart:26:5: Error: The method 'staticMethod' isn't defined for the class 'Class1'.
+  self::Class1 c = new self::Class1::•();
+  invalid-expression "pkg/front_end/testcases/extensions/instance_access_of_static.dart:27:5: Error: The method 'staticMethod' isn't defined for the class 'Class1'.
  - 'Class1' is from 'pkg/front_end/testcases/extensions/instance_access_of_static.dart'.
 Try correcting the name to the name of an existing method, or defining a method named 'staticMethod'.
   c.staticMethod();
     ^^^^^^^^^^^^" in c{<unresolved>}.staticMethod();
-  invalid-expression "pkg/front_end/testcases/extensions/instance_access_of_static.dart:27:5: Error: The getter 'staticMethod' isn't defined for the class 'Class1'.
+  invalid-expression "pkg/front_end/testcases/extensions/instance_access_of_static.dart:28:5: Error: The getter 'staticMethod' isn't defined for the class 'Class1'.
  - 'Class1' is from 'pkg/front_end/testcases/extensions/instance_access_of_static.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'staticMethod'.
   c.staticMethod;
     ^^^^^^^^^^^^" in c{<unresolved>}.staticMethod;
-  invalid-expression "pkg/front_end/testcases/extensions/instance_access_of_static.dart:28:5: Error: The getter 'staticProperty' isn't defined for the class 'Class1'.
+  invalid-expression "pkg/front_end/testcases/extensions/instance_access_of_static.dart:29:5: Error: The getter 'staticProperty' isn't defined for the class 'Class1'.
  - 'Class1' is from 'pkg/front_end/testcases/extensions/instance_access_of_static.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'staticProperty'.
   c.staticProperty;
     ^^^^^^^^^^^^^^" in c{<unresolved>}.staticProperty;
-  invalid-expression "pkg/front_end/testcases/extensions/instance_access_of_static.dart:29:5: Error: The setter 'staticProperty' isn't defined for the class 'Class1'.
+  invalid-expression "pkg/front_end/testcases/extensions/instance_access_of_static.dart:30:5: Error: The setter 'staticProperty' isn't defined for the class 'Class1'.
  - 'Class1' is from 'pkg/front_end/testcases/extensions/instance_access_of_static.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'staticProperty'.
   c.staticProperty = 42;
     ^^^^^^^^^^^^^^" in c{<unresolved>}.staticProperty = 42;
-  invalid-expression "pkg/front_end/testcases/extensions/instance_access_of_static.dart:30:5: Error: The getter 'staticField' isn't defined for the class 'Class1'.
+  invalid-expression "pkg/front_end/testcases/extensions/instance_access_of_static.dart:31:5: Error: The getter 'staticField' isn't defined for the class 'Class1'.
  - 'Class1' is from 'pkg/front_end/testcases/extensions/instance_access_of_static.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'staticField'.
   c.staticField;
     ^^^^^^^^^^^" in c{<unresolved>}.staticField;
-  invalid-expression "pkg/front_end/testcases/extensions/instance_access_of_static.dart:31:5: Error: The setter 'staticField' isn't defined for the class 'Class1'.
+  invalid-expression "pkg/front_end/testcases/extensions/instance_access_of_static.dart:32:5: Error: The setter 'staticField' isn't defined for the class 'Class1'.
  - 'Class1' is from 'pkg/front_end/testcases/extensions/instance_access_of_static.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'staticField'.
   c.staticField = 42;
diff --git a/pkg/front_end/testcases/extensions/instance_access_of_static.dart.weak.outline.expect b/pkg/front_end/testcases/extensions/instance_access_of_static.dart.weak.outline.expect
index e33cdbd..e3ee7d7 100644
--- a/pkg/front_end/testcases/extensions/instance_access_of_static.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extensions/instance_access_of_static.dart.weak.outline.expect
@@ -1,33 +1,23 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Class1 extends core::Object {
-  synthetic constructor •() → self::Class1*
+  synthetic constructor •() → self::Class1
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension Extension1 on self::Class1* {
+extension Extension1 on self::Class1 {
   static method staticMethod = self::Extension1|staticMethod;
   static get staticProperty = get self::Extension1|staticProperty;
   static field staticField = self::Extension1|staticField;
   static set staticProperty = set self::Extension1|staticProperty;
 }
-static field core::int* Extension1|staticField;
+static field core::int Extension1|staticField;
 static method Extension1|staticMethod() → dynamic
   ;
-static get Extension1|staticProperty() → dynamic
+static get Extension1|staticProperty() → core::int
   ;
-static set Extension1|staticProperty(core::int* value) → void
+static set Extension1|staticProperty(core::int value) → void
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/extensions/instance_access_of_static.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/instance_access_of_static.dart.weak.transformed.expect
index 1dadbb1..3dfab80 100644
--- a/pkg/front_end/testcases/extensions/instance_access_of_static.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/instance_access_of_static.dart.weak.transformed.expect
@@ -1,38 +1,38 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/extensions/instance_access_of_static.dart:26:5: Error: The method 'staticMethod' isn't defined for the class 'Class1'.
+// pkg/front_end/testcases/extensions/instance_access_of_static.dart:27:5: Error: The method 'staticMethod' isn't defined for the class 'Class1'.
 //  - 'Class1' is from 'pkg/front_end/testcases/extensions/instance_access_of_static.dart'.
 // Try correcting the name to the name of an existing method, or defining a method named 'staticMethod'.
 //   c.staticMethod();
 //     ^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/extensions/instance_access_of_static.dart:27:5: Error: The getter 'staticMethod' isn't defined for the class 'Class1'.
+// pkg/front_end/testcases/extensions/instance_access_of_static.dart:28:5: Error: The getter 'staticMethod' isn't defined for the class 'Class1'.
 //  - 'Class1' is from 'pkg/front_end/testcases/extensions/instance_access_of_static.dart'.
 // Try correcting the name to the name of an existing getter, or defining a getter or field named 'staticMethod'.
 //   c.staticMethod;
 //     ^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/extensions/instance_access_of_static.dart:28:5: Error: The getter 'staticProperty' isn't defined for the class 'Class1'.
+// pkg/front_end/testcases/extensions/instance_access_of_static.dart:29:5: Error: The getter 'staticProperty' isn't defined for the class 'Class1'.
 //  - 'Class1' is from 'pkg/front_end/testcases/extensions/instance_access_of_static.dart'.
 // Try correcting the name to the name of an existing getter, or defining a getter or field named 'staticProperty'.
 //   c.staticProperty;
 //     ^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/extensions/instance_access_of_static.dart:29:5: Error: The setter 'staticProperty' isn't defined for the class 'Class1'.
+// pkg/front_end/testcases/extensions/instance_access_of_static.dart:30:5: Error: The setter 'staticProperty' isn't defined for the class 'Class1'.
 //  - 'Class1' is from 'pkg/front_end/testcases/extensions/instance_access_of_static.dart'.
 // Try correcting the name to the name of an existing setter, or defining a setter or field named 'staticProperty'.
 //   c.staticProperty = 42;
 //     ^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/extensions/instance_access_of_static.dart:30:5: Error: The getter 'staticField' isn't defined for the class 'Class1'.
+// pkg/front_end/testcases/extensions/instance_access_of_static.dart:31:5: Error: The getter 'staticField' isn't defined for the class 'Class1'.
 //  - 'Class1' is from 'pkg/front_end/testcases/extensions/instance_access_of_static.dart'.
 // Try correcting the name to the name of an existing getter, or defining a getter or field named 'staticField'.
 //   c.staticField;
 //     ^^^^^^^^^^^
 //
-// pkg/front_end/testcases/extensions/instance_access_of_static.dart:31:5: Error: The setter 'staticField' isn't defined for the class 'Class1'.
+// pkg/front_end/testcases/extensions/instance_access_of_static.dart:32:5: Error: The setter 'staticField' isn't defined for the class 'Class1'.
 //  - 'Class1' is from 'pkg/front_end/testcases/extensions/instance_access_of_static.dart'.
 // Try correcting the name to the name of an existing setter, or defining a setter or field named 'staticField'.
 //   c.staticField = 42;
@@ -42,65 +42,56 @@
 import "dart:core" as core;
 
 class Class1 extends core::Object {
-  synthetic constructor •() → self::Class1*
+  synthetic constructor •() → self::Class1
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension Extension1 on self::Class1* {
+extension Extension1 on self::Class1 {
   static method staticMethod = self::Extension1|staticMethod;
   static get staticProperty = get self::Extension1|staticProperty;
   static field staticField = self::Extension1|staticField;
   static set staticProperty = set self::Extension1|staticProperty;
 }
-static field core::int* Extension1|staticField = 42;
+static field core::int Extension1|staticField = 42;
 static method Extension1|staticMethod() → dynamic {
   core::print("Extension1.staticMethod()");
 }
-static get Extension1|staticProperty() → dynamic {
+static get Extension1|staticProperty() → core::int {
   core::print("Extension1.staticProperty()");
+  return 0;
 }
-static set Extension1|staticProperty(core::int* value) → void {
+static set Extension1|staticProperty(core::int value) → void {
   core::print("Extension1.staticProperty(${value})");
-  value = value.{core::num::+}(1){(core::num*) →* core::int*};
+  value = value.{core::num::+}(1){(core::num) → core::int};
 }
 static method main() → dynamic {
-  self::Class1* c = new self::Class1::•();
-  invalid-expression "pkg/front_end/testcases/extensions/instance_access_of_static.dart:26:5: Error: The method 'staticMethod' isn't defined for the class 'Class1'.
+  self::Class1 c = new self::Class1::•();
+  invalid-expression "pkg/front_end/testcases/extensions/instance_access_of_static.dart:27:5: Error: The method 'staticMethod' isn't defined for the class 'Class1'.
  - 'Class1' is from 'pkg/front_end/testcases/extensions/instance_access_of_static.dart'.
 Try correcting the name to the name of an existing method, or defining a method named 'staticMethod'.
   c.staticMethod();
     ^^^^^^^^^^^^" in c{<unresolved>}.staticMethod();
-  invalid-expression "pkg/front_end/testcases/extensions/instance_access_of_static.dart:27:5: Error: The getter 'staticMethod' isn't defined for the class 'Class1'.
+  invalid-expression "pkg/front_end/testcases/extensions/instance_access_of_static.dart:28:5: Error: The getter 'staticMethod' isn't defined for the class 'Class1'.
  - 'Class1' is from 'pkg/front_end/testcases/extensions/instance_access_of_static.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'staticMethod'.
   c.staticMethod;
     ^^^^^^^^^^^^" in c{<unresolved>}.staticMethod;
-  invalid-expression "pkg/front_end/testcases/extensions/instance_access_of_static.dart:28:5: Error: The getter 'staticProperty' isn't defined for the class 'Class1'.
+  invalid-expression "pkg/front_end/testcases/extensions/instance_access_of_static.dart:29:5: Error: The getter 'staticProperty' isn't defined for the class 'Class1'.
  - 'Class1' is from 'pkg/front_end/testcases/extensions/instance_access_of_static.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'staticProperty'.
   c.staticProperty;
     ^^^^^^^^^^^^^^" in c{<unresolved>}.staticProperty;
-  invalid-expression "pkg/front_end/testcases/extensions/instance_access_of_static.dart:29:5: Error: The setter 'staticProperty' isn't defined for the class 'Class1'.
+  invalid-expression "pkg/front_end/testcases/extensions/instance_access_of_static.dart:30:5: Error: The setter 'staticProperty' isn't defined for the class 'Class1'.
  - 'Class1' is from 'pkg/front_end/testcases/extensions/instance_access_of_static.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'staticProperty'.
   c.staticProperty = 42;
     ^^^^^^^^^^^^^^" in c{<unresolved>}.staticProperty = 42;
-  invalid-expression "pkg/front_end/testcases/extensions/instance_access_of_static.dart:30:5: Error: The getter 'staticField' isn't defined for the class 'Class1'.
+  invalid-expression "pkg/front_end/testcases/extensions/instance_access_of_static.dart:31:5: Error: The getter 'staticField' isn't defined for the class 'Class1'.
  - 'Class1' is from 'pkg/front_end/testcases/extensions/instance_access_of_static.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'staticField'.
   c.staticField;
     ^^^^^^^^^^^" in c{<unresolved>}.staticField;
-  invalid-expression "pkg/front_end/testcases/extensions/instance_access_of_static.dart:31:5: Error: The setter 'staticField' isn't defined for the class 'Class1'.
+  invalid-expression "pkg/front_end/testcases/extensions/instance_access_of_static.dart:32:5: Error: The setter 'staticField' isn't defined for the class 'Class1'.
  - 'Class1' is from 'pkg/front_end/testcases/extensions/instance_access_of_static.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'staticField'.
   c.staticField = 42;
diff --git a/pkg/front_end/testcases/extensions/instance_members.dart b/pkg/front_end/testcases/extensions/instance_members.dart
index 3792c5d..38b99d8 100644
--- a/pkg/front_end/testcases/extensions/instance_members.dart
+++ b/pkg/front_end/testcases/extensions/instance_members.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2019, 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.
-// @dart=2.9
+
 class A1 {}
 
 extension A2 on A1 {
@@ -14,12 +14,12 @@
     return this;
   }
 
-  A1 method3<T>([T o]) {
+  A1 method3<T>([T? o]) {
     print(o);
     return this;
   }
 
-  A1 method4<T>({T o}) {
+  A1 method4<T>({T? o}) {
     print(o);
     return this;
   }
diff --git a/pkg/front_end/testcases/extensions/instance_members.dart.textual_outline.expect b/pkg/front_end/testcases/extensions/instance_members.dart.textual_outline.expect
index 01b5f25..7049b62 100644
--- a/pkg/front_end/testcases/extensions/instance_members.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/extensions/instance_members.dart.textual_outline.expect
@@ -1,11 +1,10 @@
-// @dart = 2.9
 class A1 {}
 
 extension A2 on A1 {
   A1 method1() {}
   A1 method2<T>(T o) {}
-  A1 method3<T>([T o]) {}
-  A1 method4<T>({T o}) {}
+  A1 method3<T>([T? o]) {}
+  A1 method4<T>({T? o}) {}
 }
 
 class B1<T> {}
diff --git a/pkg/front_end/testcases/extensions/instance_members.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/extensions/instance_members.dart.textual_outline_modelled.expect
index ecc7423..34e212d 100644
--- a/pkg/front_end/testcases/extensions/instance_members.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/extensions/instance_members.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A1 {}
 
 class B1<T> {}
@@ -6,8 +5,8 @@
 extension A2 on A1 {
   A1 method1() {}
   A1 method2<T>(T o) {}
-  A1 method3<T>([T o]) {}
-  A1 method4<T>({T o}) {}
+  A1 method3<T>([T? o]) {}
+  A1 method4<T>({T? o}) {}
 }
 
 extension B2<T> on B1<T> {
diff --git a/pkg/front_end/testcases/extensions/instance_members.dart.weak.expect b/pkg/front_end/testcases/extensions/instance_members.dart.weak.expect
index d189b6d..732d3c6 100644
--- a/pkg/front_end/testcases/extensions/instance_members.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/instance_members.dart.weak.expect
@@ -1,38 +1,18 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A1 extends core::Object {
-  synthetic constructor •() → self::A1*
+  synthetic constructor •() → self::A1
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B1<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B1<self::B1::T*>*
+class B1<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B1<self::B1::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension A2 on self::A1* {
+extension A2 on self::A1 {
   method method1 = self::A2|method1;
   tearoff method1 = self::A2|get#method1;
   method method2 = self::A2|method2;
@@ -42,46 +22,46 @@
   method method4 = self::A2|method4;
   tearoff method4 = self::A2|get#method4;
 }
-extension B2<T extends core::Object* = dynamic> on self::B1<T*>* {
+extension B2<T extends core::Object? = dynamic> on self::B1<T%> {
   method method1 = self::B2|method1;
   tearoff method1 = self::B2|get#method1;
   method method2 = self::B2|method2;
   tearoff method2 = self::B2|get#method2;
 }
-static method A2|method1(lowered final self::A1* #this) → self::A1* {
+static method A2|method1(lowered final self::A1 #this) → self::A1 {
   return #this;
 }
-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>(lowered final self::A1* #this, self::A2|method2::T* o) → 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>(lowered final self::A1 #this, self::A2|method2::T% o) → self::A1 {
   core::print(o);
   return #this;
 }
-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>(lowered final self::A1* #this, [self::A2|method3::T* o = #C1]) → 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>(lowered final self::A1 #this, [self::A2|method3::T? o = #C1]) → self::A1 {
   core::print(o);
   return #this;
 }
-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>(lowered final self::A1* #this, {self::A2|method4::T* o = #C1}) → 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>(lowered final self::A1 #this, {self::A2|method4::T? o = #C1}) → self::A1 {
   core::print(o);
   return #this;
 }
-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>(lowered final self::B1<self::B2|method1::T*>* #this) → self::B1<self::B2|method1::T*>* {
+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>(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>(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>(lowered final self::B1<self::B2|method2::T*>* #this, self::B2|method2::S* o) → self::B1<self::B2|method2::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>(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>(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 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 {}
 
 constants  {
diff --git a/pkg/front_end/testcases/extensions/instance_members.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/instance_members.dart.weak.modular.expect
index d189b6d..732d3c6 100644
--- a/pkg/front_end/testcases/extensions/instance_members.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/extensions/instance_members.dart.weak.modular.expect
@@ -1,38 +1,18 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A1 extends core::Object {
-  synthetic constructor •() → self::A1*
+  synthetic constructor •() → self::A1
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B1<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B1<self::B1::T*>*
+class B1<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B1<self::B1::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension A2 on self::A1* {
+extension A2 on self::A1 {
   method method1 = self::A2|method1;
   tearoff method1 = self::A2|get#method1;
   method method2 = self::A2|method2;
@@ -42,46 +22,46 @@
   method method4 = self::A2|method4;
   tearoff method4 = self::A2|get#method4;
 }
-extension B2<T extends core::Object* = dynamic> on self::B1<T*>* {
+extension B2<T extends core::Object? = dynamic> on self::B1<T%> {
   method method1 = self::B2|method1;
   tearoff method1 = self::B2|get#method1;
   method method2 = self::B2|method2;
   tearoff method2 = self::B2|get#method2;
 }
-static method A2|method1(lowered final self::A1* #this) → self::A1* {
+static method A2|method1(lowered final self::A1 #this) → self::A1 {
   return #this;
 }
-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>(lowered final self::A1* #this, self::A2|method2::T* o) → 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>(lowered final self::A1 #this, self::A2|method2::T% o) → self::A1 {
   core::print(o);
   return #this;
 }
-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>(lowered final self::A1* #this, [self::A2|method3::T* o = #C1]) → 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>(lowered final self::A1 #this, [self::A2|method3::T? o = #C1]) → self::A1 {
   core::print(o);
   return #this;
 }
-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>(lowered final self::A1* #this, {self::A2|method4::T* o = #C1}) → 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>(lowered final self::A1 #this, {self::A2|method4::T? o = #C1}) → self::A1 {
   core::print(o);
   return #this;
 }
-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>(lowered final self::B1<self::B2|method1::T*>* #this) → self::B1<self::B2|method1::T*>* {
+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>(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>(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>(lowered final self::B1<self::B2|method2::T*>* #this, self::B2|method2::S* o) → self::B1<self::B2|method2::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>(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>(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 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 {}
 
 constants  {
diff --git a/pkg/front_end/testcases/extensions/instance_members.dart.weak.outline.expect b/pkg/front_end/testcases/extensions/instance_members.dart.weak.outline.expect
index 63e9fce..a7decdd 100644
--- a/pkg/front_end/testcases/extensions/instance_members.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extensions/instance_members.dart.weak.outline.expect
@@ -1,36 +1,16 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A1 extends core::Object {
-  synthetic constructor •() → self::A1*
+  synthetic constructor •() → self::A1
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B1<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B1<self::B1::T*>*
+class B1<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B1<self::B1::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension A2 on self::A1* {
+extension A2 on self::A1 {
   method method1 = self::A2|method1;
   tearoff method1 = self::A2|get#method1;
   method method2 = self::A2|method2;
@@ -40,35 +20,35 @@
   method method4 = self::A2|method4;
   tearoff method4 = self::A2|get#method4;
 }
-extension B2<T extends core::Object* = dynamic> on self::B1<T*>* {
+extension B2<T extends core::Object? = dynamic> on self::B1<T%> {
   method method1 = self::B2|method1;
   tearoff method1 = self::B2|get#method1;
   method method2 = self::B2|method2;
   tearoff method2 = self::B2|get#method2;
 }
-static method A2|method1(lowered final self::A1* #this) → self::A1*
+static method A2|method1(lowered 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>(lowered final self::A1* #this, self::A2|method2::T* o) → 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>(lowered final self::A1 #this, self::A2|method2::T% o) → 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>(lowered final self::A1* #this, [self::A2|method3::T* o]) → 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>(lowered final self::A1 #this, [self::A2|method3::T? o]) → 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>(lowered final self::A1* #this, {self::A2|method4::T* o}) → 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>(lowered final self::A1 #this, {self::A2|method4::T? o}) → 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>(lowered final self::B1<self::B2|method1::T*>* #this) → self::B1<self::B2|method1::T*>*
+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>(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>(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>(lowered final self::B1<self::B2|method2::T*>* #this, self::B2|method2::S* o) → self::B1<self::B2|method2::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>(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>(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 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.weak.transformed.expect b/pkg/front_end/testcases/extensions/instance_members.dart.weak.transformed.expect
index d189b6d..732d3c6 100644
--- a/pkg/front_end/testcases/extensions/instance_members.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/instance_members.dart.weak.transformed.expect
@@ -1,38 +1,18 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A1 extends core::Object {
-  synthetic constructor •() → self::A1*
+  synthetic constructor •() → self::A1
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B1<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B1<self::B1::T*>*
+class B1<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B1<self::B1::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension A2 on self::A1* {
+extension A2 on self::A1 {
   method method1 = self::A2|method1;
   tearoff method1 = self::A2|get#method1;
   method method2 = self::A2|method2;
@@ -42,46 +22,46 @@
   method method4 = self::A2|method4;
   tearoff method4 = self::A2|get#method4;
 }
-extension B2<T extends core::Object* = dynamic> on self::B1<T*>* {
+extension B2<T extends core::Object? = dynamic> on self::B1<T%> {
   method method1 = self::B2|method1;
   tearoff method1 = self::B2|get#method1;
   method method2 = self::B2|method2;
   tearoff method2 = self::B2|get#method2;
 }
-static method A2|method1(lowered final self::A1* #this) → self::A1* {
+static method A2|method1(lowered final self::A1 #this) → self::A1 {
   return #this;
 }
-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>(lowered final self::A1* #this, self::A2|method2::T* o) → 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>(lowered final self::A1 #this, self::A2|method2::T% o) → self::A1 {
   core::print(o);
   return #this;
 }
-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>(lowered final self::A1* #this, [self::A2|method3::T* o = #C1]) → 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>(lowered final self::A1 #this, [self::A2|method3::T? o = #C1]) → self::A1 {
   core::print(o);
   return #this;
 }
-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>(lowered final self::A1* #this, {self::A2|method4::T* o = #C1}) → 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>(lowered final self::A1 #this, {self::A2|method4::T? o = #C1}) → self::A1 {
   core::print(o);
   return #this;
 }
-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>(lowered final self::B1<self::B2|method1::T*>* #this) → self::B1<self::B2|method1::T*>* {
+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>(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>(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>(lowered final self::B1<self::B2|method2::T*>* #this, self::B2|method2::S* o) → self::B1<self::B2|method2::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>(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>(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 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 {}
 
 constants  {
diff --git a/pkg/front_end/testcases/extensions/instance_tearoff.dart b/pkg/front_end/testcases/extensions/instance_tearoff.dart
index edff3f7..6175790 100644
--- a/pkg/front_end/testcases/extensions/instance_tearoff.dart
+++ b/pkg/front_end/testcases/extensions/instance_tearoff.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2019, 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.
-// @dart=2.9
+
 class Class1 {
   int field;
 
@@ -23,7 +23,7 @@
     print('Extension1.method on $this');
     return field;
   }
-  int genericMethod<T extends num>(T t) {
+  num genericMethod<T extends num>(T t) {
     print('Extension1.genericMethod<$T>($t) on $this');
     return field + t;
   }
@@ -35,7 +35,7 @@
     print('Extension2.method on $this');
     return field + 2;
   }
-  int genericMethod<T extends num>(T t) {
+  num genericMethod<T extends num>(T t) {
     print('Extension2.genericMethod<$T>($t) on $this');
     return field + t + 3;
   }
diff --git a/pkg/front_end/testcases/extensions/instance_tearoff.dart.textual_outline.expect b/pkg/front_end/testcases/extensions/instance_tearoff.dart.textual_outline.expect
index 153e287..8e29444 100644
--- a/pkg/front_end/testcases/extensions/instance_tearoff.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/extensions/instance_tearoff.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Class1 {
   int field;
   Class1(this.field);
@@ -13,12 +12,12 @@
 
 extension Extension1 on Class1 {
   int method() {}
-  int genericMethod<T extends num>(T t) {}
+  num genericMethod<T extends num>(T t) {}
 }
 
 extension Extension2 on Class2 {
   int method() {}
-  int genericMethod<T extends num>(T t) {}
+  num genericMethod<T extends num>(T t) {}
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/extensions/instance_tearoff.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/extensions/instance_tearoff.dart.textual_outline_modelled.expect
index e782f44..e9ddd5c 100644
--- a/pkg/front_end/testcases/extensions/instance_tearoff.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/extensions/instance_tearoff.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Class1 {
   Class1(this.field);
   String toString() => 'Class1($field)';
@@ -14,13 +13,13 @@
 expect(expected, actual) {}
 
 extension Extension1 on Class1 {
-  int genericMethod<T extends num>(T t) {}
   int method() {}
+  num genericMethod<T extends num>(T t) {}
 }
 
 extension Extension2 on Class2 {
-  int genericMethod<T extends num>(T t) {}
   int method() {}
+  num genericMethod<T extends num>(T t) {}
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/extensions/instance_tearoff.dart.weak.expect b/pkg/front_end/testcases/extensions/instance_tearoff.dart.weak.expect
index 1240994..17dee12 100644
--- a/pkg/front_end/testcases/extensions/instance_tearoff.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/instance_tearoff.dart.weak.expect
@@ -1,119 +1,101 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Class1 extends core::Object {
-  field core::int* field;
-  constructor •(core::int* field) → self::Class1*
+  field core::int field;
+  constructor •(core::int field) → self::Class1
     : self::Class1::field = field, super core::Object::•()
     ;
-  method toString() → core::String*
-    return "Class1(${this.{self::Class1::field}{core::int*}})";
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method toString() → core::String
+    return "Class1(${this.{self::Class1::field}{core::int}})";
 }
 class Class2 extends core::Object {
-  field core::int* field;
-  constructor •(core::int* field) → self::Class2*
+  field core::int field;
+  constructor •(core::int field) → self::Class2
     : self::Class2::field = field, super core::Object::•()
     ;
-  method toString() → core::String*
-    return "Class2(${this.{self::Class2::field}{core::int*}})";
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method toString() → core::String
+    return "Class2(${this.{self::Class2::field}{core::int}})";
 }
-extension Extension1 on self::Class1* {
+extension Extension1 on self::Class1 {
   method method = self::Extension1|method;
   tearoff method = self::Extension1|get#method;
   method genericMethod = self::Extension1|genericMethod;
   tearoff genericMethod = self::Extension1|get#genericMethod;
 }
-extension Extension2 on self::Class2* {
+extension Extension2 on self::Class2 {
   method method = self::Extension2|method;
   tearoff method = self::Extension2|get#method;
   method genericMethod = self::Extension2|genericMethod;
   tearoff genericMethod = self::Extension2|get#genericMethod;
 }
-static method Extension1|method(lowered 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}{core::int*};
+  return #this.{self::Class1::field}{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*>(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::int*}.{core::num::+}(t){(core::num*) →* core::num*} as{TypeError} 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>(lowered final self::Class1 #this, self::Extension1|genericMethod::T t) → core::num {
+  core::print("Extension1.genericMethod<${self::Extension1|genericMethod::T}>(${t}) on ${#this}");
+  return #this.{self::Class1::field}{core::int}.{core::num::+}(t){(core::num) → core::num};
 }
-static method Extension1|get#genericMethod(lowered final self::Class1* #this) → <T extends core::num*>(T*) →* core::int*
-  return <T extends core::num*>(T* t) → core::int* => self::Extension1|genericMethod<T*>(#this, t);
-static method Extension2|method(lowered final self::Class2* #this) → core::int* {
+static method Extension1|get#genericMethod(lowered final self::Class1 #this) → <T extends core::num>(T) → core::num
+  return <T extends core::num>(T t) → core::num => self::Extension1|genericMethod<T>(#this, t);
+static method Extension2|method(lowered final self::Class2 #this) → core::int {
   core::print("Extension2.method on ${#this}");
-  return #this.{self::Class2::field}{core::int*}.{core::num::+}(2){(core::num*) →* core::int*};
+  return #this.{self::Class2::field}{core::int}.{core::num::+}(2){(core::num) → 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*>(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::int*}.{core::num::+}(t){(core::num*) →* core::num*}.{core::num::+}(3){(core::num*) →* core::num*} as{TypeError} 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>(lowered final self::Class2 #this, self::Extension2|genericMethod::T t) → core::num {
+  core::print("Extension2.genericMethod<${self::Extension2|genericMethod::T}>(${t}) on ${#this}");
+  return #this.{self::Class2::field}{core::int}.{core::num::+}(t){(core::num) → core::num}.{core::num::+}(3){(core::num) → core::num};
 }
-static method Extension2|get#genericMethod(lowered final self::Class2* #this) → <T extends core::num*>(T*) →* core::int*
-  return <T extends core::num*>(T* t) → core::int* => self::Extension2|genericMethod<T*>(#this, t);
+static method Extension2|get#genericMethod(lowered final self::Class2 #this) → <T extends core::num>(T) → core::num
+  return <T extends core::num>(T t) → core::num => self::Extension2|genericMethod<T>(#this, t);
 static method main() → dynamic {
   self::testExtension1();
   self::testExtension2();
 }
 static method testExtension1() → dynamic {
-  self::Class1* c0 = new self::Class1::•(0);
-  self::Class1* c1 = new self::Class1::•(1);
-  () →* core::int* tearOff0 = self::Extension1|get#method(c0);
-  self::expect(0, tearOff0(){() →* core::int*});
-  c0 = new self::Class1::•(4.{core::int::unary-}(){() →* core::int*});
-  self::expect(0, tearOff0(){() →* core::int*});
-  () →* core::int* tearOff1 = self::Extension1|get#method(c1);
-  self::expect(1, tearOff1(){() →* core::int*});
-  c1 = new self::Class1::•(7.{core::int::unary-}(){() →* core::int*});
-  self::expect(1, tearOff1(){() →* core::int*});
-  <T extends core::num*>(T*) →* core::int* genericTearOff0 = self::Extension1|get#genericMethod(c0);
-  self::expect(38, genericTearOff0<core::int*>(42){(core::int*) →* core::int*});
-  self::expect(38, genericTearOff0<core::num*>(42){(core::num*) →* core::int*});
-  <T extends core::num*>(T*) →* core::int* genericTearOff1 = self::Extension1|get#genericMethod(c1);
-  self::expect(35, genericTearOff1<core::int*>(42){(core::int*) →* core::int*});
-  self::expect(35, genericTearOff1<core::num*>(42){(core::num*) →* core::int*});
+  self::Class1 c0 = new self::Class1::•(0);
+  self::Class1 c1 = new self::Class1::•(1);
+  () → core::int tearOff0 = self::Extension1|get#method(c0);
+  self::expect(0, tearOff0(){() → core::int});
+  c0 = new self::Class1::•(4.{core::int::unary-}(){() → core::int});
+  self::expect(0, tearOff0(){() → core::int});
+  () → core::int tearOff1 = self::Extension1|get#method(c1);
+  self::expect(1, tearOff1(){() → core::int});
+  c1 = new self::Class1::•(7.{core::int::unary-}(){() → core::int});
+  self::expect(1, tearOff1(){() → core::int});
+  <T extends core::num>(T) → core::num genericTearOff0 = self::Extension1|get#genericMethod(c0);
+  self::expect(38, genericTearOff0<core::int>(42){(core::int) → core::num});
+  self::expect(38, genericTearOff0<core::num>(42){(core::num) → core::num});
+  <T extends core::num>(T) → core::num genericTearOff1 = self::Extension1|get#genericMethod(c1);
+  self::expect(35, genericTearOff1<core::int>(42){(core::int) → core::num});
+  self::expect(35, genericTearOff1<core::num>(42){(core::num) → core::num});
 }
 static method testExtension2() → dynamic {
-  self::Class2* c0 = new self::Class2::•(0);
-  self::Class2* c1 = new self::Class2::•(1);
-  () →* core::int* tearOff0 = self::Extension2|get#method(c0);
-  self::expect(2, tearOff0(){() →* core::int*});
-  c0 = new self::Class2::•(4.{core::int::unary-}(){() →* core::int*});
-  self::expect(2, tearOff0(){() →* core::int*});
-  () →* core::int* tearOff1 = self::Extension2|get#method(c1);
-  self::expect(3, tearOff1(){() →* core::int*});
-  c1 = new self::Class2::•(7.{core::int::unary-}(){() →* core::int*});
-  self::expect(3, tearOff1(){() →* core::int*});
-  <T extends core::num*>(T*) →* core::int* genericTearOff0 = self::Extension2|get#genericMethod(c0);
-  self::expect(41, genericTearOff0<core::int*>(42){(core::int*) →* core::int*});
-  self::expect(41, genericTearOff0<core::num*>(42){(core::num*) →* core::int*});
-  <T extends core::num*>(T*) →* core::int* genericTearOff1 = self::Extension2|get#genericMethod(c1);
-  self::expect(38, genericTearOff1<core::int*>(42){(core::int*) →* core::int*});
-  self::expect(38, genericTearOff1<core::num*>(42){(core::num*) →* core::int*});
+  self::Class2 c0 = new self::Class2::•(0);
+  self::Class2 c1 = new self::Class2::•(1);
+  () → core::int tearOff0 = self::Extension2|get#method(c0);
+  self::expect(2, tearOff0(){() → core::int});
+  c0 = new self::Class2::•(4.{core::int::unary-}(){() → core::int});
+  self::expect(2, tearOff0(){() → core::int});
+  () → core::int tearOff1 = self::Extension2|get#method(c1);
+  self::expect(3, tearOff1(){() → core::int});
+  c1 = new self::Class2::•(7.{core::int::unary-}(){() → core::int});
+  self::expect(3, tearOff1(){() → core::int});
+  <T extends core::num>(T) → core::num genericTearOff0 = self::Extension2|get#genericMethod(c0);
+  self::expect(41, genericTearOff0<core::int>(42){(core::int) → core::num});
+  self::expect(41, genericTearOff0<core::num>(42){(core::num) → core::num});
+  <T extends core::num>(T) → core::num genericTearOff1 = self::Extension2|get#genericMethod(c1);
+  self::expect(38, genericTearOff1<core::int>(42){(core::int) → core::num});
+  self::expect(38, genericTearOff1<core::num>(42){(core::num) → core::num});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual)) {
     throw "Mismatch: expected=${expected}, actual=${actual}";
   }
 }
diff --git a/pkg/front_end/testcases/extensions/instance_tearoff.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/instance_tearoff.dart.weak.modular.expect
index 1240994..17dee12 100644
--- a/pkg/front_end/testcases/extensions/instance_tearoff.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/extensions/instance_tearoff.dart.weak.modular.expect
@@ -1,119 +1,101 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Class1 extends core::Object {
-  field core::int* field;
-  constructor •(core::int* field) → self::Class1*
+  field core::int field;
+  constructor •(core::int field) → self::Class1
     : self::Class1::field = field, super core::Object::•()
     ;
-  method toString() → core::String*
-    return "Class1(${this.{self::Class1::field}{core::int*}})";
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method toString() → core::String
+    return "Class1(${this.{self::Class1::field}{core::int}})";
 }
 class Class2 extends core::Object {
-  field core::int* field;
-  constructor •(core::int* field) → self::Class2*
+  field core::int field;
+  constructor •(core::int field) → self::Class2
     : self::Class2::field = field, super core::Object::•()
     ;
-  method toString() → core::String*
-    return "Class2(${this.{self::Class2::field}{core::int*}})";
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method toString() → core::String
+    return "Class2(${this.{self::Class2::field}{core::int}})";
 }
-extension Extension1 on self::Class1* {
+extension Extension1 on self::Class1 {
   method method = self::Extension1|method;
   tearoff method = self::Extension1|get#method;
   method genericMethod = self::Extension1|genericMethod;
   tearoff genericMethod = self::Extension1|get#genericMethod;
 }
-extension Extension2 on self::Class2* {
+extension Extension2 on self::Class2 {
   method method = self::Extension2|method;
   tearoff method = self::Extension2|get#method;
   method genericMethod = self::Extension2|genericMethod;
   tearoff genericMethod = self::Extension2|get#genericMethod;
 }
-static method Extension1|method(lowered 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}{core::int*};
+  return #this.{self::Class1::field}{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*>(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::int*}.{core::num::+}(t){(core::num*) →* core::num*} as{TypeError} 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>(lowered final self::Class1 #this, self::Extension1|genericMethod::T t) → core::num {
+  core::print("Extension1.genericMethod<${self::Extension1|genericMethod::T}>(${t}) on ${#this}");
+  return #this.{self::Class1::field}{core::int}.{core::num::+}(t){(core::num) → core::num};
 }
-static method Extension1|get#genericMethod(lowered final self::Class1* #this) → <T extends core::num*>(T*) →* core::int*
-  return <T extends core::num*>(T* t) → core::int* => self::Extension1|genericMethod<T*>(#this, t);
-static method Extension2|method(lowered final self::Class2* #this) → core::int* {
+static method Extension1|get#genericMethod(lowered final self::Class1 #this) → <T extends core::num>(T) → core::num
+  return <T extends core::num>(T t) → core::num => self::Extension1|genericMethod<T>(#this, t);
+static method Extension2|method(lowered final self::Class2 #this) → core::int {
   core::print("Extension2.method on ${#this}");
-  return #this.{self::Class2::field}{core::int*}.{core::num::+}(2){(core::num*) →* core::int*};
+  return #this.{self::Class2::field}{core::int}.{core::num::+}(2){(core::num) → 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*>(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::int*}.{core::num::+}(t){(core::num*) →* core::num*}.{core::num::+}(3){(core::num*) →* core::num*} as{TypeError} 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>(lowered final self::Class2 #this, self::Extension2|genericMethod::T t) → core::num {
+  core::print("Extension2.genericMethod<${self::Extension2|genericMethod::T}>(${t}) on ${#this}");
+  return #this.{self::Class2::field}{core::int}.{core::num::+}(t){(core::num) → core::num}.{core::num::+}(3){(core::num) → core::num};
 }
-static method Extension2|get#genericMethod(lowered final self::Class2* #this) → <T extends core::num*>(T*) →* core::int*
-  return <T extends core::num*>(T* t) → core::int* => self::Extension2|genericMethod<T*>(#this, t);
+static method Extension2|get#genericMethod(lowered final self::Class2 #this) → <T extends core::num>(T) → core::num
+  return <T extends core::num>(T t) → core::num => self::Extension2|genericMethod<T>(#this, t);
 static method main() → dynamic {
   self::testExtension1();
   self::testExtension2();
 }
 static method testExtension1() → dynamic {
-  self::Class1* c0 = new self::Class1::•(0);
-  self::Class1* c1 = new self::Class1::•(1);
-  () →* core::int* tearOff0 = self::Extension1|get#method(c0);
-  self::expect(0, tearOff0(){() →* core::int*});
-  c0 = new self::Class1::•(4.{core::int::unary-}(){() →* core::int*});
-  self::expect(0, tearOff0(){() →* core::int*});
-  () →* core::int* tearOff1 = self::Extension1|get#method(c1);
-  self::expect(1, tearOff1(){() →* core::int*});
-  c1 = new self::Class1::•(7.{core::int::unary-}(){() →* core::int*});
-  self::expect(1, tearOff1(){() →* core::int*});
-  <T extends core::num*>(T*) →* core::int* genericTearOff0 = self::Extension1|get#genericMethod(c0);
-  self::expect(38, genericTearOff0<core::int*>(42){(core::int*) →* core::int*});
-  self::expect(38, genericTearOff0<core::num*>(42){(core::num*) →* core::int*});
-  <T extends core::num*>(T*) →* core::int* genericTearOff1 = self::Extension1|get#genericMethod(c1);
-  self::expect(35, genericTearOff1<core::int*>(42){(core::int*) →* core::int*});
-  self::expect(35, genericTearOff1<core::num*>(42){(core::num*) →* core::int*});
+  self::Class1 c0 = new self::Class1::•(0);
+  self::Class1 c1 = new self::Class1::•(1);
+  () → core::int tearOff0 = self::Extension1|get#method(c0);
+  self::expect(0, tearOff0(){() → core::int});
+  c0 = new self::Class1::•(4.{core::int::unary-}(){() → core::int});
+  self::expect(0, tearOff0(){() → core::int});
+  () → core::int tearOff1 = self::Extension1|get#method(c1);
+  self::expect(1, tearOff1(){() → core::int});
+  c1 = new self::Class1::•(7.{core::int::unary-}(){() → core::int});
+  self::expect(1, tearOff1(){() → core::int});
+  <T extends core::num>(T) → core::num genericTearOff0 = self::Extension1|get#genericMethod(c0);
+  self::expect(38, genericTearOff0<core::int>(42){(core::int) → core::num});
+  self::expect(38, genericTearOff0<core::num>(42){(core::num) → core::num});
+  <T extends core::num>(T) → core::num genericTearOff1 = self::Extension1|get#genericMethod(c1);
+  self::expect(35, genericTearOff1<core::int>(42){(core::int) → core::num});
+  self::expect(35, genericTearOff1<core::num>(42){(core::num) → core::num});
 }
 static method testExtension2() → dynamic {
-  self::Class2* c0 = new self::Class2::•(0);
-  self::Class2* c1 = new self::Class2::•(1);
-  () →* core::int* tearOff0 = self::Extension2|get#method(c0);
-  self::expect(2, tearOff0(){() →* core::int*});
-  c0 = new self::Class2::•(4.{core::int::unary-}(){() →* core::int*});
-  self::expect(2, tearOff0(){() →* core::int*});
-  () →* core::int* tearOff1 = self::Extension2|get#method(c1);
-  self::expect(3, tearOff1(){() →* core::int*});
-  c1 = new self::Class2::•(7.{core::int::unary-}(){() →* core::int*});
-  self::expect(3, tearOff1(){() →* core::int*});
-  <T extends core::num*>(T*) →* core::int* genericTearOff0 = self::Extension2|get#genericMethod(c0);
-  self::expect(41, genericTearOff0<core::int*>(42){(core::int*) →* core::int*});
-  self::expect(41, genericTearOff0<core::num*>(42){(core::num*) →* core::int*});
-  <T extends core::num*>(T*) →* core::int* genericTearOff1 = self::Extension2|get#genericMethod(c1);
-  self::expect(38, genericTearOff1<core::int*>(42){(core::int*) →* core::int*});
-  self::expect(38, genericTearOff1<core::num*>(42){(core::num*) →* core::int*});
+  self::Class2 c0 = new self::Class2::•(0);
+  self::Class2 c1 = new self::Class2::•(1);
+  () → core::int tearOff0 = self::Extension2|get#method(c0);
+  self::expect(2, tearOff0(){() → core::int});
+  c0 = new self::Class2::•(4.{core::int::unary-}(){() → core::int});
+  self::expect(2, tearOff0(){() → core::int});
+  () → core::int tearOff1 = self::Extension2|get#method(c1);
+  self::expect(3, tearOff1(){() → core::int});
+  c1 = new self::Class2::•(7.{core::int::unary-}(){() → core::int});
+  self::expect(3, tearOff1(){() → core::int});
+  <T extends core::num>(T) → core::num genericTearOff0 = self::Extension2|get#genericMethod(c0);
+  self::expect(41, genericTearOff0<core::int>(42){(core::int) → core::num});
+  self::expect(41, genericTearOff0<core::num>(42){(core::num) → core::num});
+  <T extends core::num>(T) → core::num genericTearOff1 = self::Extension2|get#genericMethod(c1);
+  self::expect(38, genericTearOff1<core::int>(42){(core::int) → core::num});
+  self::expect(38, genericTearOff1<core::num>(42){(core::num) → core::num});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual)) {
     throw "Mismatch: expected=${expected}, actual=${actual}";
   }
 }
diff --git a/pkg/front_end/testcases/extensions/instance_tearoff.dart.weak.outline.expect b/pkg/front_end/testcases/extensions/instance_tearoff.dart.weak.outline.expect
index 8d3c1e7..dc03eea 100644
--- a/pkg/front_end/testcases/extensions/instance_tearoff.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extensions/instance_tearoff.dart.weak.outline.expect
@@ -1,67 +1,49 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Class1 extends core::Object {
-  field core::int* field;
-  constructor •(core::int* field) → self::Class1*
+  field core::int field;
+  constructor •(core::int field) → self::Class1
     ;
-  method toString() → core::String*
+  method toString() → core::String
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Class2 extends core::Object {
-  field core::int* field;
-  constructor •(core::int* field) → self::Class2*
+  field core::int field;
+  constructor •(core::int field) → self::Class2
     ;
-  method toString() → core::String*
+  method toString() → core::String
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension Extension1 on self::Class1* {
+extension Extension1 on self::Class1 {
   method method = self::Extension1|method;
   tearoff method = self::Extension1|get#method;
   method genericMethod = self::Extension1|genericMethod;
   tearoff genericMethod = self::Extension1|get#genericMethod;
 }
-extension Extension2 on self::Class2* {
+extension Extension2 on self::Class2 {
   method method = self::Extension2|method;
   tearoff method = self::Extension2|get#method;
   method genericMethod = self::Extension2|genericMethod;
   tearoff genericMethod = self::Extension2|get#genericMethod;
 }
-static method Extension1|method(lowered final self::Class1* #this) → core::int*
+static method Extension1|method(lowered 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*>(lowered final self::Class1* #this, self::Extension1|genericMethod::T* t) → 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>(lowered final self::Class1 #this, self::Extension1|genericMethod::T t) → core::num
   ;
-static method Extension1|get#genericMethod(lowered final self::Class1* #this) → <T extends core::num*>(T*) →* core::int*
-  return <T extends core::num*>(T* t) → core::int* => self::Extension1|genericMethod<T*>(#this, t);
-static method Extension2|method(lowered final self::Class2* #this) → core::int*
+static method Extension1|get#genericMethod(lowered final self::Class1 #this) → <T extends core::num>(T) → core::num
+  return <T extends core::num>(T t) → core::num => self::Extension1|genericMethod<T>(#this, t);
+static method Extension2|method(lowered 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*>(lowered final self::Class2* #this, self::Extension2|genericMethod::T* t) → 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>(lowered final self::Class2 #this, self::Extension2|genericMethod::T t) → core::num
   ;
-static method Extension2|get#genericMethod(lowered final self::Class2* #this) → <T extends core::num*>(T*) →* core::int*
-  return <T extends core::num*>(T* t) → core::int* => self::Extension2|genericMethod<T*>(#this, t);
+static method Extension2|get#genericMethod(lowered final self::Class2 #this) → <T extends core::num>(T) → core::num
+  return <T extends core::num>(T t) → core::num => self::Extension2|genericMethod<T>(#this, t);
 static method main() → dynamic
   ;
 static method testExtension1() → dynamic
diff --git a/pkg/front_end/testcases/extensions/instance_tearoff.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/instance_tearoff.dart.weak.transformed.expect
index c14a689..1bf4f76 100644
--- a/pkg/front_end/testcases/extensions/instance_tearoff.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/instance_tearoff.dart.weak.transformed.expect
@@ -1,119 +1,101 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Class1 extends core::Object {
-  field core::int* field;
-  constructor •(core::int* field) → self::Class1*
+  field core::int field;
+  constructor •(core::int field) → self::Class1
     : self::Class1::field = field, super core::Object::•()
     ;
-  method toString() → core::String*
-    return "Class1(${this.{self::Class1::field}{core::int*}})";
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method toString() → core::String
+    return "Class1(${this.{self::Class1::field}{core::int}})";
 }
 class Class2 extends core::Object {
-  field core::int* field;
-  constructor •(core::int* field) → self::Class2*
+  field core::int field;
+  constructor •(core::int field) → self::Class2
     : self::Class2::field = field, super core::Object::•()
     ;
-  method toString() → core::String*
-    return "Class2(${this.{self::Class2::field}{core::int*}})";
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method toString() → core::String
+    return "Class2(${this.{self::Class2::field}{core::int}})";
 }
-extension Extension1 on self::Class1* {
+extension Extension1 on self::Class1 {
   method method = self::Extension1|method;
   tearoff method = self::Extension1|get#method;
   method genericMethod = self::Extension1|genericMethod;
   tearoff genericMethod = self::Extension1|get#genericMethod;
 }
-extension Extension2 on self::Class2* {
+extension Extension2 on self::Class2 {
   method method = self::Extension2|method;
   tearoff method = self::Extension2|get#method;
   method genericMethod = self::Extension2|genericMethod;
   tearoff genericMethod = self::Extension2|get#genericMethod;
 }
-static method Extension1|method(lowered 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}{core::int*};
+  return #this.{self::Class1::field}{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*>(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::int*}.{core::num::+}(t){(core::num*) →* core::num*} as{TypeError} 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>(lowered final self::Class1 #this, self::Extension1|genericMethod::T t) → core::num {
+  core::print("Extension1.genericMethod<${self::Extension1|genericMethod::T}>(${t}) on ${#this}");
+  return #this.{self::Class1::field}{core::int}.{core::num::+}(t){(core::num) → core::num};
 }
-static method Extension1|get#genericMethod(lowered final self::Class1* #this) → <T extends core::num*>(T*) →* core::int*
-  return <T extends core::num*>(T* t) → core::int* => self::Extension1|genericMethod<T*>(#this, t);
-static method Extension2|method(lowered final self::Class2* #this) → core::int* {
+static method Extension1|get#genericMethod(lowered final self::Class1 #this) → <T extends core::num>(T) → core::num
+  return <T extends core::num>(T t) → core::num => self::Extension1|genericMethod<T>(#this, t);
+static method Extension2|method(lowered final self::Class2 #this) → core::int {
   core::print("Extension2.method on ${#this}");
-  return #this.{self::Class2::field}{core::int*}.{core::num::+}(2){(core::num*) →* core::int*};
+  return #this.{self::Class2::field}{core::int}.{core::num::+}(2){(core::num) → 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*>(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::int*}.{core::num::+}(t){(core::num*) →* core::num*}.{core::num::+}(3){(core::num*) →* core::num*} as{TypeError} 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>(lowered final self::Class2 #this, self::Extension2|genericMethod::T t) → core::num {
+  core::print("Extension2.genericMethod<${self::Extension2|genericMethod::T}>(${t}) on ${#this}");
+  return #this.{self::Class2::field}{core::int}.{core::num::+}(t){(core::num) → core::num}.{core::num::+}(3){(core::num) → core::num};
 }
-static method Extension2|get#genericMethod(lowered final self::Class2* #this) → <T extends core::num*>(T*) →* core::int*
-  return <T extends core::num*>(T* t) → core::int* => self::Extension2|genericMethod<T*>(#this, t);
+static method Extension2|get#genericMethod(lowered final self::Class2 #this) → <T extends core::num>(T) → core::num
+  return <T extends core::num>(T t) → core::num => self::Extension2|genericMethod<T>(#this, t);
 static method main() → dynamic {
   self::testExtension1();
   self::testExtension2();
 }
 static method testExtension1() → dynamic {
-  self::Class1* c0 = new self::Class1::•(0);
-  self::Class1* c1 = new self::Class1::•(1);
-  () →* core::int* tearOff0 = self::Extension1|get#method(c0);
-  self::expect(0, tearOff0(){() →* core::int*});
-  c0 = new self::Class1::•(4.{core::int::unary-}(){() →* core::int*});
-  self::expect(0, tearOff0(){() →* core::int*});
-  () →* core::int* tearOff1 = self::Extension1|get#method(c1);
-  self::expect(1, tearOff1(){() →* core::int*});
-  c1 = new self::Class1::•(7.{core::int::unary-}(){() →* core::int*});
-  self::expect(1, tearOff1(){() →* core::int*});
-  <T extends core::num*>(T*) →* core::int* genericTearOff0 = self::Extension1|get#genericMethod(c0);
-  self::expect(38, genericTearOff0<core::int*>(42){(core::int*) →* core::int*});
-  self::expect(38, genericTearOff0<core::num*>(42){(core::num*) →* core::int*});
-  <T extends core::num*>(T*) →* core::int* genericTearOff1 = self::Extension1|get#genericMethod(c1);
-  self::expect(35, genericTearOff1<core::int*>(42){(core::int*) →* core::int*});
-  self::expect(35, genericTearOff1<core::num*>(42){(core::num*) →* core::int*});
+  self::Class1 c0 = new self::Class1::•(0);
+  self::Class1 c1 = new self::Class1::•(1);
+  () → core::int tearOff0 = self::Extension1|get#method(c0);
+  self::expect(0, tearOff0(){() → core::int});
+  c0 = new self::Class1::•(4.{core::int::unary-}(){() → core::int});
+  self::expect(0, tearOff0(){() → core::int});
+  () → core::int tearOff1 = self::Extension1|get#method(c1);
+  self::expect(1, tearOff1(){() → core::int});
+  c1 = new self::Class1::•(7.{core::int::unary-}(){() → core::int});
+  self::expect(1, tearOff1(){() → core::int});
+  <T extends core::num>(T) → core::num genericTearOff0 = self::Extension1|get#genericMethod(c0);
+  self::expect(38, genericTearOff0<core::int>(42){(core::int) → core::num});
+  self::expect(38, genericTearOff0<core::num>(42){(core::num) → core::num});
+  <T extends core::num>(T) → core::num genericTearOff1 = self::Extension1|get#genericMethod(c1);
+  self::expect(35, genericTearOff1<core::int>(42){(core::int) → core::num});
+  self::expect(35, genericTearOff1<core::num>(42){(core::num) → core::num});
 }
 static method testExtension2() → dynamic {
-  self::Class2* c0 = new self::Class2::•(0);
-  self::Class2* c1 = new self::Class2::•(1);
-  () →* core::int* tearOff0 = self::Extension2|get#method(c0);
-  self::expect(2, tearOff0(){() →* core::int*});
-  c0 = new self::Class2::•(4.{core::int::unary-}(){() →* core::int*});
-  self::expect(2, tearOff0(){() →* core::int*});
-  () →* core::int* tearOff1 = self::Extension2|get#method(c1);
-  self::expect(3, tearOff1(){() →* core::int*});
-  c1 = new self::Class2::•(7.{core::int::unary-}(){() →* core::int*});
-  self::expect(3, tearOff1(){() →* core::int*});
-  <T extends core::num*>(T*) →* core::int* genericTearOff0 = self::Extension2|get#genericMethod(c0);
-  self::expect(41, genericTearOff0<core::int*>(42){(core::int*) →* core::int*});
-  self::expect(41, genericTearOff0<core::num*>(42){(core::num*) →* core::int*});
-  <T extends core::num*>(T*) →* core::int* genericTearOff1 = self::Extension2|get#genericMethod(c1);
-  self::expect(38, genericTearOff1<core::int*>(42){(core::int*) →* core::int*});
-  self::expect(38, genericTearOff1<core::num*>(42){(core::num*) →* core::int*});
+  self::Class2 c0 = new self::Class2::•(0);
+  self::Class2 c1 = new self::Class2::•(1);
+  () → core::int tearOff0 = self::Extension2|get#method(c0);
+  self::expect(2, tearOff0(){() → core::int});
+  c0 = new self::Class2::•(4.{core::int::unary-}(){() → core::int});
+  self::expect(2, tearOff0(){() → core::int});
+  () → core::int tearOff1 = self::Extension2|get#method(c1);
+  self::expect(3, tearOff1(){() → core::int});
+  c1 = new self::Class2::•(7.{core::int::unary-}(){() → core::int});
+  self::expect(3, tearOff1(){() → core::int});
+  <T extends core::num>(T) → core::num genericTearOff0 = self::Extension2|get#genericMethod(c0);
+  self::expect(41, genericTearOff0<core::int>(42){(core::int) → core::num});
+  self::expect(41, genericTearOff0<core::num>(42){(core::num) → core::num});
+  <T extends core::num>(T) → core::num genericTearOff1 = self::Extension2|get#genericMethod(c1);
+  self::expect(38, genericTearOff1<core::int>(42){(core::int) → core::num});
+  self::expect(38, genericTearOff1<core::num>(42){(core::num) → core::num});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual)) {
     throw "Mismatch: expected=${expected}, actual=${actual}";
   }
 }
@@ -124,4 +106,4 @@
 Evaluated: InstanceInvocation @ org-dartlang-testcase:///instance_tearoff.dart:58:19 -> IntConstant(-7)
 Evaluated: InstanceInvocation @ org-dartlang-testcase:///instance_tearoff.dart:73:19 -> IntConstant(-4)
 Evaluated: InstanceInvocation @ org-dartlang-testcase:///instance_tearoff.dart:77:19 -> IntConstant(-7)
-Extra constant evaluation: evaluated: 144, effectively constant: 4
+Extra constant evaluation: evaluated: 142, effectively constant: 4
diff --git a/pkg/front_end/testcases/extensions/internal_resolution.dart b/pkg/front_end/testcases/extensions/internal_resolution.dart
index a6a36e9..796d36f 100644
--- a/pkg/front_end/testcases/extensions/internal_resolution.dart
+++ b/pkg/front_end/testcases/extensions/internal_resolution.dart
@@ -1,19 +1,19 @@
 // Copyright (c) 2019, 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.
-// @dart=2.9
+
 class Class {
-  int field;
+  int? field;
 }
 
 extension on Class {
-  int get property1 => property2;
-  void set property1(int value) => field = value;
+  int? get property1 => property2;
+  void set property1(int? value) => field = value;
 }
 
 extension on Class {
-  int get property2 => field;
-  void set property2(int value) => property1 = value;
+  int? get property2 => field;
+  void set property2(int? value) => property1 = value;
 }
 
 main() {
diff --git a/pkg/front_end/testcases/extensions/internal_resolution.dart.textual_outline.expect b/pkg/front_end/testcases/extensions/internal_resolution.dart.textual_outline.expect
index f8c5fde..b9bcd84 100644
--- a/pkg/front_end/testcases/extensions/internal_resolution.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/extensions/internal_resolution.dart.textual_outline.expect
@@ -1,16 +1,15 @@
-// @dart = 2.9
 class Class {
-  int field;
+  int? field;
 }
 
 extension on Class {
-  int get property1 => property2;
-  void set property1(int value) => field = value;
+  int? get property1 => property2;
+  void set property1(int? value) => field = value;
 }
 
 extension on Class {
-  int get property2 => field;
-  void set property2(int value) => property1 = value;
+  int? get property2 => field;
+  void set property2(int? value) => property1 = value;
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/extensions/internal_resolution.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/extensions/internal_resolution.dart.textual_outline_modelled.expect
index 44ba9bd..8ebb600 100644
--- a/pkg/front_end/testcases/extensions/internal_resolution.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/extensions/internal_resolution.dart.textual_outline_modelled.expect
@@ -1,18 +1,17 @@
-// @dart = 2.9
 class Class {
-  int field;
+  int? field;
 }
 
 expect(expected, actual) {}
 
 extension on Class {
-  int get property1 => property2;
-  void set property1(int value) => field = value;
+  int? get property1 => property2;
+  void set property1(int? value) => field = value;
 }
 
 extension on Class {
-  int get property2 => field;
-  void set property2(int value) => property1 = value;
+  int? get property2 => field;
+  void set property2(int? value) => property1 = value;
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/extensions/internal_resolution.dart.weak.expect b/pkg/front_end/testcases/extensions/internal_resolution.dart.weak.expect
index 80f8e09..7a5b11f 100644
--- a/pkg/front_end/testcases/extensions/internal_resolution.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/internal_resolution.dart.weak.expect
@@ -1,50 +1,40 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Class extends core::Object {
-  field core::int* field = null;
-  synthetic constructor •() → self::Class*
+  field core::int? field = null;
+  synthetic constructor •() → self::Class
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension _extension#0 on self::Class* {
+extension _extension#0 on self::Class {
   get property1 = self::_extension#0|get#property1;
   set property1 = self::_extension#0|set#property1;
 }
-extension _extension#1 on self::Class* {
+extension _extension#1 on self::Class {
   get property2 = self::_extension#1|get#property2;
   set property2 = self::_extension#1|set#property2;
 }
-static method _extension#0|get#property1(lowered 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(lowered 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(lowered final self::Class* #this) → core::int*
-  return #this.{self::Class::field}{core::int*};
-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 _extension#1|get#property2(lowered final self::Class #this) → core::int?
+  return #this.{self::Class::field}{core::int?};
+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::•();
+  self::Class c = new self::Class::•();
   self::expect(null, self::_extension#0|get#property1(c));
   self::expect(null, self::_extension#1|get#property2(c));
-  self::expect(42, let final core::int* #t3 = 42 in let final void #t4 = self::_extension#0|set#property1(c, #t3) in #t3);
+  self::expect(42, let final core::int #t3 = 42 in let final void #t4 = self::_extension#0|set#property1(c, #t3) in #t3);
   self::expect(42, self::_extension#1|get#property2(c));
-  self::expect(87, let final core::int* #t5 = 87 in let final void #t6 = self::_extension#1|set#property2(c, #t5) in #t5);
+  self::expect(87, let final core::int #t5 = 87 in let final void #t6 = self::_extension#1|set#property2(c, #t5) in #t5);
   self::expect(87, self::_extension#0|get#property1(c));
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual)) {
     throw "Mismatch: expected=${expected}, actual=${actual}";
   }
 }
diff --git a/pkg/front_end/testcases/extensions/internal_resolution.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/internal_resolution.dart.weak.modular.expect
index 80f8e09..7a5b11f 100644
--- a/pkg/front_end/testcases/extensions/internal_resolution.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/extensions/internal_resolution.dart.weak.modular.expect
@@ -1,50 +1,40 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Class extends core::Object {
-  field core::int* field = null;
-  synthetic constructor •() → self::Class*
+  field core::int? field = null;
+  synthetic constructor •() → self::Class
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension _extension#0 on self::Class* {
+extension _extension#0 on self::Class {
   get property1 = self::_extension#0|get#property1;
   set property1 = self::_extension#0|set#property1;
 }
-extension _extension#1 on self::Class* {
+extension _extension#1 on self::Class {
   get property2 = self::_extension#1|get#property2;
   set property2 = self::_extension#1|set#property2;
 }
-static method _extension#0|get#property1(lowered 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(lowered 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(lowered final self::Class* #this) → core::int*
-  return #this.{self::Class::field}{core::int*};
-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 _extension#1|get#property2(lowered final self::Class #this) → core::int?
+  return #this.{self::Class::field}{core::int?};
+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::•();
+  self::Class c = new self::Class::•();
   self::expect(null, self::_extension#0|get#property1(c));
   self::expect(null, self::_extension#1|get#property2(c));
-  self::expect(42, let final core::int* #t3 = 42 in let final void #t4 = self::_extension#0|set#property1(c, #t3) in #t3);
+  self::expect(42, let final core::int #t3 = 42 in let final void #t4 = self::_extension#0|set#property1(c, #t3) in #t3);
   self::expect(42, self::_extension#1|get#property2(c));
-  self::expect(87, let final core::int* #t5 = 87 in let final void #t6 = self::_extension#1|set#property2(c, #t5) in #t5);
+  self::expect(87, let final core::int #t5 = 87 in let final void #t6 = self::_extension#1|set#property2(c, #t5) in #t5);
   self::expect(87, self::_extension#0|get#property1(c));
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual)) {
     throw "Mismatch: expected=${expected}, actual=${actual}";
   }
 }
diff --git a/pkg/front_end/testcases/extensions/internal_resolution.dart.weak.outline.expect b/pkg/front_end/testcases/extensions/internal_resolution.dart.weak.outline.expect
index 24d15c6..0148103 100644
--- a/pkg/front_end/testcases/extensions/internal_resolution.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extensions/internal_resolution.dart.weak.outline.expect
@@ -1,37 +1,27 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Class extends core::Object {
-  field core::int* field;
-  synthetic constructor •() → self::Class*
+  field core::int? field;
+  synthetic constructor •() → self::Class
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension _extension#0 on self::Class* {
+extension _extension#0 on self::Class {
   get property1 = self::_extension#0|get#property1;
   set property1 = self::_extension#0|set#property1;
 }
-extension _extension#1 on self::Class* {
+extension _extension#1 on self::Class {
   get property2 = self::_extension#1|get#property2;
   set property2 = self::_extension#1|set#property2;
 }
-static method _extension#0|get#property1(lowered 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(lowered 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(lowered 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(lowered 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.weak.transformed.expect b/pkg/front_end/testcases/extensions/internal_resolution.dart.weak.transformed.expect
index faaf375..06ac9e2 100644
--- a/pkg/front_end/testcases/extensions/internal_resolution.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/internal_resolution.dart.weak.transformed.expect
@@ -1,50 +1,40 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Class extends core::Object {
-  field core::int* field = null;
-  synthetic constructor •() → self::Class*
+  field core::int? field = null;
+  synthetic constructor •() → self::Class
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension _extension#0 on self::Class* {
+extension _extension#0 on self::Class {
   get property1 = self::_extension#0|get#property1;
   set property1 = self::_extension#0|set#property1;
 }
-extension _extension#1 on self::Class* {
+extension _extension#1 on self::Class {
   get property2 = self::_extension#1|get#property2;
   set property2 = self::_extension#1|set#property2;
 }
-static method _extension#0|get#property1(lowered 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(lowered 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(lowered final self::Class* #this) → core::int*
-  return #this.{self::Class::field}{core::int*};
-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 _extension#1|get#property2(lowered final self::Class #this) → core::int?
+  return #this.{self::Class::field}{core::int?};
+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::•();
+  self::Class c = new self::Class::•();
   self::expect(null, self::_extension#0|get#property1(c));
   self::expect(null, self::_extension#1|get#property2(c));
-  self::expect(42, let final core::int* #t3 = 42 in let final void #t4 = self::_extension#0|set#property1(c, #t3) in #t3);
+  self::expect(42, let final core::int #t3 = 42 in let final void #t4 = self::_extension#0|set#property1(c, #t3) in #t3);
   self::expect(42, self::_extension#1|get#property2(c));
-  self::expect(87, let final core::int* #t5 = 87 in let final void #t6 = self::_extension#1|set#property2(c, #t5) in #t5);
+  self::expect(87, let final core::int #t5 = 87 in let final void #t6 = self::_extension#1|set#property2(c, #t5) in #t5);
   self::expect(87, self::_extension#0|get#property1(c));
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual)) {
     throw "Mismatch: expected=${expected}, actual=${actual}";
   }
 }
diff --git a/pkg/front_end/testcases/extensions/invalid_explicit_access.dart b/pkg/front_end/testcases/extensions/invalid_explicit_access.dart
index 8161b72..5210e3a 100644
--- a/pkg/front_end/testcases/extensions/invalid_explicit_access.dart
+++ b/pkg/front_end/testcases/extensions/invalid_explicit_access.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2019, 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.
-// @dart=2.9
+
 class Class {}
 
 extension Extension on Class {
diff --git a/pkg/front_end/testcases/extensions/invalid_explicit_access.dart.textual_outline.expect b/pkg/front_end/testcases/extensions/invalid_explicit_access.dart.textual_outline.expect
index fc12d80..fda67e5 100644
--- a/pkg/front_end/testcases/extensions/invalid_explicit_access.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/extensions/invalid_explicit_access.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Class {}
 
 extension Extension on Class {
diff --git a/pkg/front_end/testcases/extensions/invalid_explicit_access.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/extensions/invalid_explicit_access.dart.textual_outline_modelled.expect
index b8ad069..cccd074 100644
--- a/pkg/front_end/testcases/extensions/invalid_explicit_access.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/extensions/invalid_explicit_access.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Class {}
 
 class GenericClass<T> {}
diff --git a/pkg/front_end/testcases/extensions/invalid_explicit_access.dart.weak.expect b/pkg/front_end/testcases/extensions/invalid_explicit_access.dart.weak.expect
index 0dd6942..5ddfc92 100644
--- a/pkg/front_end/testcases/extensions/invalid_explicit_access.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/invalid_explicit_access.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -125,52 +125,32 @@
 import "dart:core" as core;
 
 class Class extends core::Object {
-  synthetic constructor •() → self::Class*
+  synthetic constructor •() → self::Class
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class GenericClass<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::GenericClass<self::GenericClass::T*>*
+class GenericClass<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::GenericClass<self::GenericClass::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension Extension on self::Class* {
+extension Extension on self::Class {
   method method = self::Extension|method;
   tearoff method = self::Extension|get#method;
 }
-extension GenericExtension<T extends core::Object* = dynamic> on self::GenericClass<T*>* {
+extension GenericExtension<T extends core::Object? = dynamic> on self::GenericClass<T%> {
   method method = self::GenericExtension|method;
   tearoff method = self::GenericExtension|get#method;
 }
-static method Extension|method(lowered final self::Class* #this, dynamic a) → dynamic {}
-static method Extension|get#method(lowered 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>(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 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 = "";
-  self::Class* c1 = new self::Class::•();
+  core::String s = "";
+  self::Class c1 = new self::Class::•();
   invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:23:3: Error: Explicit extension application requires exactly 1 positional argument.
   Extension().method(null);
   ^^^^^^^^^"{dynamic}.method(null);
@@ -189,7 +169,7 @@
   self::Extension|method(invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:28:13: Error: The argument type 'String' can't be assigned to the parameter type 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/extensions/invalid_explicit_access.dart'.
   Extension(s).method(null);
-            ^" in s as{TypeError} self::Class*, null);
+            ^" in s as{TypeError,ForNonNullableByDefault} self::Class, null);
   invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:29:17: Error: Member not found: 'foo'.
   Extension(c1).foo;
                 ^^^";
@@ -215,7 +195,7 @@
   invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:39:17: Error: Expected 0 type arguments.
   Extension(c1).method<int>(null);
                 ^";
-  self::GenericClass<core::int*>* c2 = new self::GenericClass::•<core::int*>();
+  self::GenericClass<core::int> c2 = new self::GenericClass::•<core::int>();
   invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:42:3: Error: Explicit extension application requires exactly 1 positional argument.
   GenericExtension().method();
   ^^^^^^^^^^^^^^^^"{dynamic}.method();
@@ -246,9 +226,9 @@
   self::GenericExtension|method<dynamic>(invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:51:20: Error: The argument type 'String' can't be assigned to the parameter type 'GenericClass<dynamic>'.
  - 'GenericClass' is from 'pkg/front_end/testcases/extensions/invalid_explicit_access.dart'.
   GenericExtension(s).method();
-                   ^" in s as{TypeError} self::GenericClass<dynamic>*);
-  self::GenericExtension|method<core::int*>(invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:52:25: Error: The argument type 'String' can't be assigned to the parameter type 'GenericClass<int>'.
+                   ^" in s as{TypeError,ForNonNullableByDefault} self::GenericClass<dynamic>);
+  self::GenericExtension|method<core::int>(invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:52:25: Error: The argument type 'String' can't be assigned to the parameter type 'GenericClass<int>'.
  - 'GenericClass' is from 'pkg/front_end/testcases/extensions/invalid_explicit_access.dart'.
   GenericExtension<int>(s).method();
-                        ^" in s as{TypeError} self::GenericClass<core::int*>*);
+                        ^" in s as{TypeError,ForNonNullableByDefault} self::GenericClass<core::int>);
 }
diff --git a/pkg/front_end/testcases/extensions/invalid_explicit_access.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/invalid_explicit_access.dart.weak.modular.expect
index 0dd6942..5ddfc92 100644
--- a/pkg/front_end/testcases/extensions/invalid_explicit_access.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/extensions/invalid_explicit_access.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -125,52 +125,32 @@
 import "dart:core" as core;
 
 class Class extends core::Object {
-  synthetic constructor •() → self::Class*
+  synthetic constructor •() → self::Class
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class GenericClass<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::GenericClass<self::GenericClass::T*>*
+class GenericClass<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::GenericClass<self::GenericClass::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension Extension on self::Class* {
+extension Extension on self::Class {
   method method = self::Extension|method;
   tearoff method = self::Extension|get#method;
 }
-extension GenericExtension<T extends core::Object* = dynamic> on self::GenericClass<T*>* {
+extension GenericExtension<T extends core::Object? = dynamic> on self::GenericClass<T%> {
   method method = self::GenericExtension|method;
   tearoff method = self::GenericExtension|get#method;
 }
-static method Extension|method(lowered final self::Class* #this, dynamic a) → dynamic {}
-static method Extension|get#method(lowered 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>(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 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 = "";
-  self::Class* c1 = new self::Class::•();
+  core::String s = "";
+  self::Class c1 = new self::Class::•();
   invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:23:3: Error: Explicit extension application requires exactly 1 positional argument.
   Extension().method(null);
   ^^^^^^^^^"{dynamic}.method(null);
@@ -189,7 +169,7 @@
   self::Extension|method(invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:28:13: Error: The argument type 'String' can't be assigned to the parameter type 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/extensions/invalid_explicit_access.dart'.
   Extension(s).method(null);
-            ^" in s as{TypeError} self::Class*, null);
+            ^" in s as{TypeError,ForNonNullableByDefault} self::Class, null);
   invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:29:17: Error: Member not found: 'foo'.
   Extension(c1).foo;
                 ^^^";
@@ -215,7 +195,7 @@
   invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:39:17: Error: Expected 0 type arguments.
   Extension(c1).method<int>(null);
                 ^";
-  self::GenericClass<core::int*>* c2 = new self::GenericClass::•<core::int*>();
+  self::GenericClass<core::int> c2 = new self::GenericClass::•<core::int>();
   invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:42:3: Error: Explicit extension application requires exactly 1 positional argument.
   GenericExtension().method();
   ^^^^^^^^^^^^^^^^"{dynamic}.method();
@@ -246,9 +226,9 @@
   self::GenericExtension|method<dynamic>(invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:51:20: Error: The argument type 'String' can't be assigned to the parameter type 'GenericClass<dynamic>'.
  - 'GenericClass' is from 'pkg/front_end/testcases/extensions/invalid_explicit_access.dart'.
   GenericExtension(s).method();
-                   ^" in s as{TypeError} self::GenericClass<dynamic>*);
-  self::GenericExtension|method<core::int*>(invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:52:25: Error: The argument type 'String' can't be assigned to the parameter type 'GenericClass<int>'.
+                   ^" in s as{TypeError,ForNonNullableByDefault} self::GenericClass<dynamic>);
+  self::GenericExtension|method<core::int>(invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:52:25: Error: The argument type 'String' can't be assigned to the parameter type 'GenericClass<int>'.
  - 'GenericClass' is from 'pkg/front_end/testcases/extensions/invalid_explicit_access.dart'.
   GenericExtension<int>(s).method();
-                        ^" in s as{TypeError} self::GenericClass<core::int*>*);
+                        ^" in s as{TypeError,ForNonNullableByDefault} self::GenericClass<core::int>);
 }
diff --git a/pkg/front_end/testcases/extensions/invalid_explicit_access.dart.weak.outline.expect b/pkg/front_end/testcases/extensions/invalid_explicit_access.dart.weak.outline.expect
index 064d285..94c79bb 100644
--- a/pkg/front_end/testcases/extensions/invalid_explicit_access.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extensions/invalid_explicit_access.dart.weak.outline.expect
@@ -1,50 +1,30 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Class extends core::Object {
-  synthetic constructor •() → self::Class*
+  synthetic constructor •() → self::Class
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class GenericClass<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::GenericClass<self::GenericClass::T*>*
+class GenericClass<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::GenericClass<self::GenericClass::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension Extension on self::Class* {
+extension Extension on self::Class {
   method method = self::Extension|method;
   tearoff method = self::Extension|get#method;
 }
-extension GenericExtension<T extends core::Object* = dynamic> on self::GenericClass<T*>* {
+extension GenericExtension<T extends core::Object? = dynamic> on self::GenericClass<T%> {
   method method = self::GenericExtension|method;
   tearoff method = self::GenericExtension|get#method;
 }
-static method Extension|method(lowered final self::Class* #this, dynamic a) → 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
+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>(lowered 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>(lowered final self::GenericClass<self::GenericExtension|get#method::T*>* #this) → () →* dynamic
-  return () → dynamic => self::GenericExtension|method<self::GenericExtension|get#method::T*>(#this);
+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.weak.transformed.expect b/pkg/front_end/testcases/extensions/invalid_explicit_access.dart.weak.transformed.expect
index 0dd6942..5ddfc92 100644
--- a/pkg/front_end/testcases/extensions/invalid_explicit_access.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/invalid_explicit_access.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -125,52 +125,32 @@
 import "dart:core" as core;
 
 class Class extends core::Object {
-  synthetic constructor •() → self::Class*
+  synthetic constructor •() → self::Class
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class GenericClass<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::GenericClass<self::GenericClass::T*>*
+class GenericClass<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::GenericClass<self::GenericClass::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension Extension on self::Class* {
+extension Extension on self::Class {
   method method = self::Extension|method;
   tearoff method = self::Extension|get#method;
 }
-extension GenericExtension<T extends core::Object* = dynamic> on self::GenericClass<T*>* {
+extension GenericExtension<T extends core::Object? = dynamic> on self::GenericClass<T%> {
   method method = self::GenericExtension|method;
   tearoff method = self::GenericExtension|get#method;
 }
-static method Extension|method(lowered final self::Class* #this, dynamic a) → dynamic {}
-static method Extension|get#method(lowered 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>(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 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 = "";
-  self::Class* c1 = new self::Class::•();
+  core::String s = "";
+  self::Class c1 = new self::Class::•();
   invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:23:3: Error: Explicit extension application requires exactly 1 positional argument.
   Extension().method(null);
   ^^^^^^^^^"{dynamic}.method(null);
@@ -189,7 +169,7 @@
   self::Extension|method(invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:28:13: Error: The argument type 'String' can't be assigned to the parameter type 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/extensions/invalid_explicit_access.dart'.
   Extension(s).method(null);
-            ^" in s as{TypeError} self::Class*, null);
+            ^" in s as{TypeError,ForNonNullableByDefault} self::Class, null);
   invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:29:17: Error: Member not found: 'foo'.
   Extension(c1).foo;
                 ^^^";
@@ -215,7 +195,7 @@
   invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:39:17: Error: Expected 0 type arguments.
   Extension(c1).method<int>(null);
                 ^";
-  self::GenericClass<core::int*>* c2 = new self::GenericClass::•<core::int*>();
+  self::GenericClass<core::int> c2 = new self::GenericClass::•<core::int>();
   invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:42:3: Error: Explicit extension application requires exactly 1 positional argument.
   GenericExtension().method();
   ^^^^^^^^^^^^^^^^"{dynamic}.method();
@@ -246,9 +226,9 @@
   self::GenericExtension|method<dynamic>(invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:51:20: Error: The argument type 'String' can't be assigned to the parameter type 'GenericClass<dynamic>'.
  - 'GenericClass' is from 'pkg/front_end/testcases/extensions/invalid_explicit_access.dart'.
   GenericExtension(s).method();
-                   ^" in s as{TypeError} self::GenericClass<dynamic>*);
-  self::GenericExtension|method<core::int*>(invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:52:25: Error: The argument type 'String' can't be assigned to the parameter type 'GenericClass<int>'.
+                   ^" in s as{TypeError,ForNonNullableByDefault} self::GenericClass<dynamic>);
+  self::GenericExtension|method<core::int>(invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_access.dart:52:25: Error: The argument type 'String' can't be assigned to the parameter type 'GenericClass<int>'.
  - 'GenericClass' is from 'pkg/front_end/testcases/extensions/invalid_explicit_access.dart'.
   GenericExtension<int>(s).method();
-                        ^" in s as{TypeError} self::GenericClass<core::int*>*);
+                        ^" in s as{TypeError,ForNonNullableByDefault} self::GenericClass<core::int>);
 }
diff --git a/pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart b/pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart
index acadced..3fdcc7d 100644
--- a/pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart
+++ b/pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2019, 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.
-// @dart=2.9
+
 extension Extension on String {
   static method() {}
   static get getter => null;
diff --git a/pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart.textual_outline.expect b/pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart.textual_outline.expect
index 69490b0..2654863 100644
--- a/pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 extension Extension on String {
   static method() {}
   static get getter => null;
diff --git a/pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart.textual_outline_modelled.expect
index ab88088..0abe64c 100644
--- a/pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 errors() {}
 
 extension Extension on String {
diff --git a/pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart.weak.expect b/pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart.weak.expect
index 94d05b9..023cc74 100644
--- a/pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -49,7 +49,7 @@
 import self as self;
 import "dart:core" as core;
 
-extension Extension on core::String* {
+extension Extension on core::String {
   static method method = self::Extension|method;
   static get getter = get self::Extension|getter;
   static get property = get self::Extension|property;
@@ -67,7 +67,7 @@
 static set Extension|property(dynamic _) → void {}
 static method main() → dynamic {}
 static method errors() → dynamic {
-  core::String* s = "";
+  core::String s = "";
   invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:18:16: Error: Method not found: 'method'.
   Extension(s).method();
                ^^^^^^";
diff --git a/pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart.weak.modular.expect
index 94d05b9..023cc74 100644
--- a/pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -49,7 +49,7 @@
 import self as self;
 import "dart:core" as core;
 
-extension Extension on core::String* {
+extension Extension on core::String {
   static method method = self::Extension|method;
   static get getter = get self::Extension|getter;
   static get property = get self::Extension|property;
@@ -67,7 +67,7 @@
 static set Extension|property(dynamic _) → void {}
 static method main() → dynamic {}
 static method errors() → dynamic {
-  core::String* s = "";
+  core::String s = "";
   invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:18:16: Error: Method not found: 'method'.
   Extension(s).method();
                ^^^^^^";
diff --git a/pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart.weak.outline.expect b/pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart.weak.outline.expect
index 76899b5..b8edf40 100644
--- a/pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart.weak.outline.expect
@@ -1,8 +1,8 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-extension Extension on core::String* {
+extension Extension on core::String {
   static method method = self::Extension|method;
   static get getter = get self::Extension|getter;
   static get property = get self::Extension|property;
diff --git a/pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart.weak.transformed.expect
index 94d05b9..023cc74 100644
--- a/pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -49,7 +49,7 @@
 import self as self;
 import "dart:core" as core;
 
-extension Extension on core::String* {
+extension Extension on core::String {
   static method method = self::Extension|method;
   static get getter = get self::Extension|getter;
   static get property = get self::Extension|property;
@@ -67,7 +67,7 @@
 static set Extension|property(dynamic _) → void {}
 static method main() → dynamic {}
 static method errors() → dynamic {
-  core::String* s = "";
+  core::String s = "";
   invalid-expression "pkg/front_end/testcases/extensions/invalid_explicit_static_access.dart:18:16: Error: Method not found: 'method'.
   Extension(s).method();
                ^^^^^^";
diff --git a/pkg/front_end/testcases/extensions/issue38600.dart b/pkg/front_end/testcases/extensions/issue38600.dart
index 8ad593c..d2014e2 100644
--- a/pkg/front_end/testcases/extensions/issue38600.dart
+++ b/pkg/front_end/testcases/extensions/issue38600.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2019, 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.
-// @dart=2.9
+
 class Class<T> {}
 
 extension try<T> on Class<T> {}
diff --git a/pkg/front_end/testcases/extensions/issue38600.dart.textual_outline.expect b/pkg/front_end/testcases/extensions/issue38600.dart.textual_outline.expect
index edb7740..43bf0c2 100644
--- a/pkg/front_end/testcases/extensions/issue38600.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/extensions/issue38600.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Class<T> {}
 extension on{}
 try<T> (){}
diff --git a/pkg/front_end/testcases/extensions/issue38600.dart.weak.expect b/pkg/front_end/testcases/extensions/issue38600.dart.weak.expect
index 373bda2..0550755 100644
--- a/pkg/front_end/testcases/extensions/issue38600.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/issue38600.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -48,22 +48,12 @@
 import self as self;
 import "dart:core" as core;
 
-class Class<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Class<self::Class::T*>*
+class Class<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Class<self::Class::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 extension _extension#0 on invalid-type {
 }
-static method try<T extends core::Object* = dynamic>() → dynamic {}
+static method try<T extends core::Object? = dynamic>() → dynamic {}
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extensions/issue38600.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/issue38600.dart.weak.modular.expect
index 373bda2..0550755 100644
--- a/pkg/front_end/testcases/extensions/issue38600.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/extensions/issue38600.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -48,22 +48,12 @@
 import self as self;
 import "dart:core" as core;
 
-class Class<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Class<self::Class::T*>*
+class Class<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Class<self::Class::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 extension _extension#0 on invalid-type {
 }
-static method try<T extends core::Object* = dynamic>() → dynamic {}
+static method try<T extends core::Object? = dynamic>() → dynamic {}
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extensions/issue38600.dart.weak.outline.expect b/pkg/front_end/testcases/extensions/issue38600.dart.weak.outline.expect
index ed495ec..07a25e2 100644
--- a/pkg/front_end/testcases/extensions/issue38600.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extensions/issue38600.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -48,23 +48,13 @@
 import self as self;
 import "dart:core" as core;
 
-class Class<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Class<self::Class::T*>*
+class Class<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Class<self::Class::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 extension _extension#0 on invalid-type {
 }
-static method try<T extends core::Object* = dynamic>() → dynamic
+static method try<T extends core::Object? = dynamic>() → dynamic
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/extensions/issue38600.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/issue38600.dart.weak.transformed.expect
index 373bda2..0550755 100644
--- a/pkg/front_end/testcases/extensions/issue38600.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/issue38600.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -48,22 +48,12 @@
 import self as self;
 import "dart:core" as core;
 
-class Class<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::Class<self::Class::T*>*
+class Class<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Class<self::Class::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 extension _extension#0 on invalid-type {
 }
-static method try<T extends core::Object* = dynamic>() → dynamic {}
+static method try<T extends core::Object? = dynamic>() → dynamic {}
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extensions/issue38712.dart b/pkg/front_end/testcases/extensions/issue38712.dart
index 799af6a..511036f 100644
--- a/pkg/front_end/testcases/extensions/issue38712.dart
+++ b/pkg/front_end/testcases/extensions/issue38712.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2019, 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.
-// @dart=2.9
+
 extension C {
 }
 
diff --git a/pkg/front_end/testcases/extensions/issue38712.dart.textual_outline.expect b/pkg/front_end/testcases/extensions/issue38712.dart.textual_outline.expect
index 3faefa5..ec4321b 100644
--- a/pkg/front_end/testcases/extensions/issue38712.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/extensions/issue38712.dart.textual_outline.expect
@@ -1,3 +1,2 @@
-// @dart = 2.9
 extension C on{}
 void main() {}
diff --git a/pkg/front_end/testcases/extensions/issue38712.dart.weak.expect b/pkg/front_end/testcases/extensions/issue38712.dart.weak.expect
index 464cf79..5c2b8df 100644
--- a/pkg/front_end/testcases/extensions/issue38712.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/issue38712.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/extensions/issue38712.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/issue38712.dart.weak.modular.expect
index 464cf79..5c2b8df 100644
--- a/pkg/front_end/testcases/extensions/issue38712.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/extensions/issue38712.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/extensions/issue38712.dart.weak.outline.expect b/pkg/front_end/testcases/extensions/issue38712.dart.weak.outline.expect
index 3f1a511..569a1aa 100644
--- a/pkg/front_end/testcases/extensions/issue38712.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extensions/issue38712.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/extensions/issue38712.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/issue38712.dart.weak.transformed.expect
index 464cf79..5c2b8df 100644
--- a/pkg/front_end/testcases/extensions/issue38712.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/issue38712.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
diff --git a/pkg/front_end/testcases/extensions/issue38713.dart b/pkg/front_end/testcases/extensions/issue38713.dart
index ef83847..b32ad41 100644
--- a/pkg/front_end/testcases/extensions/issue38713.dart
+++ b/pkg/front_end/testcases/extensions/issue38713.dart
@@ -1,13 +1,13 @@
 // Copyright (c) 2019, 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.
-// @dart=2.9
-extension C on int {
-  static int property2;
-  static void set property2(int x) {}
 
-  static void set property3(int x) {}
-  int get property3 => 1;
+extension C on int {
+  static int? property2;
+  static void set property2(int? x) {}
+
+  static void set property3(int? x) {}
+  int? get property3 => 1;
 }
 
 void main() {
diff --git a/pkg/front_end/testcases/extensions/issue38713.dart.textual_outline.expect b/pkg/front_end/testcases/extensions/issue38713.dart.textual_outline.expect
index 06e37f8..b8034a7 100644
--- a/pkg/front_end/testcases/extensions/issue38713.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/extensions/issue38713.dart.textual_outline.expect
@@ -1,9 +1,8 @@
-// @dart = 2.9
 extension C on int {
-  static int property2;
-  static void set property2(int x) {}
-  static void set property3(int x) {}
-  int get property3 => 1;
+  static int? property2;
+  static void set property2(int? x) {}
+  static void set property3(int? x) {}
+  int? get property3 => 1;
 }
 
 void main() {}
diff --git a/pkg/front_end/testcases/extensions/issue38713.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/extensions/issue38713.dart.textual_outline_modelled.expect
index 39b481c..6bf2fb6 100644
--- a/pkg/front_end/testcases/extensions/issue38713.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/extensions/issue38713.dart.textual_outline_modelled.expect
@@ -1,9 +1,8 @@
-// @dart = 2.9
 extension C on int {
-  int get property3 => 1;
-  static int property2;
-  static void set property2(int x) {}
-  static void set property3(int x) {}
+  int? get property3 => 1;
+  static int? property2;
+  static void set property2(int? x) {}
+  static void set property3(int? x) {}
 }
 
 void main() {}
diff --git a/pkg/front_end/testcases/extensions/issue38713.dart.weak.expect b/pkg/front_end/testcases/extensions/issue38713.dart.weak.expect
index 8dbe072..c4cab22 100644
--- a/pkg/front_end/testcases/extensions/issue38713.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/issue38713.dart.weak.expect
@@ -1,34 +1,34 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
 // pkg/front_end/testcases/extensions/issue38713.dart:7:19: Error: Conflicts with the implicit setter of the field 'property2'.
-//   static void set property2(int x) {}
+//   static void set property2(int? x) {}
 //                   ^
 //
-// pkg/front_end/testcases/extensions/issue38713.dart:6:14: Error: Conflicts with setter 'property2'.
-//   static int property2;
-//              ^
+// pkg/front_end/testcases/extensions/issue38713.dart:6:15: Error: Conflicts with setter 'property2'.
+//   static int? property2;
+//               ^
 //
 // pkg/front_end/testcases/extensions/issue38713.dart:9:19: Error: Conflicts with member 'property3'.
-//   static void set property3(int x) {}
+//   static void set property3(int? x) {}
 //                   ^
 //
-// pkg/front_end/testcases/extensions/issue38713.dart:10:11: Error: Conflicts with setter 'property3'.
-//   int get property3 => 1;
-//           ^
+// pkg/front_end/testcases/extensions/issue38713.dart:10:12: Error: Conflicts with setter 'property3'.
+//   int? get property3 => 1;
+//            ^
 //
 import self as self;
 import "dart:core" as core;
 
-extension C on core::int* {
+extension C on core::int {
   static field property2 = self::C|property2;
   get property3 = self::C|get#property3;
   static set property3 = set self::C|property3;
 }
-static field core::int* C|property2;
-static set C|property3(core::int* x) → void {}
-static method C|get#property3(lowered final core::int* #this) → core::int*
+static field core::int? C|property2;
+static set C|property3(core::int? x) → void {}
+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.weak.modular.expect b/pkg/front_end/testcases/extensions/issue38713.dart.weak.modular.expect
index 8dbe072..c4cab22 100644
--- a/pkg/front_end/testcases/extensions/issue38713.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/extensions/issue38713.dart.weak.modular.expect
@@ -1,34 +1,34 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
 // pkg/front_end/testcases/extensions/issue38713.dart:7:19: Error: Conflicts with the implicit setter of the field 'property2'.
-//   static void set property2(int x) {}
+//   static void set property2(int? x) {}
 //                   ^
 //
-// pkg/front_end/testcases/extensions/issue38713.dart:6:14: Error: Conflicts with setter 'property2'.
-//   static int property2;
-//              ^
+// pkg/front_end/testcases/extensions/issue38713.dart:6:15: Error: Conflicts with setter 'property2'.
+//   static int? property2;
+//               ^
 //
 // pkg/front_end/testcases/extensions/issue38713.dart:9:19: Error: Conflicts with member 'property3'.
-//   static void set property3(int x) {}
+//   static void set property3(int? x) {}
 //                   ^
 //
-// pkg/front_end/testcases/extensions/issue38713.dart:10:11: Error: Conflicts with setter 'property3'.
-//   int get property3 => 1;
-//           ^
+// pkg/front_end/testcases/extensions/issue38713.dart:10:12: Error: Conflicts with setter 'property3'.
+//   int? get property3 => 1;
+//            ^
 //
 import self as self;
 import "dart:core" as core;
 
-extension C on core::int* {
+extension C on core::int {
   static field property2 = self::C|property2;
   get property3 = self::C|get#property3;
   static set property3 = set self::C|property3;
 }
-static field core::int* C|property2;
-static set C|property3(core::int* x) → void {}
-static method C|get#property3(lowered final core::int* #this) → core::int*
+static field core::int? C|property2;
+static set C|property3(core::int? x) → void {}
+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.weak.outline.expect b/pkg/front_end/testcases/extensions/issue38713.dart.weak.outline.expect
index 6cfc008..98f41705 100644
--- a/pkg/front_end/testcases/extensions/issue38713.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extensions/issue38713.dart.weak.outline.expect
@@ -1,35 +1,35 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
 // pkg/front_end/testcases/extensions/issue38713.dart:7:19: Error: Conflicts with the implicit setter of the field 'property2'.
-//   static void set property2(int x) {}
+//   static void set property2(int? x) {}
 //                   ^
 //
-// pkg/front_end/testcases/extensions/issue38713.dart:6:14: Error: Conflicts with setter 'property2'.
-//   static int property2;
-//              ^
+// pkg/front_end/testcases/extensions/issue38713.dart:6:15: Error: Conflicts with setter 'property2'.
+//   static int? property2;
+//               ^
 //
 // pkg/front_end/testcases/extensions/issue38713.dart:9:19: Error: Conflicts with member 'property3'.
-//   static void set property3(int x) {}
+//   static void set property3(int? x) {}
 //                   ^
 //
-// pkg/front_end/testcases/extensions/issue38713.dart:10:11: Error: Conflicts with setter 'property3'.
-//   int get property3 => 1;
-//           ^
+// pkg/front_end/testcases/extensions/issue38713.dart:10:12: Error: Conflicts with setter 'property3'.
+//   int? get property3 => 1;
+//            ^
 //
 import self as self;
 import "dart:core" as core;
 
-extension C on core::int* {
+extension C on core::int {
   static field property2 = self::C|property2;
   get property3 = self::C|get#property3;
   static set property3 = set self::C|property3;
 }
-static field core::int* C|property2;
-static set C|property3(core::int* x) → void
+static field core::int? C|property2;
+static set C|property3(core::int? x) → void
   ;
-static method C|get#property3(lowered 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.weak.transformed.expect b/pkg/front_end/testcases/extensions/issue38713.dart.weak.transformed.expect
index 8dbe072..c4cab22 100644
--- a/pkg/front_end/testcases/extensions/issue38713.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/issue38713.dart.weak.transformed.expect
@@ -1,34 +1,34 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
 // pkg/front_end/testcases/extensions/issue38713.dart:7:19: Error: Conflicts with the implicit setter of the field 'property2'.
-//   static void set property2(int x) {}
+//   static void set property2(int? x) {}
 //                   ^
 //
-// pkg/front_end/testcases/extensions/issue38713.dart:6:14: Error: Conflicts with setter 'property2'.
-//   static int property2;
-//              ^
+// pkg/front_end/testcases/extensions/issue38713.dart:6:15: Error: Conflicts with setter 'property2'.
+//   static int? property2;
+//               ^
 //
 // pkg/front_end/testcases/extensions/issue38713.dart:9:19: Error: Conflicts with member 'property3'.
-//   static void set property3(int x) {}
+//   static void set property3(int? x) {}
 //                   ^
 //
-// pkg/front_end/testcases/extensions/issue38713.dart:10:11: Error: Conflicts with setter 'property3'.
-//   int get property3 => 1;
-//           ^
+// pkg/front_end/testcases/extensions/issue38713.dart:10:12: Error: Conflicts with setter 'property3'.
+//   int? get property3 => 1;
+//            ^
 //
 import self as self;
 import "dart:core" as core;
 
-extension C on core::int* {
+extension C on core::int {
   static field property2 = self::C|property2;
   get property3 = self::C|get#property3;
   static set property3 = set self::C|property3;
 }
-static field core::int* C|property2;
-static set C|property3(core::int* x) → void {}
-static method C|get#property3(lowered final core::int* #this) → core::int*
+static field core::int? C|property2;
+static set C|property3(core::int? x) → void {}
+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 b/pkg/front_end/testcases/extensions/issue38745.dart
index e285241..357a655 100644
--- a/pkg/front_end/testcases/extensions/issue38745.dart
+++ b/pkg/front_end/testcases/extensions/issue38745.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2019, 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.
-// @dart=2.9
+
 class C<T> {
 }
 
diff --git a/pkg/front_end/testcases/extensions/issue38745.dart.textual_outline.expect b/pkg/front_end/testcases/extensions/issue38745.dart.textual_outline.expect
index 2fa8049..d0a4d03 100644
--- a/pkg/front_end/testcases/extensions/issue38745.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/extensions/issue38745.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class C<T> {}
 extension ext<T> on C<T> {
   int field;
diff --git a/pkg/front_end/testcases/extensions/issue38745.dart.weak.expect b/pkg/front_end/testcases/extensions/issue38745.dart.weak.expect
index aa7f4d8..d345fc2 100644
--- a/pkg/front_end/testcases/extensions/issue38745.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/issue38745.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -98,22 +98,12 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension ext<T extends core::Object* = dynamic> on self::C<T*>* {
+extension ext<T extends core::Object? = dynamic> on self::C<T%> {
   field field = self::ext|field;
   field property = self::ext|property;
   field property2 = self::ext|property2;
@@ -122,12 +112,12 @@
   set property = self::ext|set#property;
   static set property2 = set self::ext|property2;
 }
-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>(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>(lowered final self::C<self::ext|method::T*>* #this) → dynamic {
+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>(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>(lowered final self::C<self::ext|method::T%> #this) → dynamic {
   invalid-expression "pkg/front_end/testcases/extensions/issue38745.dart:20:5: Error: Undefined name 'field'.
     field;
     ^^^^^";
@@ -137,7 +127,7 @@
   invalid-expression "pkg/front_end/testcases/extensions/issue38745.dart:22:5: Error: Getter not found: 'property'.
     property;
     ^^^^^^^^";
-  self::ext|set#property<self::ext|method::T*>(#this, 23);
+  self::ext|set#property<self::ext|method::T%>(#this, 23);
   invalid-expression "pkg/front_end/testcases/extensions/issue38745.dart:24:5: Error: Undefined name 'property2'.
     property2;
     ^^^^^^^^^";
@@ -145,11 +135,11 @@
     property2 = 23;
     ^^^^^^^^^";
 }
-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 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 {
-  self::C<core::int*>* c = new self::C::•<core::int*>();
+  self::C<core::int> c = new self::C::•<core::int>();
   invalid-expression "pkg/front_end/testcases/extensions/issue38745.dart:34:5: Error: The getter 'field' isn't defined for the class 'C<int>'.
  - 'C' is from 'pkg/front_end/testcases/extensions/issue38745.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'field'.
@@ -165,7 +155,7 @@
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'property'.
   c.property;
     ^^^^^^^^" in c{<unresolved>}.property;
-  self::ext|set#property<core::int*>(c, 23);
+  self::ext|set#property<core::int>(c, 23);
   invalid-expression "pkg/front_end/testcases/extensions/issue38745.dart:38:5: Error: The getter 'property2' isn't defined for the class 'C<int>'.
  - 'C' is from 'pkg/front_end/testcases/extensions/issue38745.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'property2'.
@@ -185,12 +175,12 @@
   invalid-expression "pkg/front_end/testcases/extensions/issue38745.dart:42:10: Error: Getter not found: 'property'.
   ext(c).property;
          ^^^^^^^^";
-  self::ext|set#property<core::int*>(c, 23);
+  self::ext|set#property<core::int>(c, 23);
   invalid-expression "pkg/front_end/testcases/extensions/issue38745.dart:44:10: Error: Member not found: 'property2'.
   ext(c).property2;
          ^^^^^^^^^";
   invalid-expression "pkg/front_end/testcases/extensions/issue38745.dart:45:10: Error: Setter not found: 'property2'.
   ext(c).property2 = 23;
          ^^^^^^^^^";
-  self::ext|method<core::int*>(c);
+  self::ext|method<core::int>(c);
 }
diff --git a/pkg/front_end/testcases/extensions/issue38745.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/issue38745.dart.weak.modular.expect
index aa7f4d8..d345fc2 100644
--- a/pkg/front_end/testcases/extensions/issue38745.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/extensions/issue38745.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -98,22 +98,12 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension ext<T extends core::Object* = dynamic> on self::C<T*>* {
+extension ext<T extends core::Object? = dynamic> on self::C<T%> {
   field field = self::ext|field;
   field property = self::ext|property;
   field property2 = self::ext|property2;
@@ -122,12 +112,12 @@
   set property = self::ext|set#property;
   static set property2 = set self::ext|property2;
 }
-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>(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>(lowered final self::C<self::ext|method::T*>* #this) → dynamic {
+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>(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>(lowered final self::C<self::ext|method::T%> #this) → dynamic {
   invalid-expression "pkg/front_end/testcases/extensions/issue38745.dart:20:5: Error: Undefined name 'field'.
     field;
     ^^^^^";
@@ -137,7 +127,7 @@
   invalid-expression "pkg/front_end/testcases/extensions/issue38745.dart:22:5: Error: Getter not found: 'property'.
     property;
     ^^^^^^^^";
-  self::ext|set#property<self::ext|method::T*>(#this, 23);
+  self::ext|set#property<self::ext|method::T%>(#this, 23);
   invalid-expression "pkg/front_end/testcases/extensions/issue38745.dart:24:5: Error: Undefined name 'property2'.
     property2;
     ^^^^^^^^^";
@@ -145,11 +135,11 @@
     property2 = 23;
     ^^^^^^^^^";
 }
-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 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 {
-  self::C<core::int*>* c = new self::C::•<core::int*>();
+  self::C<core::int> c = new self::C::•<core::int>();
   invalid-expression "pkg/front_end/testcases/extensions/issue38745.dart:34:5: Error: The getter 'field' isn't defined for the class 'C<int>'.
  - 'C' is from 'pkg/front_end/testcases/extensions/issue38745.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'field'.
@@ -165,7 +155,7 @@
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'property'.
   c.property;
     ^^^^^^^^" in c{<unresolved>}.property;
-  self::ext|set#property<core::int*>(c, 23);
+  self::ext|set#property<core::int>(c, 23);
   invalid-expression "pkg/front_end/testcases/extensions/issue38745.dart:38:5: Error: The getter 'property2' isn't defined for the class 'C<int>'.
  - 'C' is from 'pkg/front_end/testcases/extensions/issue38745.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'property2'.
@@ -185,12 +175,12 @@
   invalid-expression "pkg/front_end/testcases/extensions/issue38745.dart:42:10: Error: Getter not found: 'property'.
   ext(c).property;
          ^^^^^^^^";
-  self::ext|set#property<core::int*>(c, 23);
+  self::ext|set#property<core::int>(c, 23);
   invalid-expression "pkg/front_end/testcases/extensions/issue38745.dart:44:10: Error: Member not found: 'property2'.
   ext(c).property2;
          ^^^^^^^^^";
   invalid-expression "pkg/front_end/testcases/extensions/issue38745.dart:45:10: Error: Setter not found: 'property2'.
   ext(c).property2 = 23;
          ^^^^^^^^^";
-  self::ext|method<core::int*>(c);
+  self::ext|method<core::int>(c);
 }
diff --git a/pkg/front_end/testcases/extensions/issue38745.dart.weak.outline.expect b/pkg/front_end/testcases/extensions/issue38745.dart.weak.outline.expect
index 8777198..d8b235e 100644
--- a/pkg/front_end/testcases/extensions/issue38745.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extensions/issue38745.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -28,21 +28,11 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension ext<T extends core::Object* = dynamic> on self::C<T*>* {
+extension ext<T extends core::Object? = dynamic> on self::C<T%> {
   field field = self::ext|field;
   field property = self::ext|property;
   field property2 = self::ext|property2;
@@ -51,17 +41,17 @@
   set property = self::ext|set#property;
   static set property2 = set self::ext|property2;
 }
-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>(lowered final self::C<self::ext|set#property::T*>* #this, core::int* value) → void
+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>(lowered final self::C<self::ext|set#property::T%> #this, core::int value) → void
   ;
-static set ext|property2(core::int* value) → void
+static set ext|property2(core::int value) → void
   ;
-static method ext|method<T extends core::Object* = dynamic>(lowered 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>(lowered final self::C<self::ext|get#method::T*>* #this) → () →* dynamic
-  return () → dynamic => self::ext|method<self::ext|get#method::T*>(#this);
+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.weak.transformed.expect b/pkg/front_end/testcases/extensions/issue38745.dart.weak.transformed.expect
index aa7f4d8..d345fc2 100644
--- a/pkg/front_end/testcases/extensions/issue38745.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/issue38745.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -98,22 +98,12 @@
 import self as self;
 import "dart:core" as core;
 
-class C<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::C<self::C::T*>*
+class C<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension ext<T extends core::Object* = dynamic> on self::C<T*>* {
+extension ext<T extends core::Object? = dynamic> on self::C<T%> {
   field field = self::ext|field;
   field property = self::ext|property;
   field property2 = self::ext|property2;
@@ -122,12 +112,12 @@
   set property = self::ext|set#property;
   static set property2 = set self::ext|property2;
 }
-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>(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>(lowered final self::C<self::ext|method::T*>* #this) → dynamic {
+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>(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>(lowered final self::C<self::ext|method::T%> #this) → dynamic {
   invalid-expression "pkg/front_end/testcases/extensions/issue38745.dart:20:5: Error: Undefined name 'field'.
     field;
     ^^^^^";
@@ -137,7 +127,7 @@
   invalid-expression "pkg/front_end/testcases/extensions/issue38745.dart:22:5: Error: Getter not found: 'property'.
     property;
     ^^^^^^^^";
-  self::ext|set#property<self::ext|method::T*>(#this, 23);
+  self::ext|set#property<self::ext|method::T%>(#this, 23);
   invalid-expression "pkg/front_end/testcases/extensions/issue38745.dart:24:5: Error: Undefined name 'property2'.
     property2;
     ^^^^^^^^^";
@@ -145,11 +135,11 @@
     property2 = 23;
     ^^^^^^^^^";
 }
-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 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 {
-  self::C<core::int*>* c = new self::C::•<core::int*>();
+  self::C<core::int> c = new self::C::•<core::int>();
   invalid-expression "pkg/front_end/testcases/extensions/issue38745.dart:34:5: Error: The getter 'field' isn't defined for the class 'C<int>'.
  - 'C' is from 'pkg/front_end/testcases/extensions/issue38745.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'field'.
@@ -165,7 +155,7 @@
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'property'.
   c.property;
     ^^^^^^^^" in c{<unresolved>}.property;
-  self::ext|set#property<core::int*>(c, 23);
+  self::ext|set#property<core::int>(c, 23);
   invalid-expression "pkg/front_end/testcases/extensions/issue38745.dart:38:5: Error: The getter 'property2' isn't defined for the class 'C<int>'.
  - 'C' is from 'pkg/front_end/testcases/extensions/issue38745.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'property2'.
@@ -185,12 +175,12 @@
   invalid-expression "pkg/front_end/testcases/extensions/issue38745.dart:42:10: Error: Getter not found: 'property'.
   ext(c).property;
          ^^^^^^^^";
-  self::ext|set#property<core::int*>(c, 23);
+  self::ext|set#property<core::int>(c, 23);
   invalid-expression "pkg/front_end/testcases/extensions/issue38745.dart:44:10: Error: Member not found: 'property2'.
   ext(c).property2;
          ^^^^^^^^^";
   invalid-expression "pkg/front_end/testcases/extensions/issue38745.dart:45:10: Error: Setter not found: 'property2'.
   ext(c).property2 = 23;
          ^^^^^^^^^";
-  self::ext|method<core::int*>(c);
+  self::ext|method<core::int>(c);
 }
diff --git a/pkg/front_end/testcases/extensions/issue38750.dart b/pkg/front_end/testcases/extensions/issue38750.dart
index 24eaeb9..46f0bc6 100644
--- a/pkg/front_end/testcases/extensions/issue38750.dart
+++ b/pkg/front_end/testcases/extensions/issue38750.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2019, 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.
-// @dart=2.9
+
 import 'issue38750_lib1.dart';
 import 'issue38750_lib2.dart';
 
diff --git a/pkg/front_end/testcases/extensions/issue38750.dart.textual_outline.expect b/pkg/front_end/testcases/extensions/issue38750.dart.textual_outline.expect
index 974f3ed..5bc7316 100644
--- a/pkg/front_end/testcases/extensions/issue38750.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/extensions/issue38750.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'issue38750_lib1.dart';
 import 'issue38750_lib2.dart';
 
diff --git a/pkg/front_end/testcases/extensions/issue38750.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/extensions/issue38750.dart.textual_outline_modelled.expect
index 6ee009d..cca0335 100644
--- a/pkg/front_end/testcases/extensions/issue38750.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/extensions/issue38750.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'issue38750_lib1.dart';
 import 'issue38750_lib2.dart';
 
diff --git a/pkg/front_end/testcases/extensions/issue38750.dart.weak.expect b/pkg/front_end/testcases/extensions/issue38750.dart.weak.expect
index 4dbcce1..3f0fc8c 100644
--- a/pkg/front_end/testcases/extensions/issue38750.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/issue38750.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -26,7 +26,7 @@
 
 static method main() → dynamic {}
 static method errors() → dynamic {
-  iss::C* c = new iss::C::•();
+  iss::C c = new iss::C::•();
   invalid-expression "pkg/front_end/testcases/extensions/issue38750.dart:12:5: Error: The method '_foo' isn't defined for the class 'C'.
  - 'C' is from 'pkg/front_end/testcases/extensions/issue38750_lib1.dart'.
 Try correcting the name to the name of an existing method, or defining a method named '_foo'.
@@ -35,7 +35,7 @@
   invalid-expression "pkg/front_end/testcases/extensions/issue38750.dart:13:5: Error: Member not found: 'C._staticFoo'.
   C._staticFoo();
     ^^^^^^^^^^";
-  c.{iss::C::foo}(){() →* dynamic};
+  c.{iss::C::foo}(){() → dynamic};
   iss::C::staticFoo();
   invalid-expression "pkg/front_end/testcases/extensions/issue38750.dart:16:5: Error: The method '_bar' isn't defined for the class 'C'.
  - 'C' is from 'pkg/front_end/testcases/extensions/issue38750_lib1.dart'.
@@ -44,21 +44,21 @@
     ^^^^" in c{<unresolved>}._bar();
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as iss;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → iss::C*
+  synthetic constructor •() → iss::C
     : super core::Object::•()
     ;
   method foo() → dynamic
-    return this.{iss::C::_foo}(){() →* dynamic};
+    return this.{iss::C::_foo}(){() → dynamic};
   method _foo() → dynamic {
     try {
       throw "producing a stack trace";
     }
-    on dynamic catch(final dynamic e, final core::StackTrace* s) {
+    on core::Object catch(final core::Object e, final core::StackTrace s) {
       core::print(s);
     }
   }
@@ -67,33 +67,23 @@
   }
   static method staticFoo() → dynamic
     return iss::C::_staticFoo();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension ext on iss::C* {
+extension ext on iss::C {
   method _bar = iss::ext|_bar;
   tearoff _bar = iss::ext|get#_bar;
 }
-static method ext|_bar(lowered final iss::C* #this) → dynamic {
+static method ext|_bar(lowered final iss::C #this) → dynamic {
   try {
     throw "producing a stack trace";
   }
-  on dynamic catch(final dynamic e, final core::StackTrace* s) {
+  on core::Object catch(final core::Object e, final core::StackTrace s) {
     core::print(s);
   }
 }
-static method ext|get#_bar(lowered final iss::C* #this) → () →* dynamic
+static method ext|get#_bar(lowered final iss::C #this) → () → dynamic
   return () → dynamic => iss::ext|_bar(#this);
 
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -109,7 +99,7 @@
 import "org-dartlang-testcase:///issue38750_lib1.dart";
 
 static method errors() → dynamic {
-  iss::C* c = new iss::C::•();
+  iss::C c = new iss::C::•();
   invalid-expression "pkg/front_end/testcases/extensions/issue38750_lib2.dart:9:5: Error: The method '_bar' isn't defined for the class 'C'.
  - 'C' is from 'pkg/front_end/testcases/extensions/issue38750_lib1.dart'.
 Try correcting the name to the name of an existing method, or defining a method named '_bar'.
diff --git a/pkg/front_end/testcases/extensions/issue38750.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/issue38750.dart.weak.modular.expect
index 4dbcce1..3f0fc8c 100644
--- a/pkg/front_end/testcases/extensions/issue38750.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/extensions/issue38750.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -26,7 +26,7 @@
 
 static method main() → dynamic {}
 static method errors() → dynamic {
-  iss::C* c = new iss::C::•();
+  iss::C c = new iss::C::•();
   invalid-expression "pkg/front_end/testcases/extensions/issue38750.dart:12:5: Error: The method '_foo' isn't defined for the class 'C'.
  - 'C' is from 'pkg/front_end/testcases/extensions/issue38750_lib1.dart'.
 Try correcting the name to the name of an existing method, or defining a method named '_foo'.
@@ -35,7 +35,7 @@
   invalid-expression "pkg/front_end/testcases/extensions/issue38750.dart:13:5: Error: Member not found: 'C._staticFoo'.
   C._staticFoo();
     ^^^^^^^^^^";
-  c.{iss::C::foo}(){() →* dynamic};
+  c.{iss::C::foo}(){() → dynamic};
   iss::C::staticFoo();
   invalid-expression "pkg/front_end/testcases/extensions/issue38750.dart:16:5: Error: The method '_bar' isn't defined for the class 'C'.
  - 'C' is from 'pkg/front_end/testcases/extensions/issue38750_lib1.dart'.
@@ -44,21 +44,21 @@
     ^^^^" in c{<unresolved>}._bar();
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as iss;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → iss::C*
+  synthetic constructor •() → iss::C
     : super core::Object::•()
     ;
   method foo() → dynamic
-    return this.{iss::C::_foo}(){() →* dynamic};
+    return this.{iss::C::_foo}(){() → dynamic};
   method _foo() → dynamic {
     try {
       throw "producing a stack trace";
     }
-    on dynamic catch(final dynamic e, final core::StackTrace* s) {
+    on core::Object catch(final core::Object e, final core::StackTrace s) {
       core::print(s);
     }
   }
@@ -67,33 +67,23 @@
   }
   static method staticFoo() → dynamic
     return iss::C::_staticFoo();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension ext on iss::C* {
+extension ext on iss::C {
   method _bar = iss::ext|_bar;
   tearoff _bar = iss::ext|get#_bar;
 }
-static method ext|_bar(lowered final iss::C* #this) → dynamic {
+static method ext|_bar(lowered final iss::C #this) → dynamic {
   try {
     throw "producing a stack trace";
   }
-  on dynamic catch(final dynamic e, final core::StackTrace* s) {
+  on core::Object catch(final core::Object e, final core::StackTrace s) {
     core::print(s);
   }
 }
-static method ext|get#_bar(lowered final iss::C* #this) → () →* dynamic
+static method ext|get#_bar(lowered final iss::C #this) → () → dynamic
   return () → dynamic => iss::ext|_bar(#this);
 
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -109,7 +99,7 @@
 import "org-dartlang-testcase:///issue38750_lib1.dart";
 
 static method errors() → dynamic {
-  iss::C* c = new iss::C::•();
+  iss::C c = new iss::C::•();
   invalid-expression "pkg/front_end/testcases/extensions/issue38750_lib2.dart:9:5: Error: The method '_bar' isn't defined for the class 'C'.
  - 'C' is from 'pkg/front_end/testcases/extensions/issue38750_lib1.dart'.
 Try correcting the name to the name of an existing method, or defining a method named '_bar'.
diff --git a/pkg/front_end/testcases/extensions/issue38750.dart.weak.outline.expect b/pkg/front_end/testcases/extensions/issue38750.dart.weak.outline.expect
index 68e7bae..e01e4b8 100644
--- a/pkg/front_end/testcases/extensions/issue38750.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extensions/issue38750.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 import "org-dartlang-testcase:///issue38750_lib1.dart";
@@ -9,12 +9,12 @@
 static method errors() → dynamic
   ;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self2::C*
+  synthetic constructor •() → self2::C
     ;
   method foo() → dynamic
     ;
@@ -24,27 +24,17 @@
     ;
   static method staticFoo() → dynamic
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension ext on self2::C* {
+extension ext on self2::C {
   method _bar = self2::ext|_bar;
   tearoff _bar = self2::ext|get#_bar;
 }
-static method ext|_bar(lowered final self2::C* #this) → dynamic
+static method ext|_bar(lowered final self2::C #this) → dynamic
   ;
-static method ext|get#_bar(lowered final self2::C* #this) → () →* dynamic
+static method ext|get#_bar(lowered final self2::C #this) → () → dynamic
   return () → dynamic => self2::ext|_bar(#this);
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self3;
 
 import "org-dartlang-testcase:///issue38750_lib1.dart";
diff --git a/pkg/front_end/testcases/extensions/issue38750.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/issue38750.dart.weak.transformed.expect
index 4dbcce1..3f0fc8c 100644
--- a/pkg/front_end/testcases/extensions/issue38750.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/issue38750.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -26,7 +26,7 @@
 
 static method main() → dynamic {}
 static method errors() → dynamic {
-  iss::C* c = new iss::C::•();
+  iss::C c = new iss::C::•();
   invalid-expression "pkg/front_end/testcases/extensions/issue38750.dart:12:5: Error: The method '_foo' isn't defined for the class 'C'.
  - 'C' is from 'pkg/front_end/testcases/extensions/issue38750_lib1.dart'.
 Try correcting the name to the name of an existing method, or defining a method named '_foo'.
@@ -35,7 +35,7 @@
   invalid-expression "pkg/front_end/testcases/extensions/issue38750.dart:13:5: Error: Member not found: 'C._staticFoo'.
   C._staticFoo();
     ^^^^^^^^^^";
-  c.{iss::C::foo}(){() →* dynamic};
+  c.{iss::C::foo}(){() → dynamic};
   iss::C::staticFoo();
   invalid-expression "pkg/front_end/testcases/extensions/issue38750.dart:16:5: Error: The method '_bar' isn't defined for the class 'C'.
  - 'C' is from 'pkg/front_end/testcases/extensions/issue38750_lib1.dart'.
@@ -44,21 +44,21 @@
     ^^^^" in c{<unresolved>}._bar();
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as iss;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → iss::C*
+  synthetic constructor •() → iss::C
     : super core::Object::•()
     ;
   method foo() → dynamic
-    return this.{iss::C::_foo}(){() →* dynamic};
+    return this.{iss::C::_foo}(){() → dynamic};
   method _foo() → dynamic {
     try {
       throw "producing a stack trace";
     }
-    on dynamic catch(final dynamic e, final core::StackTrace* s) {
+    on core::Object catch(final core::Object e, final core::StackTrace s) {
       core::print(s);
     }
   }
@@ -67,33 +67,23 @@
   }
   static method staticFoo() → dynamic
     return iss::C::_staticFoo();
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension ext on iss::C* {
+extension ext on iss::C {
   method _bar = iss::ext|_bar;
   tearoff _bar = iss::ext|get#_bar;
 }
-static method ext|_bar(lowered final iss::C* #this) → dynamic {
+static method ext|_bar(lowered final iss::C #this) → dynamic {
   try {
     throw "producing a stack trace";
   }
-  on dynamic catch(final dynamic e, final core::StackTrace* s) {
+  on core::Object catch(final core::Object e, final core::StackTrace s) {
     core::print(s);
   }
 }
-static method ext|get#_bar(lowered final iss::C* #this) → () →* dynamic
+static method ext|get#_bar(lowered final iss::C #this) → () → dynamic
   return () → dynamic => iss::ext|_bar(#this);
 
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -109,7 +99,7 @@
 import "org-dartlang-testcase:///issue38750_lib1.dart";
 
 static method errors() → dynamic {
-  iss::C* c = new iss::C::•();
+  iss::C c = new iss::C::•();
   invalid-expression "pkg/front_end/testcases/extensions/issue38750_lib2.dart:9:5: Error: The method '_bar' isn't defined for the class 'C'.
  - 'C' is from 'pkg/front_end/testcases/extensions/issue38750_lib1.dart'.
 Try correcting the name to the name of an existing method, or defining a method named '_bar'.
diff --git a/pkg/front_end/testcases/extensions/issue38750_lib1.dart b/pkg/front_end/testcases/extensions/issue38750_lib1.dart
index 00fddf2..e2913d7 100644
--- a/pkg/front_end/testcases/extensions/issue38750_lib1.dart
+++ b/pkg/front_end/testcases/extensions/issue38750_lib1.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2019, 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.
-// @dart=2.9
+
 class C {
   foo() => _foo();
   _foo() {
diff --git a/pkg/front_end/testcases/extensions/issue38750_lib2.dart b/pkg/front_end/testcases/extensions/issue38750_lib2.dart
index 3385c39..8432aad 100644
--- a/pkg/front_end/testcases/extensions/issue38750_lib2.dart
+++ b/pkg/front_end/testcases/extensions/issue38750_lib2.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2019, 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.
-// @dart=2.9
+
 import 'issue38750_lib1.dart';
 
 errors() {
diff --git a/pkg/front_end/testcases/extensions/issue38755.dart b/pkg/front_end/testcases/extensions/issue38755.dart
index 68e25cd7..cdc9cca 100644
--- a/pkg/front_end/testcases/extensions/issue38755.dart
+++ b/pkg/front_end/testcases/extensions/issue38755.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2019, 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.
-// @dart=2.9
+
 final list = ["a", "b", "c"].myMap((it) => it);
 
 extension A<T> on List<T> {
diff --git a/pkg/front_end/testcases/extensions/issue38755.dart.textual_outline.expect b/pkg/front_end/testcases/extensions/issue38755.dart.textual_outline.expect
index 173682a..c52f04b 100644
--- a/pkg/front_end/testcases/extensions/issue38755.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/extensions/issue38755.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 final list = ["a", "b", "c"].myMap((it) => it);
 
 extension A<T> on List<T> {
diff --git a/pkg/front_end/testcases/extensions/issue38755.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/extensions/issue38755.dart.textual_outline_modelled.expect
index 649da97..fd90a7a 100644
--- a/pkg/front_end/testcases/extensions/issue38755.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/extensions/issue38755.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 extension A<T> on List<T> {
   List<R> myMap<R>(R Function(T) block) {}
 }
diff --git a/pkg/front_end/testcases/extensions/issue38755.dart.weak.expect b/pkg/front_end/testcases/extensions/issue38755.dart.weak.expect
index 8be9036..fc70b9d 100644
--- a/pkg/front_end/testcases/extensions/issue38755.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/issue38755.dart.weak.expect
@@ -1,17 +1,17 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-extension A<T extends core::Object* = dynamic> on core::List<T*>* {
+extension A<T extends core::Object? = dynamic> on core::List<T%> {
   method myMap = self::A|myMap;
   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>(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){((self::A|myMap::T*) →* self::A|myMap::R*) →* core::Iterable<self::A|myMap::R*>*}.{core::Iterable::toList}(){({growable: core::bool*}) →* core::List<self::A|myMap::R*>*};
+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>(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){((self::A|myMap::T%) → self::A|myMap::R%) → core::Iterable<self::A|myMap::R%>}.{core::Iterable::toList}(){({growable: core::bool}) → core::List<self::A|myMap::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 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.weak.modular.expect b/pkg/front_end/testcases/extensions/issue38755.dart.weak.modular.expect
index 8be9036..fc70b9d 100644
--- a/pkg/front_end/testcases/extensions/issue38755.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/extensions/issue38755.dart.weak.modular.expect
@@ -1,17 +1,17 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-extension A<T extends core::Object* = dynamic> on core::List<T*>* {
+extension A<T extends core::Object? = dynamic> on core::List<T%> {
   method myMap = self::A|myMap;
   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>(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){((self::A|myMap::T*) →* self::A|myMap::R*) →* core::Iterable<self::A|myMap::R*>*}.{core::Iterable::toList}(){({growable: core::bool*}) →* core::List<self::A|myMap::R*>*};
+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>(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){((self::A|myMap::T%) → self::A|myMap::R%) → core::Iterable<self::A|myMap::R%>}.{core::Iterable::toList}(){({growable: core::bool}) → core::List<self::A|myMap::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 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.weak.outline.expect b/pkg/front_end/testcases/extensions/issue38755.dart.weak.outline.expect
index 13c7102..a2243c6 100644
--- a/pkg/front_end/testcases/extensions/issue38755.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extensions/issue38755.dart.weak.outline.expect
@@ -1,15 +1,15 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-extension A<T extends core::Object* = dynamic> on core::List<T*>* {
+extension A<T extends core::Object? = dynamic> on core::List<T%> {
   method myMap = self::A|myMap;
   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>(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 final field core::List<core::String> list;
+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>(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 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.weak.transformed.expect b/pkg/front_end/testcases/extensions/issue38755.dart.weak.transformed.expect
index b5537fa..848852b 100644
--- a/pkg/front_end/testcases/extensions/issue38755.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/issue38755.dart.weak.transformed.expect
@@ -1,17 +1,17 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-extension A<T extends core::Object* = dynamic> on core::List<T*>* {
+extension A<T extends core::Object? = dynamic> on core::List<T%> {
   method myMap = self::A|myMap;
   tearoff myMap = self::A|get#myMap;
 }
-static final field core::List<core::String*>* list = self::A|myMap<core::String*, core::String*>(core::_GrowableList::_literal3<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>(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){((self::A|myMap::T*) →* self::A|myMap::R*) →* core::Iterable<self::A|myMap::R*>*}.{core::Iterable::toList}(){({growable: core::bool*}) →* core::List<self::A|myMap::R*>*};
+static final field core::List<core::String> list = self::A|myMap<core::String, core::String>(core::_GrowableList::_literal3<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>(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){((self::A|myMap::T%) → self::A|myMap::R%) → core::Iterable<self::A|myMap::R%>}.{core::Iterable::toList}(){({growable: core::bool}) → core::List<self::A|myMap::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 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 b/pkg/front_end/testcases/extensions/issue38915.dart
index 3792c68..5d4752d 100644
--- a/pkg/front_end/testcases/extensions/issue38915.dart
+++ b/pkg/front_end/testcases/extensions/issue38915.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2019, 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.
-// @dart=2.9
+
 class Class {}
 
 extension Extension on Class {
diff --git a/pkg/front_end/testcases/extensions/issue38915.dart.textual_outline.expect b/pkg/front_end/testcases/extensions/issue38915.dart.textual_outline.expect
index faa81ba..349b61f 100644
--- a/pkg/front_end/testcases/extensions/issue38915.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/extensions/issue38915.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Class {}
 
 extension Extension on Class {
diff --git a/pkg/front_end/testcases/extensions/issue38915.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/extensions/issue38915.dart.textual_outline_modelled.expect
index faa81ba..349b61f 100644
--- a/pkg/front_end/testcases/extensions/issue38915.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/extensions/issue38915.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Class {}
 
 extension Extension on Class {
diff --git a/pkg/front_end/testcases/extensions/issue38915.dart.weak.expect b/pkg/front_end/testcases/extensions/issue38915.dart.weak.expect
index ab76811..2cb1c05 100644
--- a/pkg/front_end/testcases/extensions/issue38915.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/issue38915.dart.weak.expect
@@ -1,23 +1,13 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Class extends core::Object {
-  synthetic constructor •() → self::Class*
+  synthetic constructor •() → self::Class
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension Extension on self::Class* {
+extension Extension on self::Class {
   method method1 = self::Extension|method1;
   tearoff method1 = self::Extension|get#method1;
   method method2 = self::Extension|method2;
@@ -27,22 +17,22 @@
   method method4 = self::Extension|method4;
   tearoff method4 = self::Extension|get#method4;
 }
-static method Extension|method1(lowered 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(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(lowered final self::Class* #this, [core::bool* b = #C1, core::String* s = #C2]) → 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(lowered final self::Class #this, [core::bool b = #C1, core::String s = #C2]) → void
   return null;
-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(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(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 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(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(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::•();
+  self::Class c = new self::Class::•();
   self::Extension|method1(c);
   self::Extension|method1(c, s: "foo");
   self::Extension|method1(c, b: true);
diff --git a/pkg/front_end/testcases/extensions/issue38915.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/issue38915.dart.weak.modular.expect
index ab76811..2cb1c05 100644
--- a/pkg/front_end/testcases/extensions/issue38915.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/extensions/issue38915.dart.weak.modular.expect
@@ -1,23 +1,13 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Class extends core::Object {
-  synthetic constructor •() → self::Class*
+  synthetic constructor •() → self::Class
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension Extension on self::Class* {
+extension Extension on self::Class {
   method method1 = self::Extension|method1;
   tearoff method1 = self::Extension|get#method1;
   method method2 = self::Extension|method2;
@@ -27,22 +17,22 @@
   method method4 = self::Extension|method4;
   tearoff method4 = self::Extension|get#method4;
 }
-static method Extension|method1(lowered 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(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(lowered final self::Class* #this, [core::bool* b = #C1, core::String* s = #C2]) → 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(lowered final self::Class #this, [core::bool b = #C1, core::String s = #C2]) → void
   return null;
-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(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(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 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(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(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::•();
+  self::Class c = new self::Class::•();
   self::Extension|method1(c);
   self::Extension|method1(c, s: "foo");
   self::Extension|method1(c, b: true);
diff --git a/pkg/front_end/testcases/extensions/issue38915.dart.weak.outline.expect b/pkg/front_end/testcases/extensions/issue38915.dart.weak.outline.expect
index 7a5e057..41779cc 100644
--- a/pkg/front_end/testcases/extensions/issue38915.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extensions/issue38915.dart.weak.outline.expect
@@ -1,22 +1,12 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Class extends core::Object {
-  synthetic constructor •() → self::Class*
+  synthetic constructor •() → self::Class
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension Extension on self::Class* {
+extension Extension on self::Class {
   method method1 = self::Extension|method1;
   tearoff method1 = self::Extension|get#method1;
   method method2 = self::Extension|method2;
@@ -26,21 +16,21 @@
   method method4 = self::Extension|method4;
   tearoff method4 = self::Extension|get#method4;
 }
-static method Extension|method1(lowered final self::Class* #this, {has-declared-initializer core::bool* b, has-declared-initializer core::String* s}) → void
+static method Extension|method1(lowered final self::Class #this, {has-declared-initializer core::bool b, has-declared-initializer core::String s}) → 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(lowered final self::Class* #this, [has-declared-initializer core::bool* b, has-declared-initializer core::String* s]) → 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(lowered final self::Class #this, [has-declared-initializer core::bool b, has-declared-initializer core::String s]) → 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(lowered final self::Class* #this, core::int* i, {has-declared-initializer core::bool* b, has-declared-initializer core::String* s}) → 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(lowered final self::Class #this, core::int i, {has-declared-initializer core::bool b, has-declared-initializer core::String s}) → 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(lowered final self::Class* #this, core::int* i, [has-declared-initializer core::bool* b, has-declared-initializer core::String* s]) → 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(lowered final self::Class #this, core::int i, [has-declared-initializer core::bool b, has-declared-initializer core::String s]) → 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 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.weak.transformed.expect b/pkg/front_end/testcases/extensions/issue38915.dart.weak.transformed.expect
index ab76811..2cb1c05 100644
--- a/pkg/front_end/testcases/extensions/issue38915.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/issue38915.dart.weak.transformed.expect
@@ -1,23 +1,13 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Class extends core::Object {
-  synthetic constructor •() → self::Class*
+  synthetic constructor •() → self::Class
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension Extension on self::Class* {
+extension Extension on self::Class {
   method method1 = self::Extension|method1;
   tearoff method1 = self::Extension|get#method1;
   method method2 = self::Extension|method2;
@@ -27,22 +17,22 @@
   method method4 = self::Extension|method4;
   tearoff method4 = self::Extension|get#method4;
 }
-static method Extension|method1(lowered 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(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(lowered final self::Class* #this, [core::bool* b = #C1, core::String* s = #C2]) → 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(lowered final self::Class #this, [core::bool b = #C1, core::String s = #C2]) → void
   return null;
-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(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(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 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(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(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::•();
+  self::Class c = new self::Class::•();
   self::Extension|method1(c);
   self::Extension|method1(c, s: "foo");
   self::Extension|method1(c, b: true);
diff --git a/pkg/front_end/testcases/extensions/issue39527.dart b/pkg/front_end/testcases/extensions/issue39527.dart
index 5e2f9cd..7990741 100644
--- a/pkg/front_end/testcases/extensions/issue39527.dart
+++ b/pkg/front_end/testcases/extensions/issue39527.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 class C {
   int value = 0;
 }
diff --git a/pkg/front_end/testcases/extensions/issue39527.dart.textual_outline.expect b/pkg/front_end/testcases/extensions/issue39527.dart.textual_outline.expect
index 3dec874..586004b 100644
--- a/pkg/front_end/testcases/extensions/issue39527.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/extensions/issue39527.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class C {
   int value = 0;
 }
diff --git a/pkg/front_end/testcases/extensions/issue39527.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/extensions/issue39527.dart.textual_outline_modelled.expect
index 8a10e4c..56b4c36 100644
--- a/pkg/front_end/testcases/extensions/issue39527.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/extensions/issue39527.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class C {
   int value = 0;
 }
diff --git a/pkg/front_end/testcases/extensions/issue39527.dart.weak.expect b/pkg/front_end/testcases/extensions/issue39527.dart.weak.expect
index 7d9415b..e569e5c 100644
--- a/pkg/front_end/testcases/extensions/issue39527.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/issue39527.dart.weak.expect
@@ -1,39 +1,29 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  field core::int* value = 0;
-  synthetic constructor •() → self::C*
+  field core::int value = 0;
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension Extension1 on self::C* {
+extension Extension1 on self::C {
   operator [] = self::Extension1|[];
   operator []= = self::Extension1|[]=;
   operator - = self::Extension1|-;
 }
-static method Extension1|[](lowered final self::C* #this, core::int* index) → self::C*
-  return let final self::C* #t1 = #this in block {
-    #t1.{self::C::value} = #t1.{self::C::value}{core::int*}.{core::num::+}(index.{core::num::+}(1){(core::num*) →* core::int*}){(core::num*) →* core::int*};
+static method Extension1|[](lowered final self::C #this, core::int index) → self::C
+  return let final self::C #t1 = #this in block {
+    #t1.{self::C::value} = #t1.{self::C::value}{core::int}.{core::num::+}(index.{core::num::+}(1){(core::num) → core::int}){(core::num) → core::int};
   } =>#t1;
-static method Extension1|[]=(lowered final self::C* #this, core::int* index, self::C* other) → void
-  return #this.{self::C::value} = #this.{self::C::value}{core::int*}.{core::num::+}(other.{self::C::value}{core::int*}.{core::num::+}(index){(core::num*) →* core::int*}.{core::num::+}(1){(core::num*) →* core::int*}){(core::num*) →* core::int*};
-static method Extension1|-(lowered final self::C* #this, core::int* val) → self::C*
+static method Extension1|[]=(lowered final self::C #this, core::int index, self::C other) → void
+  return #this.{self::C::value} = #this.{self::C::value}{core::int}.{core::num::+}(other.{self::C::value}{core::int}.{core::num::+}(index){(core::num) → core::int}.{core::num::+}(1){(core::num) → core::int}){(core::num) → core::int};
+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::•();
-  let final self::C* #t2 = c in let final core::int* #t3 = 42 in let final self::C* #t4 = self::Extension1|-(self::Extension1|[](#t2, #t3), 1) in let final void #t5 = self::Extension1|[]=(#t2, #t3, #t4) in #t4;
-  let final self::C* #t6 = c in let final core::int* #t7 = 42 in self::Extension1|[]=(#t6, #t7, self::Extension1|-(self::Extension1|[](#t6, #t7), 1));
+  self::C c = new self::C::•();
+  let final self::C #t2 = c in let final core::int #t3 = 42 in let final self::C #t4 = self::Extension1|-(self::Extension1|[](#t2, #t3), 1) in let final void #t5 = self::Extension1|[]=(#t2, #t3, #t4) in #t4;
+  let final self::C #t6 = c in let final core::int #t7 = 42 in self::Extension1|[]=(#t6, #t7, self::Extension1|-(self::Extension1|[](#t6, #t7), 1));
   self::Extension1|[]=(c, 42, self::Extension1|-(self::Extension1|[](c, 42), 1));
 }
diff --git a/pkg/front_end/testcases/extensions/issue39527.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/issue39527.dart.weak.modular.expect
index 7d9415b..e569e5c 100644
--- a/pkg/front_end/testcases/extensions/issue39527.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/extensions/issue39527.dart.weak.modular.expect
@@ -1,39 +1,29 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  field core::int* value = 0;
-  synthetic constructor •() → self::C*
+  field core::int value = 0;
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension Extension1 on self::C* {
+extension Extension1 on self::C {
   operator [] = self::Extension1|[];
   operator []= = self::Extension1|[]=;
   operator - = self::Extension1|-;
 }
-static method Extension1|[](lowered final self::C* #this, core::int* index) → self::C*
-  return let final self::C* #t1 = #this in block {
-    #t1.{self::C::value} = #t1.{self::C::value}{core::int*}.{core::num::+}(index.{core::num::+}(1){(core::num*) →* core::int*}){(core::num*) →* core::int*};
+static method Extension1|[](lowered final self::C #this, core::int index) → self::C
+  return let final self::C #t1 = #this in block {
+    #t1.{self::C::value} = #t1.{self::C::value}{core::int}.{core::num::+}(index.{core::num::+}(1){(core::num) → core::int}){(core::num) → core::int};
   } =>#t1;
-static method Extension1|[]=(lowered final self::C* #this, core::int* index, self::C* other) → void
-  return #this.{self::C::value} = #this.{self::C::value}{core::int*}.{core::num::+}(other.{self::C::value}{core::int*}.{core::num::+}(index){(core::num*) →* core::int*}.{core::num::+}(1){(core::num*) →* core::int*}){(core::num*) →* core::int*};
-static method Extension1|-(lowered final self::C* #this, core::int* val) → self::C*
+static method Extension1|[]=(lowered final self::C #this, core::int index, self::C other) → void
+  return #this.{self::C::value} = #this.{self::C::value}{core::int}.{core::num::+}(other.{self::C::value}{core::int}.{core::num::+}(index){(core::num) → core::int}.{core::num::+}(1){(core::num) → core::int}){(core::num) → core::int};
+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::•();
-  let final self::C* #t2 = c in let final core::int* #t3 = 42 in let final self::C* #t4 = self::Extension1|-(self::Extension1|[](#t2, #t3), 1) in let final void #t5 = self::Extension1|[]=(#t2, #t3, #t4) in #t4;
-  let final self::C* #t6 = c in let final core::int* #t7 = 42 in self::Extension1|[]=(#t6, #t7, self::Extension1|-(self::Extension1|[](#t6, #t7), 1));
+  self::C c = new self::C::•();
+  let final self::C #t2 = c in let final core::int #t3 = 42 in let final self::C #t4 = self::Extension1|-(self::Extension1|[](#t2, #t3), 1) in let final void #t5 = self::Extension1|[]=(#t2, #t3, #t4) in #t4;
+  let final self::C #t6 = c in let final core::int #t7 = 42 in self::Extension1|[]=(#t6, #t7, self::Extension1|-(self::Extension1|[](#t6, #t7), 1));
   self::Extension1|[]=(c, 42, self::Extension1|-(self::Extension1|[](c, 42), 1));
 }
diff --git a/pkg/front_end/testcases/extensions/issue39527.dart.weak.outline.expect b/pkg/front_end/testcases/extensions/issue39527.dart.weak.outline.expect
index 32185bf..c414d72 100644
--- a/pkg/front_end/testcases/extensions/issue39527.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extensions/issue39527.dart.weak.outline.expect
@@ -1,32 +1,22 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  field core::int* value;
-  synthetic constructor •() → self::C*
+  field core::int value;
+  synthetic constructor •() → self::C
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension Extension1 on self::C* {
+extension Extension1 on self::C {
   operator [] = self::Extension1|[];
   operator []= = self::Extension1|[]=;
   operator - = self::Extension1|-;
 }
-static method Extension1|[](lowered 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|[]=(lowered 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|-(lowered 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.weak.transformed.expect b/pkg/front_end/testcases/extensions/issue39527.dart.weak.transformed.expect
index f952880..c864b44 100644
--- a/pkg/front_end/testcases/extensions/issue39527.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/issue39527.dart.weak.transformed.expect
@@ -1,40 +1,30 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  field core::int* value = 0;
-  synthetic constructor •() → self::C*
+  field core::int value = 0;
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension Extension1 on self::C* {
+extension Extension1 on self::C {
   operator [] = self::Extension1|[];
   operator []= = self::Extension1|[]=;
   operator - = self::Extension1|-;
 }
-static method Extension1|[](lowered final self::C* #this, core::int* index) → self::C*
-  return let final self::C* #t1 = #this in block {
-    #t1.{self::C::value} = #t1.{self::C::value}{core::int*}.{core::num::+}(index.{core::num::+}(1){(core::num*) →* core::int*}){(core::num*) →* core::int*};
+static method Extension1|[](lowered final self::C #this, core::int index) → self::C
+  return let final self::C #t1 = #this in block {
+    #t1.{self::C::value} = #t1.{self::C::value}{core::int}.{core::num::+}(index.{core::num::+}(1){(core::num) → core::int}){(core::num) → core::int};
   } =>#t1;
-static method Extension1|[]=(lowered final self::C* #this, core::int* index, self::C* other) → void
-  return #this.{self::C::value} = #this.{self::C::value}{core::int*}.{core::num::+}(other.{self::C::value}{core::int*}.{core::num::+}(index){(core::num*) →* core::int*}.{core::num::+}(1){(core::num*) →* core::int*}){(core::num*) →* core::int*};
-static method Extension1|-(lowered final self::C* #this, core::int* val) → self::C*
+static method Extension1|[]=(lowered final self::C #this, core::int index, self::C other) → void
+  return #this.{self::C::value} = #this.{self::C::value}{core::int}.{core::num::+}(other.{self::C::value}{core::int}.{core::num::+}(index){(core::num) → core::int}.{core::num::+}(1){(core::num) → core::int}){(core::num) → core::int};
+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::•();
-  let final self::C* #t2 = c in let final core::int* #t3 = 42 in let final self::C* #t4 = self::Extension1|-(self::Extension1|[](#t2, #t3), 1) in let final void #t5 = self::Extension1|[]=(#t2, #t3, #t4) in #t4;
-  let final self::C* #t6 = c in let final core::int* #t7 = 42 in self::Extension1|[]=(#t6, #t7, self::Extension1|-(self::Extension1|[](#t6, #t7), 1));
+  self::C c = new self::C::•();
+  let final self::C #t2 = c in let final core::int #t3 = 42 in let final self::C #t4 = self::Extension1|-(self::Extension1|[](#t2, #t3), 1) in let final void #t5 = self::Extension1|[]=(#t2, #t3, #t4) in #t4;
+  let final self::C #t6 = c in let final core::int #t7 = 42 in self::Extension1|[]=(#t6, #t7, self::Extension1|-(self::Extension1|[](#t6, #t7), 1));
   self::Extension1|[]=(c, 42, self::Extension1|-(self::Extension1|[](c, 42), 1));
 }
 
diff --git a/pkg/front_end/testcases/extensions/issue39889.dart b/pkg/front_end/testcases/extensions/issue39889.dart
index f53be7d..7ff900b 100644
--- a/pkg/front_end/testcases/extensions/issue39889.dart
+++ b/pkg/front_end/testcases/extensions/issue39889.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 class C {}
 
 extension E on C {
diff --git a/pkg/front_end/testcases/extensions/issue39889.dart.textual_outline.expect b/pkg/front_end/testcases/extensions/issue39889.dart.textual_outline.expect
index 87bc816..2b64dea 100644
--- a/pkg/front_end/testcases/extensions/issue39889.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/extensions/issue39889.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class C {}
 
 extension E on C {
diff --git a/pkg/front_end/testcases/extensions/issue39889.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/extensions/issue39889.dart.textual_outline_modelled.expect
index 87bc816..2b64dea 100644
--- a/pkg/front_end/testcases/extensions/issue39889.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/extensions/issue39889.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class C {}
 
 extension E on C {
diff --git a/pkg/front_end/testcases/extensions/issue39889.dart.weak.expect b/pkg/front_end/testcases/extensions/issue39889.dart.weak.expect
index 3d65b0f..42c94d0 100644
--- a/pkg/front_end/testcases/extensions/issue39889.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/issue39889.dart.weak.expect
@@ -1,31 +1,21 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension E on self::C* {
+extension E on self::C {
   method f = self::E|f;
   tearoff f = self::E|get#f;
 }
-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 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";
-  self::C* c = new self::C::•();
-  self::E|f(c, b as{TypeError,ForDynamic} core::String*);
+  self::C c = new self::C::•();
+  self::E|f(c, b as{TypeError,ForDynamic,ForNonNullableByDefault} core::String);
 }
diff --git a/pkg/front_end/testcases/extensions/issue39889.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/issue39889.dart.weak.modular.expect
index 3d65b0f..42c94d0 100644
--- a/pkg/front_end/testcases/extensions/issue39889.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/extensions/issue39889.dart.weak.modular.expect
@@ -1,31 +1,21 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension E on self::C* {
+extension E on self::C {
   method f = self::E|f;
   tearoff f = self::E|get#f;
 }
-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 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";
-  self::C* c = new self::C::•();
-  self::E|f(c, b as{TypeError,ForDynamic} core::String*);
+  self::C c = new self::C::•();
+  self::E|f(c, b as{TypeError,ForDynamic,ForNonNullableByDefault} core::String);
 }
diff --git a/pkg/front_end/testcases/extensions/issue39889.dart.weak.outline.expect b/pkg/front_end/testcases/extensions/issue39889.dart.weak.outline.expect
index 0569c0a..3f7e42e 100644
--- a/pkg/front_end/testcases/extensions/issue39889.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extensions/issue39889.dart.weak.outline.expect
@@ -1,28 +1,18 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension E on self::C* {
+extension E on self::C {
   method f = self::E|f;
   tearoff f = self::E|get#f;
 }
-static method E|f(lowered 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(lowered final self::C* #this) → (core::String*) →* void
-  return (core::String* b) → void => self::E|f(#this, b);
+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.weak.transformed.expect b/pkg/front_end/testcases/extensions/issue39889.dart.weak.transformed.expect
index 3d65b0f..42c94d0 100644
--- a/pkg/front_end/testcases/extensions/issue39889.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/issue39889.dart.weak.transformed.expect
@@ -1,31 +1,21 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  synthetic constructor •() → self::C*
+  synthetic constructor •() → self::C
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension E on self::C* {
+extension E on self::C {
   method f = self::E|f;
   tearoff f = self::E|get#f;
 }
-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 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";
-  self::C* c = new self::C::•();
-  self::E|f(c, b as{TypeError,ForDynamic} core::String*);
+  self::C c = new self::C::•();
+  self::E|f(c, b as{TypeError,ForDynamic,ForNonNullableByDefault} core::String);
 }
diff --git a/pkg/front_end/testcases/extensions/issue39938/issue39938.dart b/pkg/front_end/testcases/extensions/issue39938/issue39938.dart
index d78f27a..5a39748 100644
--- a/pkg/front_end/testcases/extensions/issue39938/issue39938.dart
+++ b/pkg/front_end/testcases/extensions/issue39938/issue39938.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 import 'issue39938_lib.dart';
 
 main() {
diff --git a/pkg/front_end/testcases/extensions/issue39938/issue39938.dart.textual_outline.expect b/pkg/front_end/testcases/extensions/issue39938/issue39938.dart.textual_outline.expect
index 19911dd..5a7bb14 100644
--- a/pkg/front_end/testcases/extensions/issue39938/issue39938.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/extensions/issue39938/issue39938.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'issue39938_lib.dart';
 
 main() {}
diff --git a/pkg/front_end/testcases/extensions/issue39938/issue39938.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/extensions/issue39938/issue39938.dart.textual_outline_modelled.expect
index 416331d..55e3b57 100644
--- a/pkg/front_end/testcases/extensions/issue39938/issue39938.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/extensions/issue39938/issue39938.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'issue39938_lib.dart';
 
 expect(expected, actual) {}
diff --git a/pkg/front_end/testcases/extensions/issue39938/issue39938.dart.weak.expect b/pkg/front_end/testcases/extensions/issue39938/issue39938.dart.weak.expect
index aef46a0..9381fe1 100644
--- a/pkg/front_end/testcases/extensions/issue39938/issue39938.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/issue39938/issue39938.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "issue39938_lib.dart" as iss;
 import "dart:core" as core;
@@ -16,16 +16,16 @@
   self::expect(false, iss::Extension|+(false, false));
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}.";
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as iss;
 import "dart:core" as core;
 
-extension Extension on core::bool* {
+extension Extension on core::bool {
   operator + = iss::Extension|+;
 }
-static method Extension|+(lowered final core::bool* #this, core::bool* other) → core::bool*
-  return #this.{core::bool::|}(other){(core::bool*) →* core::bool*};
+static method Extension|+(lowered final core::bool #this, core::bool other) → core::bool
+  return #this.{core::bool::|}(other){(core::bool) → core::bool};
diff --git a/pkg/front_end/testcases/extensions/issue39938/issue39938.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/issue39938/issue39938.dart.weak.modular.expect
index 1c4dd76..4a69c8b 100644
--- a/pkg/front_end/testcases/extensions/issue39938/issue39938.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/extensions/issue39938/issue39938.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "issue39938_lib.dart" as iss;
 import "dart:core" as core;
@@ -16,6 +16,6 @@
   self::expect(false, iss::Extension|+(false, false));
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}.";
 }
diff --git a/pkg/front_end/testcases/extensions/issue39938/issue39938.dart.weak.outline.expect b/pkg/front_end/testcases/extensions/issue39938/issue39938.dart.weak.outline.expect
index 975b7b2..1905de9 100644
--- a/pkg/front_end/testcases/extensions/issue39938/issue39938.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extensions/issue39938/issue39938.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 import "org-dartlang-testcase:///issue39938_lib.dart";
@@ -8,12 +8,12 @@
 static method expect(dynamic expected, dynamic actual) → dynamic
   ;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
-extension Extension on core::bool* {
+extension Extension on core::bool {
   operator + = self2::Extension|+;
 }
-static method Extension|+(lowered 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.weak.transformed.expect b/pkg/front_end/testcases/extensions/issue39938/issue39938.dart.weak.transformed.expect
index aef46a0..9381fe1 100644
--- a/pkg/front_end/testcases/extensions/issue39938/issue39938.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/issue39938/issue39938.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "issue39938_lib.dart" as iss;
 import "dart:core" as core;
@@ -16,16 +16,16 @@
   self::expect(false, iss::Extension|+(false, false));
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual))
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
     throw "Expected ${expected}, actual ${actual}.";
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as iss;
 import "dart:core" as core;
 
-extension Extension on core::bool* {
+extension Extension on core::bool {
   operator + = iss::Extension|+;
 }
-static method Extension|+(lowered final core::bool* #this, core::bool* other) → core::bool*
-  return #this.{core::bool::|}(other){(core::bool*) →* core::bool*};
+static method Extension|+(lowered final core::bool #this, core::bool other) → core::bool
+  return #this.{core::bool::|}(other){(core::bool) → core::bool};
diff --git a/pkg/front_end/testcases/extensions/issue39938/issue39938_lib.dart b/pkg/front_end/testcases/extensions/issue39938/issue39938_lib.dart
index da0e29f..8f2588e 100644
--- a/pkg/front_end/testcases/extensions/issue39938/issue39938_lib.dart
+++ b/pkg/front_end/testcases/extensions/issue39938/issue39938_lib.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 extension Extension on bool {
   bool operator +(bool other) => this | other;
 }
diff --git a/pkg/front_end/testcases/extensions/issue40596.dart b/pkg/front_end/testcases/extensions/issue40596.dart
index fd0c1c1..733236c 100644
--- a/pkg/front_end/testcases/extensions/issue40596.dart
+++ b/pkg/front_end/testcases/extensions/issue40596.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 import 'dart:async';
 
 void main() {
diff --git a/pkg/front_end/testcases/extensions/issue40596.dart.textual_outline.expect b/pkg/front_end/testcases/extensions/issue40596.dart.textual_outline.expect
index ce04073..ee456e8 100644
--- a/pkg/front_end/testcases/extensions/issue40596.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/extensions/issue40596.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'dart:async';
 
 void main() {}
diff --git a/pkg/front_end/testcases/extensions/issue40596.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/extensions/issue40596.dart.textual_outline_modelled.expect
index 15839ab..a5b08bb 100644
--- a/pkg/front_end/testcases/extensions/issue40596.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/extensions/issue40596.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'dart:async';
 
 extension Extension<T> on Stream<T> {
diff --git a/pkg/front_end/testcases/extensions/issue40596.dart.weak.expect b/pkg/front_end/testcases/extensions/issue40596.dart.weak.expect
index 4f80fad..ca760ff 100644
--- a/pkg/front_end/testcases/extensions/issue40596.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/issue40596.dart.weak.expect
@@ -1,24 +1,24 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
 
 import "dart:async";
 
-extension Extension<T extends core::Object* = dynamic> on asy::Stream<T*>* {
+extension Extension<T extends core::Object? = dynamic> on asy::Stream<T%> {
   method call = self::Extension|call;
   tearoff call = self::Extension|get#call;
 }
 static method main() → void {
-  asy::StreamController<core::String*>* controller = asy::StreamController::•<core::String*>();
-  let final asy::StreamController<core::String*>* #t1 = controller in let final (dynamic) →* Null #t2 = (dynamic s) → Null {
+  asy::StreamController<core::String> controller = asy::StreamController::•<core::String>();
+  let final asy::StreamController<core::String> #t1 = controller in let final (dynamic) → Null #t2 = (dynamic s) → Null {
     core::print(s);
-  } in self::Extension|call<core::String*>(#t1.{asy::StreamController::stream}{asy::Stream<core::String*>*}, #t2);
+  } in self::Extension|call<core::String>(#t1.{asy::StreamController::stream}{asy::Stream<core::String>}, #t2);
 }
-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 {
+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) → void {
     onData(d);
-  }){((self::Extension|call::T*) →* void, {cancelOnError: core::bool*, onDone: () →* void, onError: core::Function*}) →* asy::StreamSubscription<self::Extension|call::T*>*};
+  }){((self::Extension|call::T%) →? void, {cancelOnError: core::bool?, onDone: () →? void, onError: core::Function?}) → asy::StreamSubscription<self::Extension|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);
+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.weak.modular.expect b/pkg/front_end/testcases/extensions/issue40596.dart.weak.modular.expect
index 4f80fad..ca760ff 100644
--- a/pkg/front_end/testcases/extensions/issue40596.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/extensions/issue40596.dart.weak.modular.expect
@@ -1,24 +1,24 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
 
 import "dart:async";
 
-extension Extension<T extends core::Object* = dynamic> on asy::Stream<T*>* {
+extension Extension<T extends core::Object? = dynamic> on asy::Stream<T%> {
   method call = self::Extension|call;
   tearoff call = self::Extension|get#call;
 }
 static method main() → void {
-  asy::StreamController<core::String*>* controller = asy::StreamController::•<core::String*>();
-  let final asy::StreamController<core::String*>* #t1 = controller in let final (dynamic) →* Null #t2 = (dynamic s) → Null {
+  asy::StreamController<core::String> controller = asy::StreamController::•<core::String>();
+  let final asy::StreamController<core::String> #t1 = controller in let final (dynamic) → Null #t2 = (dynamic s) → Null {
     core::print(s);
-  } in self::Extension|call<core::String*>(#t1.{asy::StreamController::stream}{asy::Stream<core::String*>*}, #t2);
+  } in self::Extension|call<core::String>(#t1.{asy::StreamController::stream}{asy::Stream<core::String>}, #t2);
 }
-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 {
+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) → void {
     onData(d);
-  }){((self::Extension|call::T*) →* void, {cancelOnError: core::bool*, onDone: () →* void, onError: core::Function*}) →* asy::StreamSubscription<self::Extension|call::T*>*};
+  }){((self::Extension|call::T%) →? void, {cancelOnError: core::bool?, onDone: () →? void, onError: core::Function?}) → asy::StreamSubscription<self::Extension|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);
+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.weak.outline.expect b/pkg/front_end/testcases/extensions/issue40596.dart.weak.outline.expect
index 8be7c09..c40dae2 100644
--- a/pkg/front_end/testcases/extensions/issue40596.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extensions/issue40596.dart.weak.outline.expect
@@ -1,17 +1,17 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
 
 import "dart:async";
 
-extension Extension<T extends core::Object* = dynamic> on asy::Stream<T*>* {
+extension Extension<T extends core::Object? = dynamic> on asy::Stream<T%> {
   method call = self::Extension|call;
   tearoff call = self::Extension|get#call;
 }
 static method main() → void
   ;
-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|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>(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);
+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.weak.transformed.expect b/pkg/front_end/testcases/extensions/issue40596.dart.weak.transformed.expect
index 4f80fad..ca760ff 100644
--- a/pkg/front_end/testcases/extensions/issue40596.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/issue40596.dart.weak.transformed.expect
@@ -1,24 +1,24 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
 
 import "dart:async";
 
-extension Extension<T extends core::Object* = dynamic> on asy::Stream<T*>* {
+extension Extension<T extends core::Object? = dynamic> on asy::Stream<T%> {
   method call = self::Extension|call;
   tearoff call = self::Extension|get#call;
 }
 static method main() → void {
-  asy::StreamController<core::String*>* controller = asy::StreamController::•<core::String*>();
-  let final asy::StreamController<core::String*>* #t1 = controller in let final (dynamic) →* Null #t2 = (dynamic s) → Null {
+  asy::StreamController<core::String> controller = asy::StreamController::•<core::String>();
+  let final asy::StreamController<core::String> #t1 = controller in let final (dynamic) → Null #t2 = (dynamic s) → Null {
     core::print(s);
-  } in self::Extension|call<core::String*>(#t1.{asy::StreamController::stream}{asy::Stream<core::String*>*}, #t2);
+  } in self::Extension|call<core::String>(#t1.{asy::StreamController::stream}{asy::Stream<core::String>}, #t2);
 }
-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 {
+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) → void {
     onData(d);
-  }){((self::Extension|call::T*) →* void, {cancelOnError: core::bool*, onDone: () →* void, onError: core::Function*}) →* asy::StreamSubscription<self::Extension|call::T*>*};
+  }){((self::Extension|call::T%) →? void, {cancelOnError: core::bool?, onDone: () →? void, onError: core::Function?}) → asy::StreamSubscription<self::Extension|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);
+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 b/pkg/front_end/testcases/extensions/issue40713.dart
index 04e924b..3ce25ad 100644
--- a/pkg/front_end/testcases/extensions/issue40713.dart
+++ b/pkg/front_end/testcases/extensions/issue40713.dart
@@ -1,7 +1,9 @@
 // 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.
+
 // @dart=2.9
+
 extension SafeAccess<T> on Iterable<T> {
   T get safeFirst {
     return isNotEmpty ? first : null;
diff --git a/pkg/front_end/testcases/extensions/issue40713.dart.weak.expect b/pkg/front_end/testcases/extensions/issue40713.dart.weak.expect
index 568f207..dcea3fb 100644
--- a/pkg/front_end/testcases/extensions/issue40713.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/issue40713.dart.weak.expect
@@ -2,11 +2,11 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/extensions/issue40713.dart:22:8: Error: 'safeFirst' isn't a function or method and can't be invoked.
+// pkg/front_end/testcases/extensions/issue40713.dart:24:8: Error: 'safeFirst' isn't a function or method and can't be invoked.
 //   list.safeFirst();
 //        ^^^^^^^^^
 //
-// pkg/front_end/testcases/extensions/issue40713.dart:24:18: Error: Too few positional arguments: 1 required, 0 given.
+// pkg/front_end/testcases/extensions/issue40713.dart:26:18: Error: Too few positional arguments: 1 required, 0 given.
 //   list2.safeFirst();
 //                  ^
 //
@@ -28,11 +28,11 @@
 }
 static method errors() → void {
   final core::List<core::Object*>* list = <core::Object*>[];
-  invalid-expression "pkg/front_end/testcases/extensions/issue40713.dart:22:8: Error: 'safeFirst' isn't a function or method and can't be invoked.
+  invalid-expression "pkg/front_end/testcases/extensions/issue40713.dart:24:8: Error: 'safeFirst' isn't a function or method and can't be invoked.
   list.safeFirst();
        ^^^^^^^^^" in self::SafeAccess|get#safeFirst<core::Object*>(list){<unresolved>}.call();
   final core::List<(core::int*) →* void>* list2 = <(core::int*) →* void>[];
-  invalid-expression "pkg/front_end/testcases/extensions/issue40713.dart:24:18: Error: Too few positional arguments: 1 required, 0 given.
+  invalid-expression "pkg/front_end/testcases/extensions/issue40713.dart:26:18: Error: Too few positional arguments: 1 required, 0 given.
   list2.safeFirst();
                  ^" in self::SafeAccess|get#safeFirst<(core::int*) →* void>(list2){<inapplicable>}.();
 }
diff --git a/pkg/front_end/testcases/extensions/issue40713.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/issue40713.dart.weak.modular.expect
index 568f207..dcea3fb 100644
--- a/pkg/front_end/testcases/extensions/issue40713.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/extensions/issue40713.dart.weak.modular.expect
@@ -2,11 +2,11 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/extensions/issue40713.dart:22:8: Error: 'safeFirst' isn't a function or method and can't be invoked.
+// pkg/front_end/testcases/extensions/issue40713.dart:24:8: Error: 'safeFirst' isn't a function or method and can't be invoked.
 //   list.safeFirst();
 //        ^^^^^^^^^
 //
-// pkg/front_end/testcases/extensions/issue40713.dart:24:18: Error: Too few positional arguments: 1 required, 0 given.
+// pkg/front_end/testcases/extensions/issue40713.dart:26:18: Error: Too few positional arguments: 1 required, 0 given.
 //   list2.safeFirst();
 //                  ^
 //
@@ -28,11 +28,11 @@
 }
 static method errors() → void {
   final core::List<core::Object*>* list = <core::Object*>[];
-  invalid-expression "pkg/front_end/testcases/extensions/issue40713.dart:22:8: Error: 'safeFirst' isn't a function or method and can't be invoked.
+  invalid-expression "pkg/front_end/testcases/extensions/issue40713.dart:24:8: Error: 'safeFirst' isn't a function or method and can't be invoked.
   list.safeFirst();
        ^^^^^^^^^" in self::SafeAccess|get#safeFirst<core::Object*>(list){<unresolved>}.call();
   final core::List<(core::int*) →* void>* list2 = <(core::int*) →* void>[];
-  invalid-expression "pkg/front_end/testcases/extensions/issue40713.dart:24:18: Error: Too few positional arguments: 1 required, 0 given.
+  invalid-expression "pkg/front_end/testcases/extensions/issue40713.dart:26:18: Error: Too few positional arguments: 1 required, 0 given.
   list2.safeFirst();
                  ^" in self::SafeAccess|get#safeFirst<(core::int*) →* void>(list2){<inapplicable>}.();
 }
diff --git a/pkg/front_end/testcases/extensions/issue40713.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/issue40713.dart.weak.transformed.expect
index 7dc278b..70bb82b 100644
--- a/pkg/front_end/testcases/extensions/issue40713.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/issue40713.dart.weak.transformed.expect
@@ -2,11 +2,11 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/extensions/issue40713.dart:22:8: Error: 'safeFirst' isn't a function or method and can't be invoked.
+// pkg/front_end/testcases/extensions/issue40713.dart:24:8: Error: 'safeFirst' isn't a function or method and can't be invoked.
 //   list.safeFirst();
 //        ^^^^^^^^^
 //
-// pkg/front_end/testcases/extensions/issue40713.dart:24:18: Error: Too few positional arguments: 1 required, 0 given.
+// pkg/front_end/testcases/extensions/issue40713.dart:26:18: Error: Too few positional arguments: 1 required, 0 given.
 //   list2.safeFirst();
 //                  ^
 //
@@ -28,11 +28,11 @@
 }
 static method errors() → void {
   final core::List<core::Object*>* list = core::_GrowableList::•<core::Object*>(0);
-  invalid-expression "pkg/front_end/testcases/extensions/issue40713.dart:22:8: Error: 'safeFirst' isn't a function or method and can't be invoked.
+  invalid-expression "pkg/front_end/testcases/extensions/issue40713.dart:24:8: Error: 'safeFirst' isn't a function or method and can't be invoked.
   list.safeFirst();
        ^^^^^^^^^" in self::SafeAccess|get#safeFirst<core::Object*>(list){<unresolved>}.call();
   final core::List<(core::int*) →* void>* list2 = core::_GrowableList::•<(core::int*) →* void>(0);
-  invalid-expression "pkg/front_end/testcases/extensions/issue40713.dart:24:18: Error: Too few positional arguments: 1 required, 0 given.
+  invalid-expression "pkg/front_end/testcases/extensions/issue40713.dart:26:18: Error: Too few positional arguments: 1 required, 0 given.
   list2.safeFirst();
                  ^" in self::SafeAccess|get#safeFirst<(core::int*) →* void>(list2){<inapplicable>}.();
 }
diff --git a/pkg/front_end/testcases/extensions/issue40713_2.dart b/pkg/front_end/testcases/extensions/issue40713_2.dart
new file mode 100644
index 0000000..0c5438d
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/issue40713_2.dart
@@ -0,0 +1,25 @@
+// 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 SafeAccess<T> on Iterable<T> {
+  T get safeFirst {
+    return isNotEmpty ? first : throw '';
+  }
+}
+
+main() {}
+
+void test() {
+  final list = [];
+  list.safeFirst();
+  final list2 = <void Function(int)>[];
+  list2.safeFirst(0);
+}
+
+void errors() {
+  final list = <Object>[];
+  list.safeFirst();
+  final list2 = <void Function(int)>[];
+  list2.safeFirst();
+}
diff --git a/pkg/front_end/testcases/extensions/issue40713_2.dart.textual_outline.expect b/pkg/front_end/testcases/extensions/issue40713_2.dart.textual_outline.expect
new file mode 100644
index 0000000..86e8aaa
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/issue40713_2.dart.textual_outline.expect
@@ -0,0 +1,7 @@
+extension SafeAccess<T> on Iterable<T> {
+  T get safeFirst {}
+}
+
+main() {}
+void test() {}
+void errors() {}
diff --git a/pkg/front_end/testcases/extensions/issue40713_2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/extensions/issue40713_2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..b4b03d34
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/issue40713_2.dart.textual_outline_modelled.expect
@@ -0,0 +1,7 @@
+extension SafeAccess<T> on Iterable<T> {
+  T get safeFirst {}
+}
+
+main() {}
+void errors() {}
+void test() {}
diff --git a/pkg/front_end/testcases/extensions/issue40713_2.dart.weak.expect b/pkg/front_end/testcases/extensions/issue40713_2.dart.weak.expect
new file mode 100644
index 0000000..c28459e
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/issue40713_2.dart.weak.expect
@@ -0,0 +1,38 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extensions/issue40713_2.dart:22:8: Error: 'safeFirst' isn't a function or method and can't be invoked.
+//   list.safeFirst();
+//        ^^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/issue40713_2.dart:24:18: Error: Too few positional arguments: 1 required, 0 given.
+//   list2.safeFirst();
+//                  ^
+//
+import self as self;
+import "dart:core" as core;
+
+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>(lowered final core::Iterable<self::SafeAccess|get#safeFirst::T%> #this) → self::SafeAccess|get#safeFirst::T% {
+  return #this.{core::Iterable::isNotEmpty}{core::bool} ?{self::SafeAccess|get#safeFirst::T%} #this.{core::Iterable::first}{self::SafeAccess|get#safeFirst::T%} : throw "";
+}
+static method main() → dynamic {}
+static method test() → void {
+  final core::List<dynamic> list = <dynamic>[];
+  self::SafeAccess|get#safeFirst<dynamic>(list){dynamic}.call();
+  final core::List<(core::int) → void> list2 = <(core::int) → void>[];
+  self::SafeAccess|get#safeFirst<(core::int) → void>(list2)(0){(core::int) → void};
+}
+static method errors() → void {
+  final core::List<core::Object> list = <core::Object>[];
+  invalid-expression "pkg/front_end/testcases/extensions/issue40713_2.dart:22:8: Error: 'safeFirst' isn't a function or method and can't be invoked.
+  list.safeFirst();
+       ^^^^^^^^^" in self::SafeAccess|get#safeFirst<core::Object>(list){<unresolved>}.call();
+  final core::List<(core::int) → void> list2 = <(core::int) → void>[];
+  invalid-expression "pkg/front_end/testcases/extensions/issue40713_2.dart:24:18: Error: Too few positional arguments: 1 required, 0 given.
+  list2.safeFirst();
+                 ^" in self::SafeAccess|get#safeFirst<(core::int) → void>(list2){<inapplicable>}.();
+}
diff --git a/pkg/front_end/testcases/extensions/issue40713_2.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/issue40713_2.dart.weak.modular.expect
new file mode 100644
index 0000000..c28459e
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/issue40713_2.dart.weak.modular.expect
@@ -0,0 +1,38 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extensions/issue40713_2.dart:22:8: Error: 'safeFirst' isn't a function or method and can't be invoked.
+//   list.safeFirst();
+//        ^^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/issue40713_2.dart:24:18: Error: Too few positional arguments: 1 required, 0 given.
+//   list2.safeFirst();
+//                  ^
+//
+import self as self;
+import "dart:core" as core;
+
+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>(lowered final core::Iterable<self::SafeAccess|get#safeFirst::T%> #this) → self::SafeAccess|get#safeFirst::T% {
+  return #this.{core::Iterable::isNotEmpty}{core::bool} ?{self::SafeAccess|get#safeFirst::T%} #this.{core::Iterable::first}{self::SafeAccess|get#safeFirst::T%} : throw "";
+}
+static method main() → dynamic {}
+static method test() → void {
+  final core::List<dynamic> list = <dynamic>[];
+  self::SafeAccess|get#safeFirst<dynamic>(list){dynamic}.call();
+  final core::List<(core::int) → void> list2 = <(core::int) → void>[];
+  self::SafeAccess|get#safeFirst<(core::int) → void>(list2)(0){(core::int) → void};
+}
+static method errors() → void {
+  final core::List<core::Object> list = <core::Object>[];
+  invalid-expression "pkg/front_end/testcases/extensions/issue40713_2.dart:22:8: Error: 'safeFirst' isn't a function or method and can't be invoked.
+  list.safeFirst();
+       ^^^^^^^^^" in self::SafeAccess|get#safeFirst<core::Object>(list){<unresolved>}.call();
+  final core::List<(core::int) → void> list2 = <(core::int) → void>[];
+  invalid-expression "pkg/front_end/testcases/extensions/issue40713_2.dart:24:18: Error: Too few positional arguments: 1 required, 0 given.
+  list2.safeFirst();
+                 ^" in self::SafeAccess|get#safeFirst<(core::int) → void>(list2){<inapplicable>}.();
+}
diff --git a/pkg/front_end/testcases/extensions/issue40713_2.dart.weak.outline.expect b/pkg/front_end/testcases/extensions/issue40713_2.dart.weak.outline.expect
new file mode 100644
index 0000000..5e4f544
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/issue40713_2.dart.weak.outline.expect
@@ -0,0 +1,15 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+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>(lowered final core::Iterable<self::SafeAccess|get#safeFirst::T%> #this) → self::SafeAccess|get#safeFirst::T%
+  ;
+static method main() → dynamic
+  ;
+static method test() → void
+  ;
+static method errors() → void
+  ;
diff --git a/pkg/front_end/testcases/extensions/issue40713_2.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/issue40713_2.dart.weak.transformed.expect
new file mode 100644
index 0000000..4cb53ee
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/issue40713_2.dart.weak.transformed.expect
@@ -0,0 +1,38 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extensions/issue40713_2.dart:22:8: Error: 'safeFirst' isn't a function or method and can't be invoked.
+//   list.safeFirst();
+//        ^^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/issue40713_2.dart:24:18: Error: Too few positional arguments: 1 required, 0 given.
+//   list2.safeFirst();
+//                  ^
+//
+import self as self;
+import "dart:core" as core;
+
+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>(lowered final core::Iterable<self::SafeAccess|get#safeFirst::T%> #this) → self::SafeAccess|get#safeFirst::T% {
+  return #this.{core::Iterable::isNotEmpty}{core::bool} ?{self::SafeAccess|get#safeFirst::T%} #this.{core::Iterable::first}{self::SafeAccess|get#safeFirst::T%} : throw "";
+}
+static method main() → dynamic {}
+static method test() → void {
+  final core::List<dynamic> list = core::_GrowableList::•<dynamic>(0);
+  self::SafeAccess|get#safeFirst<dynamic>(list){dynamic}.call();
+  final core::List<(core::int) → void> list2 = core::_GrowableList::•<(core::int) → void>(0);
+  self::SafeAccess|get#safeFirst<(core::int) → void>(list2)(0){(core::int) → void};
+}
+static method errors() → void {
+  final core::List<core::Object> list = core::_GrowableList::•<core::Object>(0);
+  invalid-expression "pkg/front_end/testcases/extensions/issue40713_2.dart:22:8: Error: 'safeFirst' isn't a function or method and can't be invoked.
+  list.safeFirst();
+       ^^^^^^^^^" in self::SafeAccess|get#safeFirst<core::Object>(list){<unresolved>}.call();
+  final core::List<(core::int) → void> list2 = core::_GrowableList::•<(core::int) → void>(0);
+  invalid-expression "pkg/front_end/testcases/extensions/issue40713_2.dart:24:18: Error: Too few positional arguments: 1 required, 0 given.
+  list2.safeFirst();
+                 ^" in self::SafeAccess|get#safeFirst<(core::int) → void>(list2){<inapplicable>}.();
+}
diff --git a/pkg/front_end/testcases/extensions/issue40816.dart b/pkg/front_end/testcases/extensions/issue40816.dart
index 99ec5d2..9e85e2c 100644
--- a/pkg/front_end/testcases/extensions/issue40816.dart
+++ b/pkg/front_end/testcases/extensions/issue40816.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 class A {}
 
 class B {}
diff --git a/pkg/front_end/testcases/extensions/issue40816.dart.textual_outline.expect b/pkg/front_end/testcases/extensions/issue40816.dart.textual_outline.expect
index fe13f68..e806109 100644
--- a/pkg/front_end/testcases/extensions/issue40816.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/extensions/issue40816.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {}
 
 class B {}
diff --git a/pkg/front_end/testcases/extensions/issue40816.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/extensions/issue40816.dart.textual_outline_modelled.expect
index fe13f68..e806109 100644
--- a/pkg/front_end/testcases/extensions/issue40816.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/extensions/issue40816.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A {}
 
 class B {}
diff --git a/pkg/front_end/testcases/extensions/issue40816.dart.weak.expect b/pkg/front_end/testcases/extensions/issue40816.dart.weak.expect
index 70c933c..e0cb3c1 100644
--- a/pkg/front_end/testcases/extensions/issue40816.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/issue40816.dart.weak.expect
@@ -1,46 +1,26 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension _extension#0 on self::A* {
+extension _extension#0 on self::A {
   method foo = self::_extension#0|foo;
   tearoff foo = self::_extension#0|get#foo;
 }
-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 _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::•();
   dynamic b = new self::B::•();
-  self::_extension#0|foo(new self::A::•(), a as{TypeError,ForDynamic} self::A*, b as{TypeError,ForDynamic} self::B*);
+  self::_extension#0|foo(new self::A::•(), a as{TypeError,ForDynamic,ForNonNullableByDefault} self::A, b as{TypeError,ForDynamic,ForNonNullableByDefault} self::B);
 }
diff --git a/pkg/front_end/testcases/extensions/issue40816.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/issue40816.dart.weak.modular.expect
index 70c933c..e0cb3c1 100644
--- a/pkg/front_end/testcases/extensions/issue40816.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/extensions/issue40816.dart.weak.modular.expect
@@ -1,46 +1,26 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension _extension#0 on self::A* {
+extension _extension#0 on self::A {
   method foo = self::_extension#0|foo;
   tearoff foo = self::_extension#0|get#foo;
 }
-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 _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::•();
   dynamic b = new self::B::•();
-  self::_extension#0|foo(new self::A::•(), a as{TypeError,ForDynamic} self::A*, b as{TypeError,ForDynamic} self::B*);
+  self::_extension#0|foo(new self::A::•(), a as{TypeError,ForDynamic,ForNonNullableByDefault} self::A, b as{TypeError,ForDynamic,ForNonNullableByDefault} self::B);
 }
diff --git a/pkg/front_end/testcases/extensions/issue40816.dart.weak.outline.expect b/pkg/front_end/testcases/extensions/issue40816.dart.weak.outline.expect
index 6bf9120..bbbf904 100644
--- a/pkg/front_end/testcases/extensions/issue40816.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extensions/issue40816.dart.weak.outline.expect
@@ -1,42 +1,22 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension _extension#0 on self::A* {
+extension _extension#0 on self::A {
   method foo = self::_extension#0|foo;
   tearoff foo = self::_extension#0|get#foo;
 }
-static method _extension#0|foo(lowered 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(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 _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.weak.transformed.expect b/pkg/front_end/testcases/extensions/issue40816.dart.weak.transformed.expect
index 70c933c..e0cb3c1 100644
--- a/pkg/front_end/testcases/extensions/issue40816.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/issue40816.dart.weak.transformed.expect
@@ -1,46 +1,26 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A extends core::Object {
-  synthetic constructor •() → self::A*
+  synthetic constructor •() → self::A
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class B extends core::Object {
-  synthetic constructor •() → self::B*
+  synthetic constructor •() → self::B
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension _extension#0 on self::A* {
+extension _extension#0 on self::A {
   method foo = self::_extension#0|foo;
   tearoff foo = self::_extension#0|get#foo;
 }
-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 _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::•();
   dynamic b = new self::B::•();
-  self::_extension#0|foo(new self::A::•(), a as{TypeError,ForDynamic} self::A*, b as{TypeError,ForDynamic} self::B*);
+  self::_extension#0|foo(new self::A::•(), a as{TypeError,ForDynamic,ForNonNullableByDefault} self::A, b as{TypeError,ForDynamic,ForNonNullableByDefault} self::B);
 }
diff --git a/pkg/front_end/testcases/extensions/issue43218.dart b/pkg/front_end/testcases/extensions/issue43218.dart
index d90e5cf..fa413a6 100644
--- a/pkg/front_end/testcases/extensions/issue43218.dart
+++ b/pkg/front_end/testcases/extensions/issue43218.dart
@@ -1,7 +1,7 @@
 // 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.
-// @dart=2.9
+
 class C {
   int value;
   C() : value = 0 {}
diff --git a/pkg/front_end/testcases/extensions/issue43218.dart.textual_outline.expect b/pkg/front_end/testcases/extensions/issue43218.dart.textual_outline.expect
index 6774e67..c3323e8 100644
--- a/pkg/front_end/testcases/extensions/issue43218.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/extensions/issue43218.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class C {
   int value;
   C() : value = 0 {}
diff --git a/pkg/front_end/testcases/extensions/issue43218.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/extensions/issue43218.dart.textual_outline_modelled.expect
index 1579e1d..6c5f1e6 100644
--- a/pkg/front_end/testcases/extensions/issue43218.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/extensions/issue43218.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class C {
   C() : value = 0 {}
   init() {}
diff --git a/pkg/front_end/testcases/extensions/issue43218.dart.weak.expect b/pkg/front_end/testcases/extensions/issue43218.dart.weak.expect
index 8f03ff9..17263b6 100644
--- a/pkg/front_end/testcases/extensions/issue43218.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/issue43218.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -11,38 +11,28 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  field core::int* value;
-  constructor •() → self::C*
+  field core::int value;
+  constructor •() → self::C
     : self::C::value = 0, super core::Object::•() {}
   method init() → dynamic {
     this.{self::C::value} = 0;
   }
-  get id() → core::int*
-    return this.{self::C::value}{core::int*};
-  set id(core::int* v) → void {
+  get id() → core::int
+    return this.{self::C::value}{core::int};
+  set id(core::int v) → void {
     this.{self::C::value} = v;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension Ext on self::C* {
+extension Ext on self::C {
   get id = self::Ext|get#id;
 }
-static method Ext|get#id(lowered final self::C* #this) → core::int*
-  return #this.{self::C::value}{core::int*}.{core::num::+}(1){(core::num*) →* core::int*};
+static method Ext|get#id(lowered final self::C #this) → core::int
+  return #this.{self::C::value}{core::int}.{core::num::+}(1){(core::num) → core::int};
 static method test() → dynamic {
-  self::C* c = new self::C::•();
-  let final self::C* #t1 = c in invalid-expression "pkg/front_end/testcases/extensions/issue43218.dart:24:10: Error: The setter 'id' isn't defined for the class 'int'.
+  self::C c = new self::C::•();
+  let final self::C #t1 = c in invalid-expression "pkg/front_end/testcases/extensions/issue43218.dart:24:10: Error: The setter 'id' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'id'.
   Ext(c).id++;
-         ^^" in #t1{<unresolved>}.id = self::Ext|get#id(#t1).{core::num::+}(1){(core::num*) →* core::int*};
+         ^^" in #t1{<unresolved>}.id = self::Ext|get#id(#t1).{core::num::+}(1){(core::num) → core::int};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extensions/issue43218.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/issue43218.dart.weak.modular.expect
index 8f03ff9..17263b6 100644
--- a/pkg/front_end/testcases/extensions/issue43218.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/extensions/issue43218.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -11,38 +11,28 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  field core::int* value;
-  constructor •() → self::C*
+  field core::int value;
+  constructor •() → self::C
     : self::C::value = 0, super core::Object::•() {}
   method init() → dynamic {
     this.{self::C::value} = 0;
   }
-  get id() → core::int*
-    return this.{self::C::value}{core::int*};
-  set id(core::int* v) → void {
+  get id() → core::int
+    return this.{self::C::value}{core::int};
+  set id(core::int v) → void {
     this.{self::C::value} = v;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension Ext on self::C* {
+extension Ext on self::C {
   get id = self::Ext|get#id;
 }
-static method Ext|get#id(lowered final self::C* #this) → core::int*
-  return #this.{self::C::value}{core::int*}.{core::num::+}(1){(core::num*) →* core::int*};
+static method Ext|get#id(lowered final self::C #this) → core::int
+  return #this.{self::C::value}{core::int}.{core::num::+}(1){(core::num) → core::int};
 static method test() → dynamic {
-  self::C* c = new self::C::•();
-  let final self::C* #t1 = c in invalid-expression "pkg/front_end/testcases/extensions/issue43218.dart:24:10: Error: The setter 'id' isn't defined for the class 'int'.
+  self::C c = new self::C::•();
+  let final self::C #t1 = c in invalid-expression "pkg/front_end/testcases/extensions/issue43218.dart:24:10: Error: The setter 'id' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'id'.
   Ext(c).id++;
-         ^^" in #t1{<unresolved>}.id = self::Ext|get#id(#t1).{core::num::+}(1){(core::num*) →* core::int*};
+         ^^" in #t1{<unresolved>}.id = self::Ext|get#id(#t1).{core::num::+}(1){(core::num) → core::int};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extensions/issue43218.dart.weak.outline.expect b/pkg/front_end/testcases/extensions/issue43218.dart.weak.outline.expect
index 5ca5e4a..79fab71 100644
--- a/pkg/front_end/testcases/extensions/issue43218.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extensions/issue43218.dart.weak.outline.expect
@@ -1,32 +1,22 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class C extends core::Object {
-  field core::int* value;
-  constructor •() → self::C*
+  field core::int value;
+  constructor •() → self::C
     ;
   method init() → dynamic
     ;
-  get id() → core::int*
+  get id() → core::int
     ;
-  set id(core::int* v) → void
+  set id(core::int v) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension Ext on self::C* {
+extension Ext on self::C {
   get id = self::Ext|get#id;
 }
-static method Ext|get#id(lowered 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.weak.transformed.expect b/pkg/front_end/testcases/extensions/issue43218.dart.weak.transformed.expect
index 8f03ff9..17263b6 100644
--- a/pkg/front_end/testcases/extensions/issue43218.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/issue43218.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -11,38 +11,28 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  field core::int* value;
-  constructor •() → self::C*
+  field core::int value;
+  constructor •() → self::C
     : self::C::value = 0, super core::Object::•() {}
   method init() → dynamic {
     this.{self::C::value} = 0;
   }
-  get id() → core::int*
-    return this.{self::C::value}{core::int*};
-  set id(core::int* v) → void {
+  get id() → core::int
+    return this.{self::C::value}{core::int};
+  set id(core::int v) → void {
     this.{self::C::value} = v;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension Ext on self::C* {
+extension Ext on self::C {
   get id = self::Ext|get#id;
 }
-static method Ext|get#id(lowered final self::C* #this) → core::int*
-  return #this.{self::C::value}{core::int*}.{core::num::+}(1){(core::num*) →* core::int*};
+static method Ext|get#id(lowered final self::C #this) → core::int
+  return #this.{self::C::value}{core::int}.{core::num::+}(1){(core::num) → core::int};
 static method test() → dynamic {
-  self::C* c = new self::C::•();
-  let final self::C* #t1 = c in invalid-expression "pkg/front_end/testcases/extensions/issue43218.dart:24:10: Error: The setter 'id' isn't defined for the class 'int'.
+  self::C c = new self::C::•();
+  let final self::C #t1 = c in invalid-expression "pkg/front_end/testcases/extensions/issue43218.dart:24:10: Error: The setter 'id' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'id'.
   Ext(c).id++;
-         ^^" in #t1{<unresolved>}.id = self::Ext|get#id(#t1).{core::num::+}(1){(core::num*) →* core::int*};
+         ^^" in #t1{<unresolved>}.id = self::Ext|get#id(#t1).{core::num::+}(1){(core::num) → core::int};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extensions/issue44003.dart b/pkg/front_end/testcases/extensions/issue44003.dart
index 01c1fe6..a7a25ed 100644
--- a/pkg/front_end/testcases/extensions/issue44003.dart
+++ b/pkg/front_end/testcases/extensions/issue44003.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 void test(List<String> args) {
   args.foo('1', 2);
 }
diff --git a/pkg/front_end/testcases/extensions/issue44003.dart.textual_outline.expect b/pkg/front_end/testcases/extensions/issue44003.dart.textual_outline.expect
index c8476d8..c57b097 100644
--- a/pkg/front_end/testcases/extensions/issue44003.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/extensions/issue44003.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 void test(List<String> args) {}
 
 extension on List<String> {
diff --git a/pkg/front_end/testcases/extensions/issue44003.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/extensions/issue44003.dart.textual_outline_modelled.expect
index 72ed5d4..47d69a0 100644
--- a/pkg/front_end/testcases/extensions/issue44003.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/extensions/issue44003.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 extension on List<String> {
   void foo(String bar) {}
   void foo(String baz, int a) {}
diff --git a/pkg/front_end/testcases/extensions/issue44003.dart.weak.expect b/pkg/front_end/testcases/extensions/issue44003.dart.weak.expect
index a8d4f63..9d6b12e 100644
--- a/pkg/front_end/testcases/extensions/issue44003.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/issue44003.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -18,20 +18,20 @@
 import self as self;
 import "dart:core" as core;
 
-extension _extension#0 on core::List<core::String*>* {
+extension _extension#0 on core::List<core::String> {
   method foo = self::_extension#0|foo;
   tearoff foo = self::_extension#0|get#foo;
 }
-static method test(core::List<core::String*>* args) → void {
+static method test(core::List<core::String> args) → void {
   invalid-expression "pkg/front_end/testcases/extensions/issue44003.dart:6:8: Error: The method 'foo' isn't defined for the class 'List<String>'.
  - 'List' is from 'dart:core'.
 Try correcting the name to the name of an existing method, or defining a method named 'foo'.
   args.foo('1', 2);
        ^^^" in args{<unresolved>}.foo("1", 2);
 }
-static method _extension#0|foo(lowered final core::List<core::String*>* #this, core::String* bar) → void {
+static method _extension#0|foo(lowered final core::List<core::String> #this, core::String bar) → void {
   core::print(1);
 }
-static method _extension#0|get#foo(lowered final core::List<core::String*>* #this) → (core::String*) →* void
-  return (core::String* bar) → void => self::_extension#0|foo(#this, bar);
+static method _extension#0|get#foo(lowered final core::List<core::String> #this) → (core::String) → void
+  return (core::String bar) → void => self::_extension#0|foo(#this, bar);
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extensions/issue44003.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/issue44003.dart.weak.modular.expect
index a8d4f63..9d6b12e 100644
--- a/pkg/front_end/testcases/extensions/issue44003.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/extensions/issue44003.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -18,20 +18,20 @@
 import self as self;
 import "dart:core" as core;
 
-extension _extension#0 on core::List<core::String*>* {
+extension _extension#0 on core::List<core::String> {
   method foo = self::_extension#0|foo;
   tearoff foo = self::_extension#0|get#foo;
 }
-static method test(core::List<core::String*>* args) → void {
+static method test(core::List<core::String> args) → void {
   invalid-expression "pkg/front_end/testcases/extensions/issue44003.dart:6:8: Error: The method 'foo' isn't defined for the class 'List<String>'.
  - 'List' is from 'dart:core'.
 Try correcting the name to the name of an existing method, or defining a method named 'foo'.
   args.foo('1', 2);
        ^^^" in args{<unresolved>}.foo("1", 2);
 }
-static method _extension#0|foo(lowered final core::List<core::String*>* #this, core::String* bar) → void {
+static method _extension#0|foo(lowered final core::List<core::String> #this, core::String bar) → void {
   core::print(1);
 }
-static method _extension#0|get#foo(lowered final core::List<core::String*>* #this) → (core::String*) →* void
-  return (core::String* bar) → void => self::_extension#0|foo(#this, bar);
+static method _extension#0|get#foo(lowered final core::List<core::String> #this) → (core::String) → void
+  return (core::String bar) → void => self::_extension#0|foo(#this, bar);
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extensions/issue44003.dart.weak.outline.expect b/pkg/front_end/testcases/extensions/issue44003.dart.weak.outline.expect
index 59eaf76..13d2504 100644
--- a/pkg/front_end/testcases/extensions/issue44003.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extensions/issue44003.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -12,15 +12,15 @@
 import self as self;
 import "dart:core" as core;
 
-extension _extension#0 on core::List<core::String*>* {
+extension _extension#0 on core::List<core::String> {
   method foo = self::_extension#0|foo;
   tearoff foo = self::_extension#0|get#foo;
 }
-static method test(core::List<core::String*>* args) → void
+static method test(core::List<core::String> args) → void
   ;
-static method _extension#0|foo(lowered final core::List<core::String*>* #this, core::String* bar) → void
+static method _extension#0|foo(lowered final core::List<core::String> #this, core::String bar) → void
   ;
-static method _extension#0|get#foo(lowered final core::List<core::String*>* #this) → (core::String*) →* void
-  return (core::String* bar) → void => self::_extension#0|foo(#this, bar);
+static method _extension#0|get#foo(lowered final core::List<core::String> #this) → (core::String) → void
+  return (core::String bar) → void => self::_extension#0|foo(#this, bar);
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/extensions/issue44003.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/issue44003.dart.weak.transformed.expect
index a8d4f63..9d6b12e 100644
--- a/pkg/front_end/testcases/extensions/issue44003.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/issue44003.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -18,20 +18,20 @@
 import self as self;
 import "dart:core" as core;
 
-extension _extension#0 on core::List<core::String*>* {
+extension _extension#0 on core::List<core::String> {
   method foo = self::_extension#0|foo;
   tearoff foo = self::_extension#0|get#foo;
 }
-static method test(core::List<core::String*>* args) → void {
+static method test(core::List<core::String> args) → void {
   invalid-expression "pkg/front_end/testcases/extensions/issue44003.dart:6:8: Error: The method 'foo' isn't defined for the class 'List<String>'.
  - 'List' is from 'dart:core'.
 Try correcting the name to the name of an existing method, or defining a method named 'foo'.
   args.foo('1', 2);
        ^^^" in args{<unresolved>}.foo("1", 2);
 }
-static method _extension#0|foo(lowered final core::List<core::String*>* #this, core::String* bar) → void {
+static method _extension#0|foo(lowered final core::List<core::String> #this, core::String bar) → void {
   core::print(1);
 }
-static method _extension#0|get#foo(lowered final core::List<core::String*>* #this) → (core::String*) →* void
-  return (core::String* bar) → void => self::_extension#0|foo(#this, bar);
+static method _extension#0|get#foo(lowered final core::List<core::String> #this) → (core::String) → void
+  return (core::String bar) → void => self::_extension#0|foo(#this, bar);
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extensions/issue44844.dart b/pkg/front_end/testcases/extensions/issue44844.dart
index afb96ca..14f590b 100644
--- a/pkg/front_end/testcases/extensions/issue44844.dart
+++ b/pkg/front_end/testcases/extensions/issue44844.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-// @dart=2.9
+
 extension on int {
   static int foo = 2;
   void foo() {}
diff --git a/pkg/front_end/testcases/extensions/issue44844.dart.textual_outline.expect b/pkg/front_end/testcases/extensions/issue44844.dart.textual_outline.expect
index 52d5738..53fe40b 100644
--- a/pkg/front_end/testcases/extensions/issue44844.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/extensions/issue44844.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 extension on int {
   static int foo = 2;
   void foo() {}
diff --git a/pkg/front_end/testcases/extensions/issue44844.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/extensions/issue44844.dart.textual_outline_modelled.expect
index 90a72cd..401a830 100644
--- a/pkg/front_end/testcases/extensions/issue44844.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/extensions/issue44844.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 extension on int {
   static int foo = 2;
   void foo() {}
diff --git a/pkg/front_end/testcases/extensions/issue44844.dart.weak.expect b/pkg/front_end/testcases/extensions/issue44844.dart.weak.expect
index 1a705d7..1066ec8 100644
--- a/pkg/front_end/testcases/extensions/issue44844.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/issue44844.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -17,10 +17,10 @@
 import self as self;
 import "dart:core" as core;
 
-extension _extension#0 on core::int* {
+extension _extension#0 on core::int {
   static field foo = self::_extension#0|foo;
 }
-static field core::int* _extension#0|foo;
+static field core::int _extension#0|foo;
 static method test() → void {
   invalid-expression "pkg/front_end/testcases/extensions/issue44844.dart:11:5: Error: The method 'foo' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing method, or defining a method named 'foo'.
diff --git a/pkg/front_end/testcases/extensions/issue44844.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/issue44844.dart.weak.modular.expect
index 1a705d7..1066ec8 100644
--- a/pkg/front_end/testcases/extensions/issue44844.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/extensions/issue44844.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -17,10 +17,10 @@
 import self as self;
 import "dart:core" as core;
 
-extension _extension#0 on core::int* {
+extension _extension#0 on core::int {
   static field foo = self::_extension#0|foo;
 }
-static field core::int* _extension#0|foo;
+static field core::int _extension#0|foo;
 static method test() → void {
   invalid-expression "pkg/front_end/testcases/extensions/issue44844.dart:11:5: Error: The method 'foo' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing method, or defining a method named 'foo'.
diff --git a/pkg/front_end/testcases/extensions/issue44844.dart.weak.outline.expect b/pkg/front_end/testcases/extensions/issue44844.dart.weak.outline.expect
index 33b1925..7c45f04 100644
--- a/pkg/front_end/testcases/extensions/issue44844.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extensions/issue44844.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -12,10 +12,10 @@
 import self as self;
 import "dart:core" as core;
 
-extension _extension#0 on core::int* {
+extension _extension#0 on core::int {
   static field foo = self::_extension#0|foo;
 }
-static field core::int* _extension#0|foo;
+static field core::int _extension#0|foo;
 static method test() → void
   ;
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/extensions/issue44844.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/issue44844.dart.weak.transformed.expect
index 1a705d7..1066ec8 100644
--- a/pkg/front_end/testcases/extensions/issue44844.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/issue44844.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -17,10 +17,10 @@
 import self as self;
 import "dart:core" as core;
 
-extension _extension#0 on core::int* {
+extension _extension#0 on core::int {
   static field foo = self::_extension#0|foo;
 }
-static field core::int* _extension#0|foo;
+static field core::int _extension#0|foo;
 static method test() → void {
   invalid-expression "pkg/front_end/testcases/extensions/issue44844.dart:11:5: Error: The method 'foo' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing method, or defining a method named 'foo'.
diff --git a/pkg/front_end/testcases/extensions/language_issue1182_2.dart b/pkg/front_end/testcases/extensions/language_issue1182_2.dart
new file mode 100644
index 0000000..c9d46c8
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/language_issue1182_2.dart
@@ -0,0 +1,15 @@
+// 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 Test<T> on T {
+  T Function(T) get test => (a) => this;
+}
+
+class Foo<S extends num> {
+  void test1(S x) {
+    S Function(S) f = x.test;
+  }
+}
+
+void main() {}
diff --git a/pkg/front_end/testcases/extensions/language_issue1182_2.dart.textual_outline.expect b/pkg/front_end/testcases/extensions/language_issue1182_2.dart.textual_outline.expect
new file mode 100644
index 0000000..5f989b2
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/language_issue1182_2.dart.textual_outline.expect
@@ -0,0 +1,9 @@
+extension Test<T> on T {
+  T Function(T) get test => (a) => this;
+}
+
+class Foo<S extends num> {
+  void test1(S x) {}
+}
+
+void main() {}
diff --git a/pkg/front_end/testcases/extensions/language_issue1182_2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/extensions/language_issue1182_2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..9aaf1c7
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/language_issue1182_2.dart.textual_outline_modelled.expect
@@ -0,0 +1,9 @@
+class Foo<S extends num> {
+  void test1(S x) {}
+}
+
+extension Test<T> on T {
+  T Function(T) get test => (a) => this;
+}
+
+void main() {}
diff --git a/pkg/front_end/testcases/extensions/language_issue1182_2.dart.weak.expect b/pkg/front_end/testcases/extensions/language_issue1182_2.dart.weak.expect
new file mode 100644
index 0000000..aa91968
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/language_issue1182_2.dart.weak.expect
@@ -0,0 +1,18 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Foo<S extends core::num> extends core::Object {
+  synthetic constructor •() → self::Foo<self::Foo::S>
+    : super core::Object::•()
+    ;
+  method test1(covariant-by-class self::Foo::S x) → void {
+    (self::Foo::S) → self::Foo::S f = self::Test|get#test<self::Foo::S>(x);
+  }
+}
+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>(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_2.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/language_issue1182_2.dart.weak.modular.expect
new file mode 100644
index 0000000..aa91968
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/language_issue1182_2.dart.weak.modular.expect
@@ -0,0 +1,18 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Foo<S extends core::num> extends core::Object {
+  synthetic constructor •() → self::Foo<self::Foo::S>
+    : super core::Object::•()
+    ;
+  method test1(covariant-by-class self::Foo::S x) → void {
+    (self::Foo::S) → self::Foo::S f = self::Test|get#test<self::Foo::S>(x);
+  }
+}
+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>(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_2.dart.weak.outline.expect b/pkg/front_end/testcases/extensions/language_issue1182_2.dart.weak.outline.expect
new file mode 100644
index 0000000..1431569
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/language_issue1182_2.dart.weak.outline.expect
@@ -0,0 +1,17 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Foo<S extends core::num> extends core::Object {
+  synthetic constructor •() → self::Foo<self::Foo::S>
+    ;
+  method test1(covariant-by-class self::Foo::S x) → void
+    ;
+}
+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>(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_2.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/language_issue1182_2.dart.weak.transformed.expect
new file mode 100644
index 0000000..aa91968
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/language_issue1182_2.dart.weak.transformed.expect
@@ -0,0 +1,18 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Foo<S extends core::num> extends core::Object {
+  synthetic constructor •() → self::Foo<self::Foo::S>
+    : super core::Object::•()
+    ;
+  method test1(covariant-by-class self::Foo::S x) → void {
+    (self::Foo::S) → self::Foo::S f = self::Test|get#test<self::Foo::S>(x);
+  }
+}
+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>(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 b/pkg/front_end/testcases/extensions/missing_toplevel.dart
index 2ccfeb9..2844255 100644
--- a/pkg/front_end/testcases/extensions/missing_toplevel.dart
+++ b/pkg/front_end/testcases/extensions/missing_toplevel.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2019, 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.
-// @dart=2.9
+
 class Class {}
 
 extension Extension on Class {
diff --git a/pkg/front_end/testcases/extensions/missing_toplevel.dart.textual_outline.expect b/pkg/front_end/testcases/extensions/missing_toplevel.dart.textual_outline.expect
index 6a82a61..83182ff 100644
--- a/pkg/front_end/testcases/extensions/missing_toplevel.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/extensions/missing_toplevel.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Class {}
 
 extension Extension on Class {
diff --git a/pkg/front_end/testcases/extensions/missing_toplevel.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/extensions/missing_toplevel.dart.textual_outline_modelled.expect
index 7cede08..94e9a17 100644
--- a/pkg/front_end/testcases/extensions/missing_toplevel.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/extensions/missing_toplevel.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Class {}
 
 extension Extension on Class {
diff --git a/pkg/front_end/testcases/extensions/missing_toplevel.dart.weak.expect b/pkg/front_end/testcases/extensions/missing_toplevel.dart.weak.expect
index 6d6179a..0aedef4 100644
--- a/pkg/front_end/testcases/extensions/missing_toplevel.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/missing_toplevel.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -12,28 +12,18 @@
 import "dart:core" as core;
 
 class Class extends core::Object {
-  synthetic constructor •() → self::Class*
+  synthetic constructor •() → self::Class
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension Extension on self::Class* {
+extension Extension on self::Class {
   set setter = self::Extension|set#setter;
 }
-static field self::Class* c = new self::Class::•();
-static field dynamic missingGetter = let final self::Class* #t1 = self::c in let final dynamic #t2 = invalid-expression "pkg/front_end/testcases/extensions/missing_toplevel.dart:13:23: Error: The getter 'setter' isn't defined for the class 'Class'.
+static field self::Class c = new self::Class::•();
+static field dynamic missingGetter = let final self::Class #t1 = self::c in let final dynamic #t2 = invalid-expression "pkg/front_end/testcases/extensions/missing_toplevel.dart:13:23: Error: The getter 'setter' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/extensions/missing_toplevel.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'setter'.
 var missingGetter = c.setter += 42;
-                      ^^^^^^" in #t1{<unresolved>}.setter{dynamic}.+(42) as{TypeError,ForDynamic} core::int* in let final void #t3 = self::Extension|set#setter(#t1, #t2) in #t2;
-static method Extension|set#setter(lowered final self::Class* #this, core::int* value) → void {}
+                      ^^^^^^" in #t1{<unresolved>}.setter{dynamic}.+(42) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int in let final void #t3 = self::Extension|set#setter(#t1, #t2) in #t2;
+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.weak.modular.expect b/pkg/front_end/testcases/extensions/missing_toplevel.dart.weak.modular.expect
index 6d6179a..0aedef4 100644
--- a/pkg/front_end/testcases/extensions/missing_toplevel.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/extensions/missing_toplevel.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -12,28 +12,18 @@
 import "dart:core" as core;
 
 class Class extends core::Object {
-  synthetic constructor •() → self::Class*
+  synthetic constructor •() → self::Class
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension Extension on self::Class* {
+extension Extension on self::Class {
   set setter = self::Extension|set#setter;
 }
-static field self::Class* c = new self::Class::•();
-static field dynamic missingGetter = let final self::Class* #t1 = self::c in let final dynamic #t2 = invalid-expression "pkg/front_end/testcases/extensions/missing_toplevel.dart:13:23: Error: The getter 'setter' isn't defined for the class 'Class'.
+static field self::Class c = new self::Class::•();
+static field dynamic missingGetter = let final self::Class #t1 = self::c in let final dynamic #t2 = invalid-expression "pkg/front_end/testcases/extensions/missing_toplevel.dart:13:23: Error: The getter 'setter' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/extensions/missing_toplevel.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'setter'.
 var missingGetter = c.setter += 42;
-                      ^^^^^^" in #t1{<unresolved>}.setter{dynamic}.+(42) as{TypeError,ForDynamic} core::int* in let final void #t3 = self::Extension|set#setter(#t1, #t2) in #t2;
-static method Extension|set#setter(lowered final self::Class* #this, core::int* value) → void {}
+                      ^^^^^^" in #t1{<unresolved>}.setter{dynamic}.+(42) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int in let final void #t3 = self::Extension|set#setter(#t1, #t2) in #t2;
+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.weak.outline.expect b/pkg/front_end/testcases/extensions/missing_toplevel.dart.weak.outline.expect
index 5cbfe17..543f0d1 100644
--- a/pkg/front_end/testcases/extensions/missing_toplevel.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extensions/missing_toplevel.dart.weak.outline.expect
@@ -1,27 +1,17 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Class extends core::Object {
-  synthetic constructor •() → self::Class*
+  synthetic constructor •() → self::Class
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension Extension on self::Class* {
+extension Extension on self::Class {
   set setter = self::Extension|set#setter;
 }
-static field self::Class* c;
+static field self::Class c;
 static field dynamic missingGetter;
-static method Extension|set#setter(lowered 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.weak.transformed.expect b/pkg/front_end/testcases/extensions/missing_toplevel.dart.weak.transformed.expect
index 29bae48..ff9cab9 100644
--- a/pkg/front_end/testcases/extensions/missing_toplevel.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/missing_toplevel.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -12,28 +12,18 @@
 import "dart:core" as core;
 
 class Class extends core::Object {
-  synthetic constructor •() → self::Class*
+  synthetic constructor •() → self::Class
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension Extension on self::Class* {
+extension Extension on self::Class {
   set setter = self::Extension|set#setter;
 }
-static field self::Class* c = new self::Class::•();
-static field dynamic missingGetter = let final self::Class* #t1 = self::c in let final core::int* #t2 = invalid-expression "pkg/front_end/testcases/extensions/missing_toplevel.dart:13:23: Error: The getter 'setter' isn't defined for the class 'Class'.
+static field self::Class c = new self::Class::•();
+static field dynamic missingGetter = let final self::Class #t1 = self::c in let final core::int #t2 = invalid-expression "pkg/front_end/testcases/extensions/missing_toplevel.dart:13:23: Error: The getter 'setter' isn't defined for the class 'Class'.
  - 'Class' is from 'pkg/front_end/testcases/extensions/missing_toplevel.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'setter'.
 var missingGetter = c.setter += 42;
-                      ^^^^^^" in #t1{<unresolved>}.setter{dynamic}.+(42) as{TypeError,ForDynamic} core::int* in let final void #t3 = self::Extension|set#setter(#t1, #t2) in #t2;
-static method Extension|set#setter(lowered final self::Class* #this, core::int* value) → void {}
+                      ^^^^^^" in #t1{<unresolved>}.setter{dynamic}.+(42) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int in let final void #t3 = self::Extension|set#setter(#t1, #t2) in #t2;
+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 b/pkg/front_end/testcases/extensions/nested_on_types.dart
index da3d2d7..f0cbdc1 100644
--- a/pkg/front_end/testcases/extensions/nested_on_types.dart
+++ b/pkg/front_end/testcases/extensions/nested_on_types.dart
@@ -2,8 +2,6 @@
 // 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.
 
-// @dart=2.9
-
 class A<T> {}
 
 extension Extension<T> on A<A<T>> {
diff --git a/pkg/front_end/testcases/extensions/nested_on_types.dart.textual_outline.expect b/pkg/front_end/testcases/extensions/nested_on_types.dart.textual_outline.expect
index fcdf4f1..8970b3e 100644
--- a/pkg/front_end/testcases/extensions/nested_on_types.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/extensions/nested_on_types.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A<T> {}
 
 extension Extension<T> on A<A<T>> {
diff --git a/pkg/front_end/testcases/extensions/nested_on_types.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/extensions/nested_on_types.dart.textual_outline_modelled.expect
index fcdf4f1..8970b3e 100644
--- a/pkg/front_end/testcases/extensions/nested_on_types.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/extensions/nested_on_types.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A<T> {}
 
 extension Extension<T> on A<A<T>> {
diff --git a/pkg/front_end/testcases/extensions/nested_on_types.dart.weak.expect b/pkg/front_end/testcases/extensions/nested_on_types.dart.weak.expect
index 001a0b6..b453ae6 100644
--- a/pkg/front_end/testcases/extensions/nested_on_types.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/nested_on_types.dart.weak.expect
@@ -1,32 +1,22 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension Extension<T extends core::Object* = dynamic> on self::A<self::A<T*>*>* {
+extension Extension<T extends core::Object? = dynamic> on self::A<self::A<T%>> {
   method method1 = self::Extension|method1;
   tearoff method1 = self::Extension|get#method1;
   method method2 = self::Extension|method2;
   tearoff method2 = self::Extension|get#method2;
 }
-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>(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 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>(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.weak.modular.expect b/pkg/front_end/testcases/extensions/nested_on_types.dart.weak.modular.expect
index 001a0b6..b453ae6 100644
--- a/pkg/front_end/testcases/extensions/nested_on_types.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/extensions/nested_on_types.dart.weak.modular.expect
@@ -1,32 +1,22 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension Extension<T extends core::Object* = dynamic> on self::A<self::A<T*>*>* {
+extension Extension<T extends core::Object? = dynamic> on self::A<self::A<T%>> {
   method method1 = self::Extension|method1;
   tearoff method1 = self::Extension|get#method1;
   method method2 = self::Extension|method2;
   tearoff method2 = self::Extension|get#method2;
 }
-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>(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 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>(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.weak.outline.expect b/pkg/front_end/testcases/extensions/nested_on_types.dart.weak.outline.expect
index b5fda8d..70c836a 100644
--- a/pkg/front_end/testcases/extensions/nested_on_types.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extensions/nested_on_types.dart.weak.outline.expect
@@ -1,34 +1,24 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension Extension<T extends core::Object* = dynamic> on self::A<self::A<T*>*>* {
+extension Extension<T extends core::Object? = dynamic> on self::A<self::A<T%>> {
   method method1 = self::Extension|method1;
   tearoff method1 = self::Extension|get#method1;
   method method2 = self::Extension|method2;
   tearoff method2 = self::Extension|get#method2;
 }
-static method Extension|method1<T extends core::Object* = dynamic>(lowered 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>(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>(lowered final self::A<self::A<self::Extension|method2::T*>*>* #this, self::Extension|method2::A* a) → 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>(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 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.weak.transformed.expect b/pkg/front_end/testcases/extensions/nested_on_types.dart.weak.transformed.expect
index 001a0b6..b453ae6 100644
--- a/pkg/front_end/testcases/extensions/nested_on_types.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/nested_on_types.dart.weak.transformed.expect
@@ -1,32 +1,22 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A<self::A::T*>*
+class A<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension Extension<T extends core::Object* = dynamic> on self::A<self::A<T*>*>* {
+extension Extension<T extends core::Object? = dynamic> on self::A<self::A<T%>> {
   method method1 = self::Extension|method1;
   tearoff method1 = self::Extension|get#method1;
   method method2 = self::Extension|method2;
   tearoff method2 = self::Extension|get#method2;
 }
-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>(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 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>(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 b/pkg/front_end/testcases/extensions/null_aware.dart
index 327f7b4..ec84183 100644
--- a/pkg/front_end/testcases/extensions/null_aware.dart
+++ b/pkg/front_end/testcases/extensions/null_aware.dart
@@ -1,7 +1,9 @@
 // Copyright (c) 2019, 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.
+
 // @dart=2.9
+
 class Class {
   int field;
 }
diff --git a/pkg/front_end/testcases/extensions/null_aware.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/null_aware.dart.weak.transformed.expect
index b635d6c..f82892b 100644
--- a/pkg/front_end/testcases/extensions/null_aware.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/null_aware.dart.weak.transformed.expect
@@ -88,28 +88,28 @@
 
 
 Extra constant evaluation status:
-Evaluated: VariableGet @ org-dartlang-testcase:///null_aware.dart:18:29 -> IntConstant(42)
-Evaluated: VariableGet @ org-dartlang-testcase:///null_aware.dart:18:29 -> IntConstant(42)
-Evaluated: VariableGet @ org-dartlang-testcase:///null_aware.dart:19:29 -> IntConstant(87)
-Evaluated: VariableGet @ org-dartlang-testcase:///null_aware.dart:19:29 -> IntConstant(87)
-Evaluated: VariableGet @ org-dartlang-testcase:///null_aware.dart:28:30 -> IntConstant(42)
-Evaluated: VariableGet @ org-dartlang-testcase:///null_aware.dart:28:30 -> IntConstant(42)
-Evaluated: VariableGet @ org-dartlang-testcase:///null_aware.dart:29:43 -> IntConstant(42)
-Evaluated: VariableGet @ org-dartlang-testcase:///null_aware.dart:29:43 -> IntConstant(42)
-Evaluated: VariableGet @ org-dartlang-testcase:///null_aware.dart:36:28 -> IntConstant(42)
-Evaluated: VariableGet @ org-dartlang-testcase:///null_aware.dart:36:28 -> IntConstant(42)
-Evaluated: VariableGet @ org-dartlang-testcase:///null_aware.dart:39:30 -> NullConstant(null)
-Evaluated: VariableGet @ org-dartlang-testcase:///null_aware.dart:39:30 -> NullConstant(null)
-Evaluated: VariableGet @ org-dartlang-testcase:///null_aware.dart:40:28 -> IntConstant(42)
-Evaluated: VariableGet @ org-dartlang-testcase:///null_aware.dart:40:28 -> IntConstant(42)
-Evaluated: VariableGet @ org-dartlang-testcase:///null_aware.dart:44:29 -> IntConstant(42)
-Evaluated: VariableGet @ org-dartlang-testcase:///null_aware.dart:44:29 -> IntConstant(42)
-Evaluated: VariableGet @ org-dartlang-testcase:///null_aware.dart:45:29 -> IntConstant(87)
-Evaluated: VariableGet @ org-dartlang-testcase:///null_aware.dart:45:29 -> IntConstant(87)
-Evaluated: VariableGet @ org-dartlang-testcase:///null_aware.dart:47:30 -> NullConstant(null)
-Evaluated: VariableGet @ org-dartlang-testcase:///null_aware.dart:47:30 -> NullConstant(null)
-Evaluated: VariableGet @ org-dartlang-testcase:///null_aware.dart:55:40 -> IntConstant(42)
-Evaluated: VariableGet @ org-dartlang-testcase:///null_aware.dart:55:40 -> IntConstant(42)
-Evaluated: VariableGet @ org-dartlang-testcase:///null_aware.dart:56:40 -> IntConstant(87)
-Evaluated: VariableGet @ org-dartlang-testcase:///null_aware.dart:56:40 -> IntConstant(87)
+Evaluated: VariableGet @ org-dartlang-testcase:///null_aware.dart:20:29 -> IntConstant(42)
+Evaluated: VariableGet @ org-dartlang-testcase:///null_aware.dart:20:29 -> IntConstant(42)
+Evaluated: VariableGet @ org-dartlang-testcase:///null_aware.dart:21:29 -> IntConstant(87)
+Evaluated: VariableGet @ org-dartlang-testcase:///null_aware.dart:21:29 -> IntConstant(87)
+Evaluated: VariableGet @ org-dartlang-testcase:///null_aware.dart:30:30 -> IntConstant(42)
+Evaluated: VariableGet @ org-dartlang-testcase:///null_aware.dart:30:30 -> IntConstant(42)
+Evaluated: VariableGet @ org-dartlang-testcase:///null_aware.dart:31:43 -> IntConstant(42)
+Evaluated: VariableGet @ org-dartlang-testcase:///null_aware.dart:31:43 -> IntConstant(42)
+Evaluated: VariableGet @ org-dartlang-testcase:///null_aware.dart:38:28 -> IntConstant(42)
+Evaluated: VariableGet @ org-dartlang-testcase:///null_aware.dart:38:28 -> IntConstant(42)
+Evaluated: VariableGet @ org-dartlang-testcase:///null_aware.dart:41:30 -> NullConstant(null)
+Evaluated: VariableGet @ org-dartlang-testcase:///null_aware.dart:41:30 -> NullConstant(null)
+Evaluated: VariableGet @ org-dartlang-testcase:///null_aware.dart:42:28 -> IntConstant(42)
+Evaluated: VariableGet @ org-dartlang-testcase:///null_aware.dart:42:28 -> IntConstant(42)
+Evaluated: VariableGet @ org-dartlang-testcase:///null_aware.dart:46:29 -> IntConstant(42)
+Evaluated: VariableGet @ org-dartlang-testcase:///null_aware.dart:46:29 -> IntConstant(42)
+Evaluated: VariableGet @ org-dartlang-testcase:///null_aware.dart:47:29 -> IntConstant(87)
+Evaluated: VariableGet @ org-dartlang-testcase:///null_aware.dart:47:29 -> IntConstant(87)
+Evaluated: VariableGet @ org-dartlang-testcase:///null_aware.dart:49:30 -> NullConstant(null)
+Evaluated: VariableGet @ org-dartlang-testcase:///null_aware.dart:49:30 -> NullConstant(null)
+Evaluated: VariableGet @ org-dartlang-testcase:///null_aware.dart:57:40 -> IntConstant(42)
+Evaluated: VariableGet @ org-dartlang-testcase:///null_aware.dart:57:40 -> IntConstant(42)
+Evaluated: VariableGet @ org-dartlang-testcase:///null_aware.dart:58:40 -> IntConstant(87)
+Evaluated: VariableGet @ org-dartlang-testcase:///null_aware.dart:58:40 -> IntConstant(87)
 Extra constant evaluation: evaluated: 368, effectively constant: 24
diff --git a/pkg/front_end/testcases/extensions/null_aware2.dart b/pkg/front_end/testcases/extensions/null_aware2.dart
new file mode 100644
index 0000000..1fe7d51
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/null_aware2.dart
@@ -0,0 +1,79 @@
+// Copyright (c) 2019, 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.
+
+class Class {
+  int? field;
+}
+
+extension Extension on Class {
+  int? get property => field;
+  void set property(int? value) {
+    field = value;
+  }
+
+  int? method() => field;
+
+  testImplicitThis() {
+    expect(null, property);
+    expect(42, property ??= 42);
+    expect(42, property ??= 87);
+  }
+}
+
+main() {
+  test1(null);
+  test2(new Class());
+}
+
+test1(Class? c) {
+  expect(null, c?.property);
+  expect(null, c?.method);
+  expect(null, c?.method());
+  expect(null, c?.property = 42);
+  expect(null, Extension(c)?.property ??= 42);
+}
+
+test2(Class? c) {
+  expect(null, c?.property);
+  expect(null, c?.method());
+  var tearOff = c?.method;
+  expect(null, tearOff!());
+  expect(42, c?.property = 42);
+  expect(42, tearOff());
+
+  expect(null, c?.property = null);
+  expect(42, c?.property = 42);
+
+  c?.property = null;
+  expect(null, c?.property);
+  expect(42, c?.property ??= 42);
+  expect(42, c?.property ??= 87);
+
+  expect(null, c?.property = null);
+  c?.property ??= 42;
+  expect(42, c?.property);
+  c?.property ??= 87;
+  expect(42, c?.property);
+
+  c?.property = null;
+  expect(null, c?.property);
+  expect(42, Extension(c)?.property ??= 42);
+  expect(42, Extension(c)?.property ??= 87);
+
+  c?.property = null;
+  expect(null, c?.property);
+  Extension(c)?.property ??= 42;
+  expect(42, c?.property);
+  Extension(c)?.property ??= 87;
+  expect(42, c?.property);
+
+  c?.property = null;
+  c?.testImplicitThis();
+}
+
+expect(expected, actual) {
+  if (expected != actual) {
+    throw 'Mismatch: expected=$expected, actual=$actual';
+  }
+}
diff --git a/pkg/front_end/testcases/extensions/null_aware2.dart.textual_outline.expect b/pkg/front_end/testcases/extensions/null_aware2.dart.textual_outline.expect
new file mode 100644
index 0000000..7668212
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/null_aware2.dart.textual_outline.expect
@@ -0,0 +1,15 @@
+class Class {
+  int? field;
+}
+
+extension Extension on Class {
+  int? get property => field;
+  void set property(int? value) {}
+  int? method() => field;
+  testImplicitThis() {}
+}
+
+main() {}
+test1(Class? c) {}
+test2(Class? c) {}
+expect(expected, actual) {}
diff --git a/pkg/front_end/testcases/extensions/null_aware2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/extensions/null_aware2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..5e3ddc5
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/null_aware2.dart.textual_outline_modelled.expect
@@ -0,0 +1,16 @@
+class Class {
+  int? field;
+}
+
+expect(expected, actual) {}
+
+extension Extension on Class {
+  int? get property => field;
+  int? method() => field;
+  testImplicitThis() {}
+  void set property(int? value) {}
+}
+
+main() {}
+test1(Class? c) {}
+test2(Class? c) {}
diff --git a/pkg/front_end/testcases/extensions/null_aware2.dart.weak.expect b/pkg/front_end/testcases/extensions/null_aware2.dart.weak.expect
new file mode 100644
index 0000000..b5e0fa1
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/null_aware2.dart.weak.expect
@@ -0,0 +1,81 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  field core::int? field = null;
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+}
+extension Extension on self::Class {
+  get property = self::Extension|get#property;
+  method method = self::Extension|method;
+  tearoff method = self::Extension|get#method;
+  method testImplicitThis = self::Extension|testImplicitThis;
+  tearoff testImplicitThis = self::Extension|get#testImplicitThis;
+  set property = self::Extension|set#property;
+}
+static method Extension|get#property(lowered final self::Class #this) → core::int?
+  return #this.{self::Class::field}{core::int?};
+static method Extension|set#property(lowered final self::Class #this, core::int? value) → void {
+  #this.{self::Class::field} = value;
+}
+static method Extension|method(lowered final self::Class #this) → core::int?
+  return #this.{self::Class::field}{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(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 == null ?{core::int} let final core::int #t2 = 42 in let final void #t3 = self::Extension|set#property(#this, #t2) in #t2 : #t1{core::int});
+  self::expect(42, let final core::int? #t4 = self::Extension|get#property(#this) in #t4 == null ?{core::int} let final core::int #t5 = 87 in let final void #t6 = self::Extension|set#property(#this, #t5) in #t5 : #t4{core::int});
+}
+static method Extension|get#testImplicitThis(lowered final self::Class #this) → () → dynamic
+  return () → dynamic => self::Extension|testImplicitThis(#this);
+static method main() → dynamic {
+  self::test1(null);
+  self::test2(new self::Class::•());
+}
+static method test1(self::Class? c) → dynamic {
+  self::expect(null, let final self::Class? #t7 = c in #t7 == null ?{core::int?} null : self::Extension|get#property(#t7{self::Class}));
+  self::expect(null, let final self::Class? #t8 = c in #t8 == null ?{() →? core::int?} null : self::Extension|get#method(#t8{self::Class}));
+  self::expect(null, let final self::Class? #t9 = c in #t9 == null ?{core::int?} null : self::Extension|method(#t9{self::Class}));
+  self::expect(null, let final self::Class? #t10 = c in #t10 == null ?{core::int?} null : let final core::int #t11 = 42 in let final void #t12 = self::Extension|set#property(#t10{self::Class}, #t11) in #t11);
+  self::expect(null, let final self::Class? #t13 = c in #t13 == null ?{core::int?} null : let final core::int? #t14 = self::Extension|get#property(#t13{self::Class}) in #t14 == null ?{core::int} let final core::int #t15 = 42 in let final void #t16 = self::Extension|set#property(#t13{self::Class}, #t15) in #t15 : #t14{core::int});
+}
+static method test2(self::Class? c) → dynamic {
+  self::expect(null, let final self::Class? #t17 = c in #t17 == null ?{core::int?} null : self::Extension|get#property(#t17{self::Class}));
+  self::expect(null, let final self::Class? #t18 = c in #t18 == null ?{core::int?} null : self::Extension|method(#t18{self::Class}));
+  () →? core::int? tearOff = let final self::Class? #t19 = c in #t19 == null ?{() →? core::int?} null : self::Extension|get#method(#t19{self::Class});
+  self::expect(null, tearOff!(){() → core::int?});
+  self::expect(42, let final self::Class? #t20 = c in #t20 == null ?{core::int?} null : let final core::int #t21 = 42 in let final void #t22 = self::Extension|set#property(#t20{self::Class}, #t21) in #t21);
+  self::expect(42, tearOff{() → core::int?}(){() → core::int?});
+  self::expect(null, let final self::Class? #t23 = c in #t23 == null ?{Null} null : let final has-declared-initializer Null #t24 = null in let final void #t25 = self::Extension|set#property(#t23{self::Class}, #t24) in #t24);
+  self::expect(42, let final self::Class? #t26 = c in #t26 == null ?{core::int?} null : let final core::int #t27 = 42 in let final void #t28 = self::Extension|set#property(#t26{self::Class}, #t27) in #t27);
+  let final self::Class? #t29 = c in #t29 == null ?{Null} null : self::Extension|set#property(#t29{self::Class}, null);
+  self::expect(null, let final self::Class? #t30 = c in #t30 == null ?{core::int?} null : self::Extension|get#property(#t30{self::Class}));
+  self::expect(42, let final self::Class? #t31 = c in #t31 == null ?{core::int?} null : let final core::int? #t32 = self::Extension|get#property(#t31) in #t32 == null ?{core::int} let final core::int #t33 = 42 in let final void #t34 = self::Extension|set#property(#t31, #t33) in #t33 : #t32{core::int});
+  self::expect(42, let final self::Class? #t35 = c in #t35 == null ?{core::int?} null : let final core::int? #t36 = self::Extension|get#property(#t35) in #t36 == null ?{core::int} let final core::int #t37 = 87 in let final void #t38 = self::Extension|set#property(#t35, #t37) in #t37 : #t36{core::int});
+  self::expect(null, let final self::Class? #t39 = c in #t39 == null ?{Null} null : let final has-declared-initializer Null #t40 = null in let final void #t41 = self::Extension|set#property(#t39{self::Class}, #t40) in #t40);
+  let final self::Class? #t42 = c in #t42 == null ?{core::int?} null : self::Extension|get#property(#t42) == null ?{core::int} self::Extension|set#property(#t42, 42) : null;
+  self::expect(42, let final self::Class? #t43 = c in #t43 == null ?{core::int?} null : self::Extension|get#property(#t43{self::Class}));
+  let final self::Class? #t44 = c in #t44 == null ?{core::int?} null : self::Extension|get#property(#t44) == null ?{core::int} self::Extension|set#property(#t44, 87) : null;
+  self::expect(42, let final self::Class? #t45 = c in #t45 == null ?{core::int?} null : self::Extension|get#property(#t45{self::Class}));
+  let final self::Class? #t46 = c in #t46 == null ?{Null} null : self::Extension|set#property(#t46{self::Class}, null);
+  self::expect(null, let final self::Class? #t47 = c in #t47 == null ?{core::int?} null : self::Extension|get#property(#t47{self::Class}));
+  self::expect(42, let final self::Class? #t48 = c in #t48 == null ?{core::int?} null : let final core::int? #t49 = self::Extension|get#property(#t48{self::Class}) in #t49 == null ?{core::int} let final core::int #t50 = 42 in let final void #t51 = self::Extension|set#property(#t48{self::Class}, #t50) in #t50 : #t49{core::int});
+  self::expect(42, let final self::Class? #t52 = c in #t52 == null ?{core::int?} null : let final core::int? #t53 = self::Extension|get#property(#t52{self::Class}) in #t53 == null ?{core::int} let final core::int #t54 = 87 in let final void #t55 = self::Extension|set#property(#t52{self::Class}, #t54) in #t54 : #t53{core::int});
+  let final self::Class? #t56 = c in #t56 == null ?{Null} null : self::Extension|set#property(#t56{self::Class}, null);
+  self::expect(null, let final self::Class? #t57 = c in #t57 == null ?{core::int?} null : self::Extension|get#property(#t57{self::Class}));
+  let final self::Class? #t58 = c in #t58 == null ?{core::int?} null : self::Extension|get#property(#t58{self::Class}) == null ?{core::int} self::Extension|set#property(#t58{self::Class}, 42) : null;
+  self::expect(42, let final self::Class? #t59 = c in #t59 == null ?{core::int?} null : self::Extension|get#property(#t59{self::Class}));
+  let final self::Class? #t60 = c in #t60 == null ?{core::int?} null : self::Extension|get#property(#t60{self::Class}) == null ?{core::int} self::Extension|set#property(#t60{self::Class}, 87) : null;
+  self::expect(42, let final self::Class? #t61 = c in #t61 == null ?{core::int?} null : self::Extension|get#property(#t61{self::Class}));
+  let final self::Class? #t62 = c in #t62 == null ?{Null} null : self::Extension|set#property(#t62{self::Class}, null);
+  let final self::Class? #t63 = c in #t63 == null ?{dynamic} null : self::Extension|testImplicitThis(#t63{self::Class});
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual)) {
+    throw "Mismatch: expected=${expected}, actual=${actual}";
+  }
+}
diff --git a/pkg/front_end/testcases/extensions/null_aware2.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/null_aware2.dart.weak.modular.expect
new file mode 100644
index 0000000..b5e0fa1
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/null_aware2.dart.weak.modular.expect
@@ -0,0 +1,81 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  field core::int? field = null;
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+}
+extension Extension on self::Class {
+  get property = self::Extension|get#property;
+  method method = self::Extension|method;
+  tearoff method = self::Extension|get#method;
+  method testImplicitThis = self::Extension|testImplicitThis;
+  tearoff testImplicitThis = self::Extension|get#testImplicitThis;
+  set property = self::Extension|set#property;
+}
+static method Extension|get#property(lowered final self::Class #this) → core::int?
+  return #this.{self::Class::field}{core::int?};
+static method Extension|set#property(lowered final self::Class #this, core::int? value) → void {
+  #this.{self::Class::field} = value;
+}
+static method Extension|method(lowered final self::Class #this) → core::int?
+  return #this.{self::Class::field}{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(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 == null ?{core::int} let final core::int #t2 = 42 in let final void #t3 = self::Extension|set#property(#this, #t2) in #t2 : #t1{core::int});
+  self::expect(42, let final core::int? #t4 = self::Extension|get#property(#this) in #t4 == null ?{core::int} let final core::int #t5 = 87 in let final void #t6 = self::Extension|set#property(#this, #t5) in #t5 : #t4{core::int});
+}
+static method Extension|get#testImplicitThis(lowered final self::Class #this) → () → dynamic
+  return () → dynamic => self::Extension|testImplicitThis(#this);
+static method main() → dynamic {
+  self::test1(null);
+  self::test2(new self::Class::•());
+}
+static method test1(self::Class? c) → dynamic {
+  self::expect(null, let final self::Class? #t7 = c in #t7 == null ?{core::int?} null : self::Extension|get#property(#t7{self::Class}));
+  self::expect(null, let final self::Class? #t8 = c in #t8 == null ?{() →? core::int?} null : self::Extension|get#method(#t8{self::Class}));
+  self::expect(null, let final self::Class? #t9 = c in #t9 == null ?{core::int?} null : self::Extension|method(#t9{self::Class}));
+  self::expect(null, let final self::Class? #t10 = c in #t10 == null ?{core::int?} null : let final core::int #t11 = 42 in let final void #t12 = self::Extension|set#property(#t10{self::Class}, #t11) in #t11);
+  self::expect(null, let final self::Class? #t13 = c in #t13 == null ?{core::int?} null : let final core::int? #t14 = self::Extension|get#property(#t13{self::Class}) in #t14 == null ?{core::int} let final core::int #t15 = 42 in let final void #t16 = self::Extension|set#property(#t13{self::Class}, #t15) in #t15 : #t14{core::int});
+}
+static method test2(self::Class? c) → dynamic {
+  self::expect(null, let final self::Class? #t17 = c in #t17 == null ?{core::int?} null : self::Extension|get#property(#t17{self::Class}));
+  self::expect(null, let final self::Class? #t18 = c in #t18 == null ?{core::int?} null : self::Extension|method(#t18{self::Class}));
+  () →? core::int? tearOff = let final self::Class? #t19 = c in #t19 == null ?{() →? core::int?} null : self::Extension|get#method(#t19{self::Class});
+  self::expect(null, tearOff!(){() → core::int?});
+  self::expect(42, let final self::Class? #t20 = c in #t20 == null ?{core::int?} null : let final core::int #t21 = 42 in let final void #t22 = self::Extension|set#property(#t20{self::Class}, #t21) in #t21);
+  self::expect(42, tearOff{() → core::int?}(){() → core::int?});
+  self::expect(null, let final self::Class? #t23 = c in #t23 == null ?{Null} null : let final has-declared-initializer Null #t24 = null in let final void #t25 = self::Extension|set#property(#t23{self::Class}, #t24) in #t24);
+  self::expect(42, let final self::Class? #t26 = c in #t26 == null ?{core::int?} null : let final core::int #t27 = 42 in let final void #t28 = self::Extension|set#property(#t26{self::Class}, #t27) in #t27);
+  let final self::Class? #t29 = c in #t29 == null ?{Null} null : self::Extension|set#property(#t29{self::Class}, null);
+  self::expect(null, let final self::Class? #t30 = c in #t30 == null ?{core::int?} null : self::Extension|get#property(#t30{self::Class}));
+  self::expect(42, let final self::Class? #t31 = c in #t31 == null ?{core::int?} null : let final core::int? #t32 = self::Extension|get#property(#t31) in #t32 == null ?{core::int} let final core::int #t33 = 42 in let final void #t34 = self::Extension|set#property(#t31, #t33) in #t33 : #t32{core::int});
+  self::expect(42, let final self::Class? #t35 = c in #t35 == null ?{core::int?} null : let final core::int? #t36 = self::Extension|get#property(#t35) in #t36 == null ?{core::int} let final core::int #t37 = 87 in let final void #t38 = self::Extension|set#property(#t35, #t37) in #t37 : #t36{core::int});
+  self::expect(null, let final self::Class? #t39 = c in #t39 == null ?{Null} null : let final has-declared-initializer Null #t40 = null in let final void #t41 = self::Extension|set#property(#t39{self::Class}, #t40) in #t40);
+  let final self::Class? #t42 = c in #t42 == null ?{core::int?} null : self::Extension|get#property(#t42) == null ?{core::int} self::Extension|set#property(#t42, 42) : null;
+  self::expect(42, let final self::Class? #t43 = c in #t43 == null ?{core::int?} null : self::Extension|get#property(#t43{self::Class}));
+  let final self::Class? #t44 = c in #t44 == null ?{core::int?} null : self::Extension|get#property(#t44) == null ?{core::int} self::Extension|set#property(#t44, 87) : null;
+  self::expect(42, let final self::Class? #t45 = c in #t45 == null ?{core::int?} null : self::Extension|get#property(#t45{self::Class}));
+  let final self::Class? #t46 = c in #t46 == null ?{Null} null : self::Extension|set#property(#t46{self::Class}, null);
+  self::expect(null, let final self::Class? #t47 = c in #t47 == null ?{core::int?} null : self::Extension|get#property(#t47{self::Class}));
+  self::expect(42, let final self::Class? #t48 = c in #t48 == null ?{core::int?} null : let final core::int? #t49 = self::Extension|get#property(#t48{self::Class}) in #t49 == null ?{core::int} let final core::int #t50 = 42 in let final void #t51 = self::Extension|set#property(#t48{self::Class}, #t50) in #t50 : #t49{core::int});
+  self::expect(42, let final self::Class? #t52 = c in #t52 == null ?{core::int?} null : let final core::int? #t53 = self::Extension|get#property(#t52{self::Class}) in #t53 == null ?{core::int} let final core::int #t54 = 87 in let final void #t55 = self::Extension|set#property(#t52{self::Class}, #t54) in #t54 : #t53{core::int});
+  let final self::Class? #t56 = c in #t56 == null ?{Null} null : self::Extension|set#property(#t56{self::Class}, null);
+  self::expect(null, let final self::Class? #t57 = c in #t57 == null ?{core::int?} null : self::Extension|get#property(#t57{self::Class}));
+  let final self::Class? #t58 = c in #t58 == null ?{core::int?} null : self::Extension|get#property(#t58{self::Class}) == null ?{core::int} self::Extension|set#property(#t58{self::Class}, 42) : null;
+  self::expect(42, let final self::Class? #t59 = c in #t59 == null ?{core::int?} null : self::Extension|get#property(#t59{self::Class}));
+  let final self::Class? #t60 = c in #t60 == null ?{core::int?} null : self::Extension|get#property(#t60{self::Class}) == null ?{core::int} self::Extension|set#property(#t60{self::Class}, 87) : null;
+  self::expect(42, let final self::Class? #t61 = c in #t61 == null ?{core::int?} null : self::Extension|get#property(#t61{self::Class}));
+  let final self::Class? #t62 = c in #t62 == null ?{Null} null : self::Extension|set#property(#t62{self::Class}, null);
+  let final self::Class? #t63 = c in #t63 == null ?{dynamic} null : self::Extension|testImplicitThis(#t63{self::Class});
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual)) {
+    throw "Mismatch: expected=${expected}, actual=${actual}";
+  }
+}
diff --git a/pkg/front_end/testcases/extensions/null_aware2.dart.weak.outline.expect b/pkg/front_end/testcases/extensions/null_aware2.dart.weak.outline.expect
new file mode 100644
index 0000000..235da44
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/null_aware2.dart.weak.outline.expect
@@ -0,0 +1,37 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  field core::int? field;
+  synthetic constructor •() → self::Class
+    ;
+}
+extension Extension on self::Class {
+  get property = self::Extension|get#property;
+  method method = self::Extension|method;
+  tearoff method = self::Extension|get#method;
+  method testImplicitThis = self::Extension|testImplicitThis;
+  tearoff testImplicitThis = self::Extension|get#testImplicitThis;
+  set property = self::Extension|set#property;
+}
+static method Extension|get#property(lowered final self::Class #this) → core::int?
+  ;
+static method Extension|set#property(lowered final self::Class #this, core::int? value) → void
+  ;
+static method Extension|method(lowered 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(lowered 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
+  ;
+static method test1(self::Class? c) → dynamic
+  ;
+static method test2(self::Class? c) → dynamic
+  ;
+static method expect(dynamic expected, dynamic actual) → dynamic
+  ;
diff --git a/pkg/front_end/testcases/extensions/null_aware2.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/null_aware2.dart.weak.transformed.expect
new file mode 100644
index 0000000..a927b20
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/null_aware2.dart.weak.transformed.expect
@@ -0,0 +1,109 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  field core::int? field = null;
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+}
+extension Extension on self::Class {
+  get property = self::Extension|get#property;
+  method method = self::Extension|method;
+  tearoff method = self::Extension|get#method;
+  method testImplicitThis = self::Extension|testImplicitThis;
+  tearoff testImplicitThis = self::Extension|get#testImplicitThis;
+  set property = self::Extension|set#property;
+}
+static method Extension|get#property(lowered final self::Class #this) → core::int?
+  return #this.{self::Class::field}{core::int?};
+static method Extension|set#property(lowered final self::Class #this, core::int? value) → void {
+  #this.{self::Class::field} = value;
+}
+static method Extension|method(lowered final self::Class #this) → core::int?
+  return #this.{self::Class::field}{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(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 == null ?{core::int} let final core::int #t2 = 42 in let final void #t3 = self::Extension|set#property(#this, #t2) in #t2 : #t1{core::int});
+  self::expect(42, let final core::int? #t4 = self::Extension|get#property(#this) in #t4 == null ?{core::int} let final core::int #t5 = 87 in let final void #t6 = self::Extension|set#property(#this, #t5) in #t5 : #t4{core::int});
+}
+static method Extension|get#testImplicitThis(lowered final self::Class #this) → () → dynamic
+  return () → dynamic => self::Extension|testImplicitThis(#this);
+static method main() → dynamic {
+  self::test1(null);
+  self::test2(new self::Class::•());
+}
+static method test1(self::Class? c) → dynamic {
+  self::expect(null, let final self::Class? #t7 = c in #t7 == null ?{core::int?} null : self::Extension|get#property(#t7{self::Class}));
+  self::expect(null, let final self::Class? #t8 = c in #t8 == null ?{() →? core::int?} null : self::Extension|get#method(#t8{self::Class}));
+  self::expect(null, let final self::Class? #t9 = c in #t9 == null ?{core::int?} null : self::Extension|method(#t9{self::Class}));
+  self::expect(null, let final self::Class? #t10 = c in #t10 == null ?{core::int?} null : let final core::int #t11 = 42 in let final void #t12 = self::Extension|set#property(#t10{self::Class}, #t11) in #t11);
+  self::expect(null, let final self::Class? #t13 = c in #t13 == null ?{core::int?} null : let final core::int? #t14 = self::Extension|get#property(#t13{self::Class}) in #t14 == null ?{core::int} let final core::int #t15 = 42 in let final void #t16 = self::Extension|set#property(#t13{self::Class}, #t15) in #t15 : #t14{core::int});
+}
+static method test2(self::Class? c) → dynamic {
+  self::expect(null, let final self::Class? #t17 = c in #t17 == null ?{core::int?} null : self::Extension|get#property(#t17{self::Class}));
+  self::expect(null, let final self::Class? #t18 = c in #t18 == null ?{core::int?} null : self::Extension|method(#t18{self::Class}));
+  () →? core::int? tearOff = let final self::Class? #t19 = c in #t19 == null ?{() →? core::int?} null : self::Extension|get#method(#t19{self::Class});
+  self::expect(null, tearOff!(){() → core::int?});
+  self::expect(42, let final self::Class? #t20 = c in #t20 == null ?{core::int?} null : let final core::int #t21 = 42 in let final void #t22 = self::Extension|set#property(#t20{self::Class}, #t21) in #t21);
+  self::expect(42, tearOff{() → core::int?}(){() → core::int?});
+  self::expect(null, let final self::Class? #t23 = c in #t23 == null ?{Null} null : let final has-declared-initializer Null #t24 = null in let final void #t25 = self::Extension|set#property(#t23{self::Class}, #t24) in #t24);
+  self::expect(42, let final self::Class? #t26 = c in #t26 == null ?{core::int?} null : let final core::int #t27 = 42 in let final void #t28 = self::Extension|set#property(#t26{self::Class}, #t27) in #t27);
+  let final self::Class? #t29 = c in #t29 == null ?{Null} null : self::Extension|set#property(#t29{self::Class}, null);
+  self::expect(null, let final self::Class? #t30 = c in #t30 == null ?{core::int?} null : self::Extension|get#property(#t30{self::Class}));
+  self::expect(42, let final self::Class? #t31 = c in #t31 == null ?{core::int?} null : let final core::int? #t32 = self::Extension|get#property(#t31) in #t32 == null ?{core::int} let final core::int #t33 = 42 in let final void #t34 = self::Extension|set#property(#t31, #t33) in #t33 : #t32{core::int});
+  self::expect(42, let final self::Class? #t35 = c in #t35 == null ?{core::int?} null : let final core::int? #t36 = self::Extension|get#property(#t35) in #t36 == null ?{core::int} let final core::int #t37 = 87 in let final void #t38 = self::Extension|set#property(#t35, #t37) in #t37 : #t36{core::int});
+  self::expect(null, let final self::Class? #t39 = c in #t39 == null ?{Null} null : let final has-declared-initializer Null #t40 = null in let final void #t41 = self::Extension|set#property(#t39{self::Class}, #t40) in #t40);
+  let final self::Class? #t42 = c in #t42 == null ?{core::int?} null : self::Extension|get#property(#t42) == null ?{core::int} self::Extension|set#property(#t42, 42) : null;
+  self::expect(42, let final self::Class? #t43 = c in #t43 == null ?{core::int?} null : self::Extension|get#property(#t43{self::Class}));
+  let final self::Class? #t44 = c in #t44 == null ?{core::int?} null : self::Extension|get#property(#t44) == null ?{core::int} self::Extension|set#property(#t44, 87) : null;
+  self::expect(42, let final self::Class? #t45 = c in #t45 == null ?{core::int?} null : self::Extension|get#property(#t45{self::Class}));
+  let final self::Class? #t46 = c in #t46 == null ?{Null} null : self::Extension|set#property(#t46{self::Class}, null);
+  self::expect(null, let final self::Class? #t47 = c in #t47 == null ?{core::int?} null : self::Extension|get#property(#t47{self::Class}));
+  self::expect(42, let final self::Class? #t48 = c in #t48 == null ?{core::int?} null : let final core::int? #t49 = self::Extension|get#property(#t48{self::Class}) in #t49 == null ?{core::int} let final core::int #t50 = 42 in let final void #t51 = self::Extension|set#property(#t48{self::Class}, #t50) in #t50 : #t49{core::int});
+  self::expect(42, let final self::Class? #t52 = c in #t52 == null ?{core::int?} null : let final core::int? #t53 = self::Extension|get#property(#t52{self::Class}) in #t53 == null ?{core::int} let final core::int #t54 = 87 in let final void #t55 = self::Extension|set#property(#t52{self::Class}, #t54) in #t54 : #t53{core::int});
+  let final self::Class? #t56 = c in #t56 == null ?{Null} null : self::Extension|set#property(#t56{self::Class}, null);
+  self::expect(null, let final self::Class? #t57 = c in #t57 == null ?{core::int?} null : self::Extension|get#property(#t57{self::Class}));
+  let final self::Class? #t58 = c in #t58 == null ?{core::int?} null : self::Extension|get#property(#t58{self::Class}) == null ?{core::int} self::Extension|set#property(#t58{self::Class}, 42) : null;
+  self::expect(42, let final self::Class? #t59 = c in #t59 == null ?{core::int?} null : self::Extension|get#property(#t59{self::Class}));
+  let final self::Class? #t60 = c in #t60 == null ?{core::int?} null : self::Extension|get#property(#t60{self::Class}) == null ?{core::int} self::Extension|set#property(#t60{self::Class}, 87) : null;
+  self::expect(42, let final self::Class? #t61 = c in #t61 == null ?{core::int?} null : self::Extension|get#property(#t61{self::Class}));
+  let final self::Class? #t62 = c in #t62 == null ?{Null} null : self::Extension|set#property(#t62{self::Class}, null);
+  let final self::Class? #t63 = c in #t63 == null ?{dynamic} null : self::Extension|testImplicitThis(#t63{self::Class});
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual)) {
+    throw "Mismatch: expected=${expected}, actual=${actual}";
+  }
+}
+
+
+Extra constant evaluation status:
+Evaluated: VariableGet @ org-dartlang-testcase:///null_aware2.dart:19:29 -> IntConstant(42)
+Evaluated: VariableGet @ org-dartlang-testcase:///null_aware2.dart:19:29 -> IntConstant(42)
+Evaluated: VariableGet @ org-dartlang-testcase:///null_aware2.dart:20:29 -> IntConstant(87)
+Evaluated: VariableGet @ org-dartlang-testcase:///null_aware2.dart:20:29 -> IntConstant(87)
+Evaluated: VariableGet @ org-dartlang-testcase:///null_aware2.dart:33:30 -> IntConstant(42)
+Evaluated: VariableGet @ org-dartlang-testcase:///null_aware2.dart:33:30 -> IntConstant(42)
+Evaluated: VariableGet @ org-dartlang-testcase:///null_aware2.dart:34:43 -> IntConstant(42)
+Evaluated: VariableGet @ org-dartlang-testcase:///null_aware2.dart:34:43 -> IntConstant(42)
+Evaluated: VariableGet @ org-dartlang-testcase:///null_aware2.dart:42:28 -> IntConstant(42)
+Evaluated: VariableGet @ org-dartlang-testcase:///null_aware2.dart:42:28 -> IntConstant(42)
+Evaluated: VariableGet @ org-dartlang-testcase:///null_aware2.dart:45:30 -> NullConstant(null)
+Evaluated: VariableGet @ org-dartlang-testcase:///null_aware2.dart:45:30 -> NullConstant(null)
+Evaluated: VariableGet @ org-dartlang-testcase:///null_aware2.dart:46:28 -> IntConstant(42)
+Evaluated: VariableGet @ org-dartlang-testcase:///null_aware2.dart:46:28 -> IntConstant(42)
+Evaluated: VariableGet @ org-dartlang-testcase:///null_aware2.dart:50:30 -> IntConstant(42)
+Evaluated: VariableGet @ org-dartlang-testcase:///null_aware2.dart:50:30 -> IntConstant(42)
+Evaluated: VariableGet @ org-dartlang-testcase:///null_aware2.dart:51:30 -> IntConstant(87)
+Evaluated: VariableGet @ org-dartlang-testcase:///null_aware2.dart:51:30 -> IntConstant(87)
+Evaluated: VariableGet @ org-dartlang-testcase:///null_aware2.dart:53:30 -> NullConstant(null)
+Evaluated: VariableGet @ org-dartlang-testcase:///null_aware2.dart:53:30 -> NullConstant(null)
+Evaluated: VariableGet @ org-dartlang-testcase:///null_aware2.dart:61:41 -> IntConstant(42)
+Evaluated: VariableGet @ org-dartlang-testcase:///null_aware2.dart:61:41 -> IntConstant(42)
+Evaluated: VariableGet @ org-dartlang-testcase:///null_aware2.dart:62:41 -> IntConstant(87)
+Evaluated: VariableGet @ org-dartlang-testcase:///null_aware2.dart:62:41 -> IntConstant(87)
+Extra constant evaluation: evaluated: 399, effectively constant: 24
diff --git a/pkg/front_end/testcases/extensions/on_function_type.dart b/pkg/front_end/testcases/extensions/on_function_type.dart
index d7f1522..b3e30d2 100644
--- a/pkg/front_end/testcases/extensions/on_function_type.dart
+++ b/pkg/front_end/testcases/extensions/on_function_type.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2019, 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.
-// @dart=2.9
+
 extension<R, T> on R Function(T) {
   Type get returnType => R;
   Type get parameterType => T;
diff --git a/pkg/front_end/testcases/extensions/on_function_type.dart.textual_outline.expect b/pkg/front_end/testcases/extensions/on_function_type.dart.textual_outline.expect
index ce9147e..7b1f078 100644
--- a/pkg/front_end/testcases/extensions/on_function_type.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/extensions/on_function_type.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 extension<R, T> on R Function(T) {
   Type get returnType => R;
   Type get parameterType => T;
diff --git a/pkg/front_end/testcases/extensions/on_function_type.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/extensions/on_function_type.dart.textual_outline_modelled.expect
index b40bc01..d84ff38 100644
--- a/pkg/front_end/testcases/extensions/on_function_type.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/extensions/on_function_type.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Class<T extends Class<T>> {}
 
 class Subclass extends Class<Subclass> {}
diff --git a/pkg/front_end/testcases/extensions/on_function_type.dart.weak.expect b/pkg/front_end/testcases/extensions/on_function_type.dart.weak.expect
index 7fd4a5b..1c1d9b9 100644
--- a/pkg/front_end/testcases/extensions/on_function_type.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/on_function_type.dart.weak.expect
@@ -1,46 +1,36 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class Class<T extends self::Class<self::Class::T*>* = self::Class<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::Class<self::Class::T*>*
+class Class<T extends self::Class<self::Class::T> = self::Class<dynamic>> extends core::Object {
+  synthetic constructor •() → self::Class<self::Class::T>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Subclass extends self::Class<self::Subclass*> {
-  synthetic constructor •() → self::Subclass*
+class Subclass extends self::Class<self::Subclass> {
+  synthetic constructor •() → self::Subclass
     : super self::Class::•()
     ;
 }
-extension _extension#0<R extends core::Object* = dynamic, T extends core::Object* = dynamic> on (T*) →* R* {
+extension _extension#0<R extends core::Object? = dynamic, T extends core::Object? = dynamic> on (T%) → R% {
   get returnType = self::_extension#0|get#returnType;
   get parameterType = self::_extension#0|get#parameterType;
 }
-extension _extension#1<T extends self::Class<T*>* = self::Class<dynamic>*> on <S extends T* = dynamic>(T*, S*) →* dynamic {
+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>(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>(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>*>(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 _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>(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>>(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*
+  function local1(core::int i) → core::int
     return i;
-  core::print(self::_extension#0|get#returnType<core::int*, core::int*>(local1));
-  core::print(self::_extension#0|get#parameterType<core::int*, core::int*>(local1));
-  function local2<S extends self::Subclass*>(self::Subclass* a, S* b) → self::Subclass*
+  core::print(self::_extension#0|get#returnType<core::int, core::int>(local1));
+  core::print(self::_extension#0|get#parameterType<core::int, core::int>(local1));
+  function local2<S extends self::Subclass>(self::Subclass a, S b) → self::Subclass
     return a;
-  core::print(self::_extension#1|get#parameterType<self::Subclass*>(local2));
+  core::print(self::_extension#1|get#parameterType<self::Subclass>(local2));
 }
diff --git a/pkg/front_end/testcases/extensions/on_function_type.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/on_function_type.dart.weak.modular.expect
index 7fd4a5b..1c1d9b9 100644
--- a/pkg/front_end/testcases/extensions/on_function_type.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/extensions/on_function_type.dart.weak.modular.expect
@@ -1,46 +1,36 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class Class<T extends self::Class<self::Class::T*>* = self::Class<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::Class<self::Class::T*>*
+class Class<T extends self::Class<self::Class::T> = self::Class<dynamic>> extends core::Object {
+  synthetic constructor •() → self::Class<self::Class::T>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Subclass extends self::Class<self::Subclass*> {
-  synthetic constructor •() → self::Subclass*
+class Subclass extends self::Class<self::Subclass> {
+  synthetic constructor •() → self::Subclass
     : super self::Class::•()
     ;
 }
-extension _extension#0<R extends core::Object* = dynamic, T extends core::Object* = dynamic> on (T*) →* R* {
+extension _extension#0<R extends core::Object? = dynamic, T extends core::Object? = dynamic> on (T%) → R% {
   get returnType = self::_extension#0|get#returnType;
   get parameterType = self::_extension#0|get#parameterType;
 }
-extension _extension#1<T extends self::Class<T*>* = self::Class<dynamic>*> on <S extends T* = dynamic>(T*, S*) →* dynamic {
+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>(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>(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>*>(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 _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>(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>>(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*
+  function local1(core::int i) → core::int
     return i;
-  core::print(self::_extension#0|get#returnType<core::int*, core::int*>(local1));
-  core::print(self::_extension#0|get#parameterType<core::int*, core::int*>(local1));
-  function local2<S extends self::Subclass*>(self::Subclass* a, S* b) → self::Subclass*
+  core::print(self::_extension#0|get#returnType<core::int, core::int>(local1));
+  core::print(self::_extension#0|get#parameterType<core::int, core::int>(local1));
+  function local2<S extends self::Subclass>(self::Subclass a, S b) → self::Subclass
     return a;
-  core::print(self::_extension#1|get#parameterType<self::Subclass*>(local2));
+  core::print(self::_extension#1|get#parameterType<self::Subclass>(local2));
 }
diff --git a/pkg/front_end/testcases/extensions/on_function_type.dart.weak.outline.expect b/pkg/front_end/testcases/extensions/on_function_type.dart.weak.outline.expect
index 3447999..c49b6a0 100644
--- a/pkg/front_end/testcases/extensions/on_function_type.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extensions/on_function_type.dart.weak.outline.expect
@@ -1,37 +1,27 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class Class<T extends self::Class<self::Class::T*>* = self::Class<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::Class<self::Class::T*>*
-    ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
-}
-class Subclass extends self::Class<self::Subclass*> {
-  synthetic constructor •() → self::Subclass*
+class Class<T extends self::Class<self::Class::T> = self::Class<dynamic>> extends core::Object {
+  synthetic constructor •() → self::Class<self::Class::T>
     ;
 }
-extension _extension#0<R extends core::Object* = dynamic, T extends core::Object* = dynamic> on (T*) →* R* {
+class Subclass extends self::Class<self::Subclass> {
+  synthetic constructor •() → self::Subclass
+    ;
+}
+extension _extension#0<R extends core::Object? = dynamic, T extends core::Object? = dynamic> on (T%) → R% {
   get returnType = self::_extension#0|get#returnType;
   get parameterType = self::_extension#0|get#parameterType;
 }
-extension _extension#1<T extends self::Class<T*>* = self::Class<dynamic>*> on <S extends T* = dynamic>(T*, S*) →* dynamic {
+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>(lowered 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>(lowered 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>*>(lowered 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.weak.transformed.expect b/pkg/front_end/testcases/extensions/on_function_type.dart.weak.transformed.expect
index 7fd4a5b..1c1d9b9 100644
--- a/pkg/front_end/testcases/extensions/on_function_type.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/on_function_type.dart.weak.transformed.expect
@@ -1,46 +1,36 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class Class<T extends self::Class<self::Class::T*>* = self::Class<dynamic>*> extends core::Object {
-  synthetic constructor •() → self::Class<self::Class::T*>*
+class Class<T extends self::Class<self::Class::T> = self::Class<dynamic>> extends core::Object {
+  synthetic constructor •() → self::Class<self::Class::T>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class Subclass extends self::Class<self::Subclass*> {
-  synthetic constructor •() → self::Subclass*
+class Subclass extends self::Class<self::Subclass> {
+  synthetic constructor •() → self::Subclass
     : super self::Class::•()
     ;
 }
-extension _extension#0<R extends core::Object* = dynamic, T extends core::Object* = dynamic> on (T*) →* R* {
+extension _extension#0<R extends core::Object? = dynamic, T extends core::Object? = dynamic> on (T%) → R% {
   get returnType = self::_extension#0|get#returnType;
   get parameterType = self::_extension#0|get#parameterType;
 }
-extension _extension#1<T extends self::Class<T*>* = self::Class<dynamic>*> on <S extends T* = dynamic>(T*, S*) →* dynamic {
+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>(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>(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>*>(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 _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>(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>>(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*
+  function local1(core::int i) → core::int
     return i;
-  core::print(self::_extension#0|get#returnType<core::int*, core::int*>(local1));
-  core::print(self::_extension#0|get#parameterType<core::int*, core::int*>(local1));
-  function local2<S extends self::Subclass*>(self::Subclass* a, S* b) → self::Subclass*
+  core::print(self::_extension#0|get#returnType<core::int, core::int>(local1));
+  core::print(self::_extension#0|get#parameterType<core::int, core::int>(local1));
+  function local2<S extends self::Subclass>(self::Subclass a, S b) → self::Subclass
     return a;
-  core::print(self::_extension#1|get#parameterType<self::Subclass*>(local2));
+  core::print(self::_extension#1|get#parameterType<self::Subclass>(local2));
 }
diff --git a/pkg/front_end/testcases/extensions/on_type_inference.dart b/pkg/front_end/testcases/extensions/on_type_inference.dart
index d2aaaf8..d81986c 100644
--- a/pkg/front_end/testcases/extensions/on_type_inference.dart
+++ b/pkg/front_end/testcases/extensions/on_type_inference.dart
@@ -1,7 +1,9 @@
 // Copyright (c) 2019, 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.
+
 // @dart=2.9
+
 extension BestCom<T extends num> on Iterable<T> {
   T best() => null;
 }
diff --git a/pkg/front_end/testcases/extensions/on_type_inference2.dart b/pkg/front_end/testcases/extensions/on_type_inference2.dart
new file mode 100644
index 0000000..cb372a0
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/on_type_inference2.dart
@@ -0,0 +1,22 @@
+// Copyright (c) 2019, 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 BestCom<T extends num> on Iterable<T>? {
+  T? best() => null;
+}
+
+extension BestList<T> on List<T> {
+  T? best() => null;
+}
+
+extension BestSpec on List<num> {
+  num? best() => null;
+}
+
+main() {
+  List<int>? x;
+  var v = x.best();
+  List<num>? y;
+  var w = y.best();
+}
diff --git a/pkg/front_end/testcases/extensions/on_type_inference2.dart.textual_outline.expect b/pkg/front_end/testcases/extensions/on_type_inference2.dart.textual_outline.expect
new file mode 100644
index 0000000..97b48a4
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/on_type_inference2.dart.textual_outline.expect
@@ -0,0 +1,13 @@
+extension BestCom<T extends num> on Iterable<T>? {
+  T? best() => null;
+}
+
+extension BestList<T> on List<T> {
+  T? best() => null;
+}
+
+extension BestSpec on List<num> {
+  num? best() => null;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/extensions/on_type_inference2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/extensions/on_type_inference2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..97b48a4
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/on_type_inference2.dart.textual_outline_modelled.expect
@@ -0,0 +1,13 @@
+extension BestCom<T extends num> on Iterable<T>? {
+  T? best() => null;
+}
+
+extension BestList<T> on List<T> {
+  T? best() => null;
+}
+
+extension BestSpec on List<num> {
+  num? best() => null;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/extensions/on_type_inference2.dart.weak.expect b/pkg/front_end/testcases/extensions/on_type_inference2.dart.weak.expect
new file mode 100644
index 0000000..2d94479
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/on_type_inference2.dart.weak.expect
@@ -0,0 +1,34 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+extension BestCom<T extends core::num> on core::Iterable<T>? {
+  method best = self::BestCom|best;
+  tearoff best = self::BestCom|get#best;
+}
+extension BestList<T extends core::Object? = dynamic> on core::List<T%> {
+  method best = self::BestList|best;
+  tearoff best = self::BestList|get#best;
+}
+extension BestSpec on core::List<core::num> {
+  method best = self::BestSpec|best;
+  tearoff best = self::BestSpec|get#best;
+}
+static method BestCom|best<T extends 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>(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>(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>(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(lowered final core::List<core::num> #this) → core::num?
+  return null;
+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;
+  core::int? v = self::BestCom|best<core::int>(x);
+  core::List<core::num>? y;
+  core::num? w = self::BestCom|best<core::num>(y);
+}
diff --git a/pkg/front_end/testcases/extensions/on_type_inference2.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/on_type_inference2.dart.weak.modular.expect
new file mode 100644
index 0000000..2d94479
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/on_type_inference2.dart.weak.modular.expect
@@ -0,0 +1,34 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+extension BestCom<T extends core::num> on core::Iterable<T>? {
+  method best = self::BestCom|best;
+  tearoff best = self::BestCom|get#best;
+}
+extension BestList<T extends core::Object? = dynamic> on core::List<T%> {
+  method best = self::BestList|best;
+  tearoff best = self::BestList|get#best;
+}
+extension BestSpec on core::List<core::num> {
+  method best = self::BestSpec|best;
+  tearoff best = self::BestSpec|get#best;
+}
+static method BestCom|best<T extends 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>(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>(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>(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(lowered final core::List<core::num> #this) → core::num?
+  return null;
+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;
+  core::int? v = self::BestCom|best<core::int>(x);
+  core::List<core::num>? y;
+  core::num? w = self::BestCom|best<core::num>(y);
+}
diff --git a/pkg/front_end/testcases/extensions/on_type_inference2.dart.weak.outline.expect b/pkg/front_end/testcases/extensions/on_type_inference2.dart.weak.outline.expect
new file mode 100644
index 0000000..12f465b
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/on_type_inference2.dart.weak.outline.expect
@@ -0,0 +1,30 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+extension BestCom<T extends core::num> on core::Iterable<T>? {
+  method best = self::BestCom|best;
+  tearoff best = self::BestCom|get#best;
+}
+extension BestList<T extends core::Object? = dynamic> on core::List<T%> {
+  method best = self::BestList|best;
+  tearoff best = self::BestList|get#best;
+}
+extension BestSpec on core::List<core::num> {
+  method best = self::BestSpec|best;
+  tearoff best = self::BestSpec|get#best;
+}
+static method BestCom|best<T extends core::num>(lowered final core::Iterable<self::BestCom|best::T>? #this) → self::BestCom|best::T?
+  ;
+static method BestCom|get#best<T extends 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>(lowered final core::List<self::BestList|best::T%> #this) → self::BestList|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(lowered 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_inference2.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/on_type_inference2.dart.weak.transformed.expect
new file mode 100644
index 0000000..2d94479
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/on_type_inference2.dart.weak.transformed.expect
@@ -0,0 +1,34 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+extension BestCom<T extends core::num> on core::Iterable<T>? {
+  method best = self::BestCom|best;
+  tearoff best = self::BestCom|get#best;
+}
+extension BestList<T extends core::Object? = dynamic> on core::List<T%> {
+  method best = self::BestList|best;
+  tearoff best = self::BestList|get#best;
+}
+extension BestSpec on core::List<core::num> {
+  method best = self::BestSpec|best;
+  tearoff best = self::BestSpec|get#best;
+}
+static method BestCom|best<T extends 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>(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>(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>(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(lowered final core::List<core::num> #this) → core::num?
+  return null;
+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;
+  core::int? v = self::BestCom|best<core::int>(x);
+  core::List<core::num>? y;
+  core::num? w = self::BestCom|best<core::num>(y);
+}
diff --git a/pkg/front_end/testcases/extensions/on_type_variable_inference.dart b/pkg/front_end/testcases/extensions/on_type_variable_inference.dart
index 513f153..a4920ec 100644
--- a/pkg/front_end/testcases/extensions/on_type_variable_inference.dart
+++ b/pkg/front_end/testcases/extensions/on_type_variable_inference.dart
@@ -1,7 +1,9 @@
 // Copyright (c) 2019, 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.
+
 // @dart=2.9
+
 class Struct {}
 
 class StructA extends Struct {}
diff --git a/pkg/front_end/testcases/extensions/on_type_variable_inference.dart.weak.expect b/pkg/front_end/testcases/extensions/on_type_variable_inference.dart.weak.expect
index ea9e928..490ec18 100644
--- a/pkg/front_end/testcases/extensions/on_type_variable_inference.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/on_type_variable_inference.dart.weak.expect
@@ -2,37 +2,37 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/extensions/on_type_variable_inference.dart:44:13: Error: The method 'method' isn't defined for the class 'NonStruct'.
+// pkg/front_end/testcases/extensions/on_type_variable_inference.dart:46:13: Error: The method 'method' isn't defined for the class 'NonStruct'.
 //  - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference.dart'.
 // Try correcting the name to the name of an existing method, or defining a method named 'method'.
 //   nonStruct.method();
 //             ^^^^^^
 //
-// pkg/front_end/testcases/extensions/on_type_variable_inference.dart:45:34: Error: The getter 'property' isn't defined for the class 'NonStruct'.
+// pkg/front_end/testcases/extensions/on_type_variable_inference.dart:47:34: Error: The getter 'property' isn't defined for the class 'NonStruct'.
 //  - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference.dart'.
 // Try correcting the name to the name of an existing getter, or defining a getter or field named 'property'.
 //   nonStruct.property = nonStruct.property;
 //                                  ^^^^^^^^
 //
-// pkg/front_end/testcases/extensions/on_type_variable_inference.dart:45:13: Error: The setter 'property' isn't defined for the class 'NonStruct'.
+// pkg/front_end/testcases/extensions/on_type_variable_inference.dart:47:13: Error: The setter 'property' isn't defined for the class 'NonStruct'.
 //  - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference.dart'.
 // Try correcting the name to the name of an existing setter, or defining a setter or field named 'property'.
 //   nonStruct.property = nonStruct.property;
 //             ^^^^^^^^
 //
-// pkg/front_end/testcases/extensions/on_type_variable_inference.dart:46:19: Error: The method 'method' isn't defined for the class 'NonStruct'.
+// pkg/front_end/testcases/extensions/on_type_variable_inference.dart:48:19: Error: The method 'method' isn't defined for the class 'NonStruct'.
 //  - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference.dart'.
 // Try correcting the name to the name of an existing method, or defining a method named 'method'.
 //   new NonStruct().method();
 //                   ^^^^^^
 //
-// pkg/front_end/testcases/extensions/on_type_variable_inference.dart:47:19: Error: The getter 'property' isn't defined for the class 'NonStruct'.
+// pkg/front_end/testcases/extensions/on_type_variable_inference.dart:49:19: Error: The getter 'property' isn't defined for the class 'NonStruct'.
 //  - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference.dart'.
 // Try correcting the name to the name of an existing getter, or defining a getter or field named 'property'.
 //   new NonStruct().property;
 //                   ^^^^^^^^
 //
-// pkg/front_end/testcases/extensions/on_type_variable_inference.dart:48:19: Error: The setter 'property' isn't defined for the class 'NonStruct'.
+// pkg/front_end/testcases/extensions/on_type_variable_inference.dart:50:19: Error: The setter 'property' isn't defined for the class 'NonStruct'.
 //  - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference.dart'.
 // Try correcting the name to the name of an existing setter, or defining a setter or field named 'property'.
 //   new NonStruct().property = null;
@@ -116,31 +116,31 @@
 }
 static method testNonStruct() → dynamic {
   self::NonStruct* nonStruct;
-  invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference.dart:44:13: Error: The method 'method' isn't defined for the class 'NonStruct'.
+  invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference.dart:46:13: Error: The method 'method' isn't defined for the class 'NonStruct'.
  - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference.dart'.
 Try correcting the name to the name of an existing method, or defining a method named 'method'.
   nonStruct.method();
             ^^^^^^" in nonStruct{<unresolved>}.method();
-  invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference.dart:45:13: Error: The setter 'property' isn't defined for the class 'NonStruct'.
+  invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference.dart:47:13: Error: The setter 'property' isn't defined for the class 'NonStruct'.
  - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'property'.
   nonStruct.property = nonStruct.property;
-            ^^^^^^^^" in nonStruct{<unresolved>}.property = invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference.dart:45:34: Error: The getter 'property' isn't defined for the class 'NonStruct'.
+            ^^^^^^^^" in nonStruct{<unresolved>}.property = invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference.dart:47:34: Error: The getter 'property' isn't defined for the class 'NonStruct'.
  - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'property'.
   nonStruct.property = nonStruct.property;
                                  ^^^^^^^^" in nonStruct{<unresolved>}.property;
-  invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference.dart:46:19: Error: The method 'method' isn't defined for the class 'NonStruct'.
+  invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference.dart:48:19: Error: The method 'method' isn't defined for the class 'NonStruct'.
  - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference.dart'.
 Try correcting the name to the name of an existing method, or defining a method named 'method'.
   new NonStruct().method();
                   ^^^^^^" in new self::NonStruct::•(){<unresolved>}.method();
-  invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference.dart:47:19: Error: The getter 'property' isn't defined for the class 'NonStruct'.
+  invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference.dart:49:19: Error: The getter 'property' isn't defined for the class 'NonStruct'.
  - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'property'.
   new NonStruct().property;
                   ^^^^^^^^" in new self::NonStruct::•(){<unresolved>}.property;
-  invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference.dart:48:19: Error: The setter 'property' isn't defined for the class 'NonStruct'.
+  invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference.dart:50:19: Error: The setter 'property' isn't defined for the class 'NonStruct'.
  - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'property'.
   new NonStruct().property = null;
diff --git a/pkg/front_end/testcases/extensions/on_type_variable_inference.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/on_type_variable_inference.dart.weak.modular.expect
index ea9e928..490ec18 100644
--- a/pkg/front_end/testcases/extensions/on_type_variable_inference.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/extensions/on_type_variable_inference.dart.weak.modular.expect
@@ -2,37 +2,37 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/extensions/on_type_variable_inference.dart:44:13: Error: The method 'method' isn't defined for the class 'NonStruct'.
+// pkg/front_end/testcases/extensions/on_type_variable_inference.dart:46:13: Error: The method 'method' isn't defined for the class 'NonStruct'.
 //  - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference.dart'.
 // Try correcting the name to the name of an existing method, or defining a method named 'method'.
 //   nonStruct.method();
 //             ^^^^^^
 //
-// pkg/front_end/testcases/extensions/on_type_variable_inference.dart:45:34: Error: The getter 'property' isn't defined for the class 'NonStruct'.
+// pkg/front_end/testcases/extensions/on_type_variable_inference.dart:47:34: Error: The getter 'property' isn't defined for the class 'NonStruct'.
 //  - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference.dart'.
 // Try correcting the name to the name of an existing getter, or defining a getter or field named 'property'.
 //   nonStruct.property = nonStruct.property;
 //                                  ^^^^^^^^
 //
-// pkg/front_end/testcases/extensions/on_type_variable_inference.dart:45:13: Error: The setter 'property' isn't defined for the class 'NonStruct'.
+// pkg/front_end/testcases/extensions/on_type_variable_inference.dart:47:13: Error: The setter 'property' isn't defined for the class 'NonStruct'.
 //  - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference.dart'.
 // Try correcting the name to the name of an existing setter, or defining a setter or field named 'property'.
 //   nonStruct.property = nonStruct.property;
 //             ^^^^^^^^
 //
-// pkg/front_end/testcases/extensions/on_type_variable_inference.dart:46:19: Error: The method 'method' isn't defined for the class 'NonStruct'.
+// pkg/front_end/testcases/extensions/on_type_variable_inference.dart:48:19: Error: The method 'method' isn't defined for the class 'NonStruct'.
 //  - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference.dart'.
 // Try correcting the name to the name of an existing method, or defining a method named 'method'.
 //   new NonStruct().method();
 //                   ^^^^^^
 //
-// pkg/front_end/testcases/extensions/on_type_variable_inference.dart:47:19: Error: The getter 'property' isn't defined for the class 'NonStruct'.
+// pkg/front_end/testcases/extensions/on_type_variable_inference.dart:49:19: Error: The getter 'property' isn't defined for the class 'NonStruct'.
 //  - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference.dart'.
 // Try correcting the name to the name of an existing getter, or defining a getter or field named 'property'.
 //   new NonStruct().property;
 //                   ^^^^^^^^
 //
-// pkg/front_end/testcases/extensions/on_type_variable_inference.dart:48:19: Error: The setter 'property' isn't defined for the class 'NonStruct'.
+// pkg/front_end/testcases/extensions/on_type_variable_inference.dart:50:19: Error: The setter 'property' isn't defined for the class 'NonStruct'.
 //  - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference.dart'.
 // Try correcting the name to the name of an existing setter, or defining a setter or field named 'property'.
 //   new NonStruct().property = null;
@@ -116,31 +116,31 @@
 }
 static method testNonStruct() → dynamic {
   self::NonStruct* nonStruct;
-  invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference.dart:44:13: Error: The method 'method' isn't defined for the class 'NonStruct'.
+  invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference.dart:46:13: Error: The method 'method' isn't defined for the class 'NonStruct'.
  - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference.dart'.
 Try correcting the name to the name of an existing method, or defining a method named 'method'.
   nonStruct.method();
             ^^^^^^" in nonStruct{<unresolved>}.method();
-  invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference.dart:45:13: Error: The setter 'property' isn't defined for the class 'NonStruct'.
+  invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference.dart:47:13: Error: The setter 'property' isn't defined for the class 'NonStruct'.
  - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'property'.
   nonStruct.property = nonStruct.property;
-            ^^^^^^^^" in nonStruct{<unresolved>}.property = invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference.dart:45:34: Error: The getter 'property' isn't defined for the class 'NonStruct'.
+            ^^^^^^^^" in nonStruct{<unresolved>}.property = invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference.dart:47:34: Error: The getter 'property' isn't defined for the class 'NonStruct'.
  - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'property'.
   nonStruct.property = nonStruct.property;
                                  ^^^^^^^^" in nonStruct{<unresolved>}.property;
-  invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference.dart:46:19: Error: The method 'method' isn't defined for the class 'NonStruct'.
+  invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference.dart:48:19: Error: The method 'method' isn't defined for the class 'NonStruct'.
  - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference.dart'.
 Try correcting the name to the name of an existing method, or defining a method named 'method'.
   new NonStruct().method();
                   ^^^^^^" in new self::NonStruct::•(){<unresolved>}.method();
-  invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference.dart:47:19: Error: The getter 'property' isn't defined for the class 'NonStruct'.
+  invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference.dart:49:19: Error: The getter 'property' isn't defined for the class 'NonStruct'.
  - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'property'.
   new NonStruct().property;
                   ^^^^^^^^" in new self::NonStruct::•(){<unresolved>}.property;
-  invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference.dart:48:19: Error: The setter 'property' isn't defined for the class 'NonStruct'.
+  invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference.dart:50:19: Error: The setter 'property' isn't defined for the class 'NonStruct'.
  - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'property'.
   new NonStruct().property = null;
diff --git a/pkg/front_end/testcases/extensions/on_type_variable_inference.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/on_type_variable_inference.dart.weak.transformed.expect
index ea9e928..490ec18 100644
--- a/pkg/front_end/testcases/extensions/on_type_variable_inference.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/on_type_variable_inference.dart.weak.transformed.expect
@@ -2,37 +2,37 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/extensions/on_type_variable_inference.dart:44:13: Error: The method 'method' isn't defined for the class 'NonStruct'.
+// pkg/front_end/testcases/extensions/on_type_variable_inference.dart:46:13: Error: The method 'method' isn't defined for the class 'NonStruct'.
 //  - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference.dart'.
 // Try correcting the name to the name of an existing method, or defining a method named 'method'.
 //   nonStruct.method();
 //             ^^^^^^
 //
-// pkg/front_end/testcases/extensions/on_type_variable_inference.dart:45:34: Error: The getter 'property' isn't defined for the class 'NonStruct'.
+// pkg/front_end/testcases/extensions/on_type_variable_inference.dart:47:34: Error: The getter 'property' isn't defined for the class 'NonStruct'.
 //  - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference.dart'.
 // Try correcting the name to the name of an existing getter, or defining a getter or field named 'property'.
 //   nonStruct.property = nonStruct.property;
 //                                  ^^^^^^^^
 //
-// pkg/front_end/testcases/extensions/on_type_variable_inference.dart:45:13: Error: The setter 'property' isn't defined for the class 'NonStruct'.
+// pkg/front_end/testcases/extensions/on_type_variable_inference.dart:47:13: Error: The setter 'property' isn't defined for the class 'NonStruct'.
 //  - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference.dart'.
 // Try correcting the name to the name of an existing setter, or defining a setter or field named 'property'.
 //   nonStruct.property = nonStruct.property;
 //             ^^^^^^^^
 //
-// pkg/front_end/testcases/extensions/on_type_variable_inference.dart:46:19: Error: The method 'method' isn't defined for the class 'NonStruct'.
+// pkg/front_end/testcases/extensions/on_type_variable_inference.dart:48:19: Error: The method 'method' isn't defined for the class 'NonStruct'.
 //  - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference.dart'.
 // Try correcting the name to the name of an existing method, or defining a method named 'method'.
 //   new NonStruct().method();
 //                   ^^^^^^
 //
-// pkg/front_end/testcases/extensions/on_type_variable_inference.dart:47:19: Error: The getter 'property' isn't defined for the class 'NonStruct'.
+// pkg/front_end/testcases/extensions/on_type_variable_inference.dart:49:19: Error: The getter 'property' isn't defined for the class 'NonStruct'.
 //  - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference.dart'.
 // Try correcting the name to the name of an existing getter, or defining a getter or field named 'property'.
 //   new NonStruct().property;
 //                   ^^^^^^^^
 //
-// pkg/front_end/testcases/extensions/on_type_variable_inference.dart:48:19: Error: The setter 'property' isn't defined for the class 'NonStruct'.
+// pkg/front_end/testcases/extensions/on_type_variable_inference.dart:50:19: Error: The setter 'property' isn't defined for the class 'NonStruct'.
 //  - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference.dart'.
 // Try correcting the name to the name of an existing setter, or defining a setter or field named 'property'.
 //   new NonStruct().property = null;
@@ -116,31 +116,31 @@
 }
 static method testNonStruct() → dynamic {
   self::NonStruct* nonStruct;
-  invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference.dart:44:13: Error: The method 'method' isn't defined for the class 'NonStruct'.
+  invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference.dart:46:13: Error: The method 'method' isn't defined for the class 'NonStruct'.
  - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference.dart'.
 Try correcting the name to the name of an existing method, or defining a method named 'method'.
   nonStruct.method();
             ^^^^^^" in nonStruct{<unresolved>}.method();
-  invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference.dart:45:13: Error: The setter 'property' isn't defined for the class 'NonStruct'.
+  invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference.dart:47:13: Error: The setter 'property' isn't defined for the class 'NonStruct'.
  - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'property'.
   nonStruct.property = nonStruct.property;
-            ^^^^^^^^" in nonStruct{<unresolved>}.property = invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference.dart:45:34: Error: The getter 'property' isn't defined for the class 'NonStruct'.
+            ^^^^^^^^" in nonStruct{<unresolved>}.property = invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference.dart:47:34: Error: The getter 'property' isn't defined for the class 'NonStruct'.
  - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'property'.
   nonStruct.property = nonStruct.property;
                                  ^^^^^^^^" in nonStruct{<unresolved>}.property;
-  invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference.dart:46:19: Error: The method 'method' isn't defined for the class 'NonStruct'.
+  invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference.dart:48:19: Error: The method 'method' isn't defined for the class 'NonStruct'.
  - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference.dart'.
 Try correcting the name to the name of an existing method, or defining a method named 'method'.
   new NonStruct().method();
                   ^^^^^^" in new self::NonStruct::•(){<unresolved>}.method();
-  invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference.dart:47:19: Error: The getter 'property' isn't defined for the class 'NonStruct'.
+  invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference.dart:49:19: Error: The getter 'property' isn't defined for the class 'NonStruct'.
  - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference.dart'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'property'.
   new NonStruct().property;
                   ^^^^^^^^" in new self::NonStruct::•(){<unresolved>}.property;
-  invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference.dart:48:19: Error: The setter 'property' isn't defined for the class 'NonStruct'.
+  invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference.dart:50:19: Error: The setter 'property' isn't defined for the class 'NonStruct'.
  - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference.dart'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'property'.
   new NonStruct().property = null;
diff --git a/pkg/front_end/testcases/extensions/on_type_variable_inference2.dart b/pkg/front_end/testcases/extensions/on_type_variable_inference2.dart
new file mode 100644
index 0000000..b1df269
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/on_type_variable_inference2.dart
@@ -0,0 +1,64 @@
+// Copyright (c) 2019, 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.
+
+class Struct {}
+
+class StructA extends Struct {}
+
+class StructB extends Struct {}
+
+class NonStruct {}
+
+extension Extension<T extends Struct?> on T {
+  T method() => this;
+  T get property => this;
+  void set property(T value) {}
+}
+
+main() {
+  Struct? struct;
+  StructA? structA;
+  StructB? structB;
+
+  struct.method();
+  struct.property = struct.property;
+  struct.property = structA.property;
+  struct.property = structB.property;
+  structA.method();
+  structA.property = structA.property;
+  structB.method();
+  structB.property = structB.property;
+
+  new Struct().method();
+  new Struct().property;
+  struct.property = null;
+  new StructA().method();
+  new StructA().property;
+  structA.property = null;
+  new StructB().method();
+  new StructB().property;
+  structB.property = null;
+}
+
+errors() {
+  Struct? struct;
+  StructA? structA;
+  StructB? structB;
+
+  structA.property = struct.property; // error
+  structB.property = struct.property; // error
+
+  new Struct().property = null; // error
+  new StructA().property = null; // error
+  new StructB().property = null; // error
+}
+
+testNonStruct() {
+  NonStruct nonStruct;
+  nonStruct.method(); // error
+  nonStruct.property = nonStruct.property; // error
+  new NonStruct().method(); // error
+  new NonStruct().property; // error
+  new NonStruct().property = null; // error
+}
diff --git a/pkg/front_end/testcases/extensions/on_type_variable_inference2.dart.textual_outline.expect b/pkg/front_end/testcases/extensions/on_type_variable_inference2.dart.textual_outline.expect
new file mode 100644
index 0000000..3e1bb00
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/on_type_variable_inference2.dart.textual_outline.expect
@@ -0,0 +1,17 @@
+class Struct {}
+
+class StructA extends Struct {}
+
+class StructB extends Struct {}
+
+class NonStruct {}
+
+extension Extension<T extends Struct?> on T {
+  T method() => this;
+  T get property => this;
+  void set property(T value) {}
+}
+
+main() {}
+errors() {}
+testNonStruct() {}
diff --git a/pkg/front_end/testcases/extensions/on_type_variable_inference2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/extensions/on_type_variable_inference2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..db89951
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/on_type_variable_inference2.dart.textual_outline_modelled.expect
@@ -0,0 +1,18 @@
+class NonStruct {}
+
+class Struct {}
+
+class StructA extends Struct {}
+
+class StructB extends Struct {}
+
+errors() {}
+
+extension Extension<T extends Struct?> on T {
+  T get property => this;
+  T method() => this;
+  void set property(T value) {}
+}
+
+main() {}
+testNonStruct() {}
diff --git a/pkg/front_end/testcases/extensions/on_type_variable_inference2.dart.weak.expect b/pkg/front_end/testcases/extensions/on_type_variable_inference2.dart.weak.expect
new file mode 100644
index 0000000..929b404
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/on_type_variable_inference2.dart.weak.expect
@@ -0,0 +1,202 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extensions/on_type_variable_inference2.dart:49:29: Error: A value of type 'Struct?' can't be assigned to a variable of type 'StructA?'.
+//  - 'Struct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference2.dart'.
+//  - 'StructA' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference2.dart'.
+//   structA.property = struct.property; // error
+//                             ^
+//
+// pkg/front_end/testcases/extensions/on_type_variable_inference2.dart:50:29: Error: A value of type 'Struct?' can't be assigned to a variable of type 'StructB?'.
+//  - 'Struct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference2.dart'.
+//  - 'StructB' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference2.dart'.
+//   structB.property = struct.property; // error
+//                             ^
+//
+// pkg/front_end/testcases/extensions/on_type_variable_inference2.dart:52:27: Error: The value 'null' can't be assigned to a variable of type 'Struct' because 'Struct' is not nullable.
+//  - 'Struct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference2.dart'.
+//   new Struct().property = null; // error
+//                           ^
+//
+// pkg/front_end/testcases/extensions/on_type_variable_inference2.dart:53:28: Error: The value 'null' can't be assigned to a variable of type 'StructA' because 'StructA' is not nullable.
+//  - 'StructA' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference2.dart'.
+//   new StructA().property = null; // error
+//                            ^
+//
+// pkg/front_end/testcases/extensions/on_type_variable_inference2.dart:54:28: Error: The value 'null' can't be assigned to a variable of type 'StructB' because 'StructB' is not nullable.
+//  - 'StructB' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference2.dart'.
+//   new StructB().property = null; // error
+//                            ^
+//
+// pkg/front_end/testcases/extensions/on_type_variable_inference2.dart:59:3: Error: Non-nullable variable 'nonStruct' must be assigned before it can be used.
+//   nonStruct.method(); // error
+//   ^^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/on_type_variable_inference2.dart:59:13: Error: The method 'method' isn't defined for the class 'NonStruct'.
+//  - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference2.dart'.
+// Try correcting the name to the name of an existing method, or defining a method named 'method'.
+//   nonStruct.method(); // error
+//             ^^^^^^
+//
+// pkg/front_end/testcases/extensions/on_type_variable_inference2.dart:60:3: Error: Non-nullable variable 'nonStruct' must be assigned before it can be used.
+//   nonStruct.property = nonStruct.property; // error
+//   ^^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/on_type_variable_inference2.dart:60:24: Error: Non-nullable variable 'nonStruct' must be assigned before it can be used.
+//   nonStruct.property = nonStruct.property; // error
+//                        ^^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/on_type_variable_inference2.dart:60:34: Error: The getter 'property' isn't defined for the class 'NonStruct'.
+//  - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference2.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'property'.
+//   nonStruct.property = nonStruct.property; // error
+//                                  ^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/on_type_variable_inference2.dart:60:13: Error: The setter 'property' isn't defined for the class 'NonStruct'.
+//  - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference2.dart'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'property'.
+//   nonStruct.property = nonStruct.property; // error
+//             ^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/on_type_variable_inference2.dart:61:19: Error: The method 'method' isn't defined for the class 'NonStruct'.
+//  - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference2.dart'.
+// Try correcting the name to the name of an existing method, or defining a method named 'method'.
+//   new NonStruct().method(); // error
+//                   ^^^^^^
+//
+// pkg/front_end/testcases/extensions/on_type_variable_inference2.dart:62:19: Error: The getter 'property' isn't defined for the class 'NonStruct'.
+//  - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference2.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'property'.
+//   new NonStruct().property; // error
+//                   ^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/on_type_variable_inference2.dart:63:19: Error: The setter 'property' isn't defined for the class 'NonStruct'.
+//  - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference2.dart'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'property'.
+//   new NonStruct().property = null; // error
+//                   ^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Struct extends core::Object {
+  synthetic constructor •() → self::Struct
+    : super core::Object::•()
+    ;
+}
+class StructA extends self::Struct {
+  synthetic constructor •() → self::StructA
+    : super self::Struct::•()
+    ;
+}
+class StructB extends self::Struct {
+  synthetic constructor •() → self::StructB
+    : super self::Struct::•()
+    ;
+}
+class NonStruct extends core::Object {
+  synthetic constructor •() → self::NonStruct
+    : super core::Object::•()
+    ;
+}
+extension Extension<T extends self::Struct?> on T% {
+  method method = self::Extension|method;
+  tearoff method = self::Extension|get#method;
+  get property = self::Extension|get#property;
+  set property = self::Extension|set#property;
+}
+static method Extension|method<T extends self::Struct?>(lowered final self::Extension|method::T% #this) → self::Extension|method::T%
+  return #this;
+static method Extension|get#method<T extends 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?>(lowered final self::Extension|get#property::T% #this) → self::Extension|get#property::T%
+  return #this;
+static method Extension|set#property<T extends 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;
+  self::StructB? structB;
+  self::Extension|method<self::Struct?>(struct);
+  self::Extension|set#property<self::Struct?>(struct, self::Extension|get#property<self::Struct?>(struct));
+  self::Extension|set#property<self::Struct?>(struct, self::Extension|get#property<self::StructA?>(structA));
+  self::Extension|set#property<self::Struct?>(struct, self::Extension|get#property<self::StructB?>(structB));
+  self::Extension|method<self::StructA?>(structA);
+  self::Extension|set#property<self::StructA?>(structA, self::Extension|get#property<self::StructA?>(structA));
+  self::Extension|method<self::StructB?>(structB);
+  self::Extension|set#property<self::StructB?>(structB, self::Extension|get#property<self::StructB?>(structB));
+  self::Extension|method<self::Struct>(new self::Struct::•());
+  self::Extension|get#property<self::Struct>(new self::Struct::•());
+  self::Extension|set#property<self::Struct?>(struct, null);
+  self::Extension|method<self::StructA>(new self::StructA::•());
+  self::Extension|get#property<self::StructA>(new self::StructA::•());
+  self::Extension|set#property<self::StructA?>(structA, null);
+  self::Extension|method<self::StructB>(new self::StructB::•());
+  self::Extension|get#property<self::StructB>(new self::StructB::•());
+  self::Extension|set#property<self::StructB?>(structB, null);
+}
+static method errors() → dynamic {
+  self::Struct? struct;
+  self::StructA? structA;
+  self::StructB? structB;
+  self::Extension|set#property<self::StructA?>(structA, invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference2.dart:49:29: Error: A value of type 'Struct?' can't be assigned to a variable of type 'StructA?'.
+ - 'Struct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference2.dart'.
+ - 'StructA' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference2.dart'.
+  structA.property = struct.property; // error
+                            ^" in self::Extension|get#property<self::Struct?>(struct) as{TypeError,ForNonNullableByDefault} self::StructA?);
+  self::Extension|set#property<self::StructB?>(structB, invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference2.dart:50:29: Error: A value of type 'Struct?' can't be assigned to a variable of type 'StructB?'.
+ - 'Struct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference2.dart'.
+ - 'StructB' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference2.dart'.
+  structB.property = struct.property; // error
+                            ^" in self::Extension|get#property<self::Struct?>(struct) as{TypeError,ForNonNullableByDefault} self::StructB?);
+  self::Extension|set#property<self::Struct>(new self::Struct::•(), invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference2.dart:52:27: Error: The value 'null' can't be assigned to a variable of type 'Struct' because 'Struct' is not nullable.
+ - 'Struct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference2.dart'.
+  new Struct().property = null; // error
+                          ^" in null as{TypeError,ForNonNullableByDefault} self::Struct);
+  self::Extension|set#property<self::StructA>(new self::StructA::•(), invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference2.dart:53:28: Error: The value 'null' can't be assigned to a variable of type 'StructA' because 'StructA' is not nullable.
+ - 'StructA' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference2.dart'.
+  new StructA().property = null; // error
+                           ^" in null as{TypeError,ForNonNullableByDefault} self::StructA);
+  self::Extension|set#property<self::StructB>(new self::StructB::•(), invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference2.dart:54:28: Error: The value 'null' can't be assigned to a variable of type 'StructB' because 'StructB' is not nullable.
+ - 'StructB' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference2.dart'.
+  new StructB().property = null; // error
+                           ^" in null as{TypeError,ForNonNullableByDefault} self::StructB);
+}
+static method testNonStruct() → dynamic {
+  self::NonStruct nonStruct;
+  invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference2.dart:59:13: Error: The method 'method' isn't defined for the class 'NonStruct'.
+ - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference2.dart'.
+Try correcting the name to the name of an existing method, or defining a method named 'method'.
+  nonStruct.method(); // error
+            ^^^^^^" in invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference2.dart:59:3: Error: Non-nullable variable 'nonStruct' must be assigned before it can be used.
+  nonStruct.method(); // error
+  ^^^^^^^^^" in nonStruct{<unresolved>}.method();
+  invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference2.dart:60:13: Error: The setter 'property' isn't defined for the class 'NonStruct'.
+ - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference2.dart'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'property'.
+  nonStruct.property = nonStruct.property; // error
+            ^^^^^^^^" in invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference2.dart:60:3: Error: Non-nullable variable 'nonStruct' must be assigned before it can be used.
+  nonStruct.property = nonStruct.property; // error
+  ^^^^^^^^^" in nonStruct{<unresolved>}.property = invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference2.dart:60:34: Error: The getter 'property' isn't defined for the class 'NonStruct'.
+ - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference2.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'property'.
+  nonStruct.property = nonStruct.property; // error
+                                 ^^^^^^^^" in invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference2.dart:60:24: Error: Non-nullable variable 'nonStruct' must be assigned before it can be used.
+  nonStruct.property = nonStruct.property; // error
+                       ^^^^^^^^^" in nonStruct{<unresolved>}.property;
+  invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference2.dart:61:19: Error: The method 'method' isn't defined for the class 'NonStruct'.
+ - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference2.dart'.
+Try correcting the name to the name of an existing method, or defining a method named 'method'.
+  new NonStruct().method(); // error
+                  ^^^^^^" in new self::NonStruct::•(){<unresolved>}.method();
+  invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference2.dart:62:19: Error: The getter 'property' isn't defined for the class 'NonStruct'.
+ - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference2.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'property'.
+  new NonStruct().property; // error
+                  ^^^^^^^^" in new self::NonStruct::•(){<unresolved>}.property;
+  invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference2.dart:63:19: Error: The setter 'property' isn't defined for the class 'NonStruct'.
+ - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference2.dart'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'property'.
+  new NonStruct().property = null; // error
+                  ^^^^^^^^" in new self::NonStruct::•(){<unresolved>}.property = null;
+}
diff --git a/pkg/front_end/testcases/extensions/on_type_variable_inference2.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/on_type_variable_inference2.dart.weak.modular.expect
new file mode 100644
index 0000000..929b404
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/on_type_variable_inference2.dart.weak.modular.expect
@@ -0,0 +1,202 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extensions/on_type_variable_inference2.dart:49:29: Error: A value of type 'Struct?' can't be assigned to a variable of type 'StructA?'.
+//  - 'Struct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference2.dart'.
+//  - 'StructA' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference2.dart'.
+//   structA.property = struct.property; // error
+//                             ^
+//
+// pkg/front_end/testcases/extensions/on_type_variable_inference2.dart:50:29: Error: A value of type 'Struct?' can't be assigned to a variable of type 'StructB?'.
+//  - 'Struct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference2.dart'.
+//  - 'StructB' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference2.dart'.
+//   structB.property = struct.property; // error
+//                             ^
+//
+// pkg/front_end/testcases/extensions/on_type_variable_inference2.dart:52:27: Error: The value 'null' can't be assigned to a variable of type 'Struct' because 'Struct' is not nullable.
+//  - 'Struct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference2.dart'.
+//   new Struct().property = null; // error
+//                           ^
+//
+// pkg/front_end/testcases/extensions/on_type_variable_inference2.dart:53:28: Error: The value 'null' can't be assigned to a variable of type 'StructA' because 'StructA' is not nullable.
+//  - 'StructA' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference2.dart'.
+//   new StructA().property = null; // error
+//                            ^
+//
+// pkg/front_end/testcases/extensions/on_type_variable_inference2.dart:54:28: Error: The value 'null' can't be assigned to a variable of type 'StructB' because 'StructB' is not nullable.
+//  - 'StructB' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference2.dart'.
+//   new StructB().property = null; // error
+//                            ^
+//
+// pkg/front_end/testcases/extensions/on_type_variable_inference2.dart:59:3: Error: Non-nullable variable 'nonStruct' must be assigned before it can be used.
+//   nonStruct.method(); // error
+//   ^^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/on_type_variable_inference2.dart:59:13: Error: The method 'method' isn't defined for the class 'NonStruct'.
+//  - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference2.dart'.
+// Try correcting the name to the name of an existing method, or defining a method named 'method'.
+//   nonStruct.method(); // error
+//             ^^^^^^
+//
+// pkg/front_end/testcases/extensions/on_type_variable_inference2.dart:60:3: Error: Non-nullable variable 'nonStruct' must be assigned before it can be used.
+//   nonStruct.property = nonStruct.property; // error
+//   ^^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/on_type_variable_inference2.dart:60:24: Error: Non-nullable variable 'nonStruct' must be assigned before it can be used.
+//   nonStruct.property = nonStruct.property; // error
+//                        ^^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/on_type_variable_inference2.dart:60:34: Error: The getter 'property' isn't defined for the class 'NonStruct'.
+//  - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference2.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'property'.
+//   nonStruct.property = nonStruct.property; // error
+//                                  ^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/on_type_variable_inference2.dart:60:13: Error: The setter 'property' isn't defined for the class 'NonStruct'.
+//  - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference2.dart'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'property'.
+//   nonStruct.property = nonStruct.property; // error
+//             ^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/on_type_variable_inference2.dart:61:19: Error: The method 'method' isn't defined for the class 'NonStruct'.
+//  - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference2.dart'.
+// Try correcting the name to the name of an existing method, or defining a method named 'method'.
+//   new NonStruct().method(); // error
+//                   ^^^^^^
+//
+// pkg/front_end/testcases/extensions/on_type_variable_inference2.dart:62:19: Error: The getter 'property' isn't defined for the class 'NonStruct'.
+//  - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference2.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'property'.
+//   new NonStruct().property; // error
+//                   ^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/on_type_variable_inference2.dart:63:19: Error: The setter 'property' isn't defined for the class 'NonStruct'.
+//  - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference2.dart'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'property'.
+//   new NonStruct().property = null; // error
+//                   ^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Struct extends core::Object {
+  synthetic constructor •() → self::Struct
+    : super core::Object::•()
+    ;
+}
+class StructA extends self::Struct {
+  synthetic constructor •() → self::StructA
+    : super self::Struct::•()
+    ;
+}
+class StructB extends self::Struct {
+  synthetic constructor •() → self::StructB
+    : super self::Struct::•()
+    ;
+}
+class NonStruct extends core::Object {
+  synthetic constructor •() → self::NonStruct
+    : super core::Object::•()
+    ;
+}
+extension Extension<T extends self::Struct?> on T% {
+  method method = self::Extension|method;
+  tearoff method = self::Extension|get#method;
+  get property = self::Extension|get#property;
+  set property = self::Extension|set#property;
+}
+static method Extension|method<T extends self::Struct?>(lowered final self::Extension|method::T% #this) → self::Extension|method::T%
+  return #this;
+static method Extension|get#method<T extends 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?>(lowered final self::Extension|get#property::T% #this) → self::Extension|get#property::T%
+  return #this;
+static method Extension|set#property<T extends 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;
+  self::StructB? structB;
+  self::Extension|method<self::Struct?>(struct);
+  self::Extension|set#property<self::Struct?>(struct, self::Extension|get#property<self::Struct?>(struct));
+  self::Extension|set#property<self::Struct?>(struct, self::Extension|get#property<self::StructA?>(structA));
+  self::Extension|set#property<self::Struct?>(struct, self::Extension|get#property<self::StructB?>(structB));
+  self::Extension|method<self::StructA?>(structA);
+  self::Extension|set#property<self::StructA?>(structA, self::Extension|get#property<self::StructA?>(structA));
+  self::Extension|method<self::StructB?>(structB);
+  self::Extension|set#property<self::StructB?>(structB, self::Extension|get#property<self::StructB?>(structB));
+  self::Extension|method<self::Struct>(new self::Struct::•());
+  self::Extension|get#property<self::Struct>(new self::Struct::•());
+  self::Extension|set#property<self::Struct?>(struct, null);
+  self::Extension|method<self::StructA>(new self::StructA::•());
+  self::Extension|get#property<self::StructA>(new self::StructA::•());
+  self::Extension|set#property<self::StructA?>(structA, null);
+  self::Extension|method<self::StructB>(new self::StructB::•());
+  self::Extension|get#property<self::StructB>(new self::StructB::•());
+  self::Extension|set#property<self::StructB?>(structB, null);
+}
+static method errors() → dynamic {
+  self::Struct? struct;
+  self::StructA? structA;
+  self::StructB? structB;
+  self::Extension|set#property<self::StructA?>(structA, invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference2.dart:49:29: Error: A value of type 'Struct?' can't be assigned to a variable of type 'StructA?'.
+ - 'Struct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference2.dart'.
+ - 'StructA' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference2.dart'.
+  structA.property = struct.property; // error
+                            ^" in self::Extension|get#property<self::Struct?>(struct) as{TypeError,ForNonNullableByDefault} self::StructA?);
+  self::Extension|set#property<self::StructB?>(structB, invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference2.dart:50:29: Error: A value of type 'Struct?' can't be assigned to a variable of type 'StructB?'.
+ - 'Struct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference2.dart'.
+ - 'StructB' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference2.dart'.
+  structB.property = struct.property; // error
+                            ^" in self::Extension|get#property<self::Struct?>(struct) as{TypeError,ForNonNullableByDefault} self::StructB?);
+  self::Extension|set#property<self::Struct>(new self::Struct::•(), invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference2.dart:52:27: Error: The value 'null' can't be assigned to a variable of type 'Struct' because 'Struct' is not nullable.
+ - 'Struct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference2.dart'.
+  new Struct().property = null; // error
+                          ^" in null as{TypeError,ForNonNullableByDefault} self::Struct);
+  self::Extension|set#property<self::StructA>(new self::StructA::•(), invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference2.dart:53:28: Error: The value 'null' can't be assigned to a variable of type 'StructA' because 'StructA' is not nullable.
+ - 'StructA' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference2.dart'.
+  new StructA().property = null; // error
+                           ^" in null as{TypeError,ForNonNullableByDefault} self::StructA);
+  self::Extension|set#property<self::StructB>(new self::StructB::•(), invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference2.dart:54:28: Error: The value 'null' can't be assigned to a variable of type 'StructB' because 'StructB' is not nullable.
+ - 'StructB' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference2.dart'.
+  new StructB().property = null; // error
+                           ^" in null as{TypeError,ForNonNullableByDefault} self::StructB);
+}
+static method testNonStruct() → dynamic {
+  self::NonStruct nonStruct;
+  invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference2.dart:59:13: Error: The method 'method' isn't defined for the class 'NonStruct'.
+ - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference2.dart'.
+Try correcting the name to the name of an existing method, or defining a method named 'method'.
+  nonStruct.method(); // error
+            ^^^^^^" in invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference2.dart:59:3: Error: Non-nullable variable 'nonStruct' must be assigned before it can be used.
+  nonStruct.method(); // error
+  ^^^^^^^^^" in nonStruct{<unresolved>}.method();
+  invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference2.dart:60:13: Error: The setter 'property' isn't defined for the class 'NonStruct'.
+ - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference2.dart'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'property'.
+  nonStruct.property = nonStruct.property; // error
+            ^^^^^^^^" in invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference2.dart:60:3: Error: Non-nullable variable 'nonStruct' must be assigned before it can be used.
+  nonStruct.property = nonStruct.property; // error
+  ^^^^^^^^^" in nonStruct{<unresolved>}.property = invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference2.dart:60:34: Error: The getter 'property' isn't defined for the class 'NonStruct'.
+ - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference2.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'property'.
+  nonStruct.property = nonStruct.property; // error
+                                 ^^^^^^^^" in invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference2.dart:60:24: Error: Non-nullable variable 'nonStruct' must be assigned before it can be used.
+  nonStruct.property = nonStruct.property; // error
+                       ^^^^^^^^^" in nonStruct{<unresolved>}.property;
+  invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference2.dart:61:19: Error: The method 'method' isn't defined for the class 'NonStruct'.
+ - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference2.dart'.
+Try correcting the name to the name of an existing method, or defining a method named 'method'.
+  new NonStruct().method(); // error
+                  ^^^^^^" in new self::NonStruct::•(){<unresolved>}.method();
+  invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference2.dart:62:19: Error: The getter 'property' isn't defined for the class 'NonStruct'.
+ - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference2.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'property'.
+  new NonStruct().property; // error
+                  ^^^^^^^^" in new self::NonStruct::•(){<unresolved>}.property;
+  invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference2.dart:63:19: Error: The setter 'property' isn't defined for the class 'NonStruct'.
+ - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference2.dart'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'property'.
+  new NonStruct().property = null; // error
+                  ^^^^^^^^" in new self::NonStruct::•(){<unresolved>}.property = null;
+}
diff --git a/pkg/front_end/testcases/extensions/on_type_variable_inference2.dart.weak.outline.expect b/pkg/front_end/testcases/extensions/on_type_variable_inference2.dart.weak.outline.expect
new file mode 100644
index 0000000..ece84fa
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/on_type_variable_inference2.dart.weak.outline.expect
@@ -0,0 +1,40 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Struct extends core::Object {
+  synthetic constructor •() → self::Struct
+    ;
+}
+class StructA extends self::Struct {
+  synthetic constructor •() → self::StructA
+    ;
+}
+class StructB extends self::Struct {
+  synthetic constructor •() → self::StructB
+    ;
+}
+class NonStruct extends core::Object {
+  synthetic constructor •() → self::NonStruct
+    ;
+}
+extension Extension<T extends self::Struct?> on T% {
+  method method = self::Extension|method;
+  tearoff method = self::Extension|get#method;
+  get property = self::Extension|get#property;
+  set property = self::Extension|set#property;
+}
+static method Extension|method<T extends self::Struct?>(lowered final self::Extension|method::T% #this) → self::Extension|method::T%
+  ;
+static method Extension|get#method<T extends 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?>(lowered final self::Extension|get#property::T% #this) → self::Extension|get#property::T%
+  ;
+static method Extension|set#property<T extends self::Struct?>(lowered final self::Extension|set#property::T% #this, self::Extension|set#property::T% value) → void
+  ;
+static method main() → dynamic
+  ;
+static method errors() → dynamic
+  ;
+static method testNonStruct() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/extensions/on_type_variable_inference2.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/on_type_variable_inference2.dart.weak.transformed.expect
new file mode 100644
index 0000000..d60080b
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/on_type_variable_inference2.dart.weak.transformed.expect
@@ -0,0 +1,202 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extensions/on_type_variable_inference2.dart:49:29: Error: A value of type 'Struct?' can't be assigned to a variable of type 'StructA?'.
+//  - 'Struct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference2.dart'.
+//  - 'StructA' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference2.dart'.
+//   structA.property = struct.property; // error
+//                             ^
+//
+// pkg/front_end/testcases/extensions/on_type_variable_inference2.dart:50:29: Error: A value of type 'Struct?' can't be assigned to a variable of type 'StructB?'.
+//  - 'Struct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference2.dart'.
+//  - 'StructB' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference2.dart'.
+//   structB.property = struct.property; // error
+//                             ^
+//
+// pkg/front_end/testcases/extensions/on_type_variable_inference2.dart:52:27: Error: The value 'null' can't be assigned to a variable of type 'Struct' because 'Struct' is not nullable.
+//  - 'Struct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference2.dart'.
+//   new Struct().property = null; // error
+//                           ^
+//
+// pkg/front_end/testcases/extensions/on_type_variable_inference2.dart:53:28: Error: The value 'null' can't be assigned to a variable of type 'StructA' because 'StructA' is not nullable.
+//  - 'StructA' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference2.dart'.
+//   new StructA().property = null; // error
+//                            ^
+//
+// pkg/front_end/testcases/extensions/on_type_variable_inference2.dart:54:28: Error: The value 'null' can't be assigned to a variable of type 'StructB' because 'StructB' is not nullable.
+//  - 'StructB' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference2.dart'.
+//   new StructB().property = null; // error
+//                            ^
+//
+// pkg/front_end/testcases/extensions/on_type_variable_inference2.dart:59:3: Error: Non-nullable variable 'nonStruct' must be assigned before it can be used.
+//   nonStruct.method(); // error
+//   ^^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/on_type_variable_inference2.dart:59:13: Error: The method 'method' isn't defined for the class 'NonStruct'.
+//  - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference2.dart'.
+// Try correcting the name to the name of an existing method, or defining a method named 'method'.
+//   nonStruct.method(); // error
+//             ^^^^^^
+//
+// pkg/front_end/testcases/extensions/on_type_variable_inference2.dart:60:3: Error: Non-nullable variable 'nonStruct' must be assigned before it can be used.
+//   nonStruct.property = nonStruct.property; // error
+//   ^^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/on_type_variable_inference2.dart:60:24: Error: Non-nullable variable 'nonStruct' must be assigned before it can be used.
+//   nonStruct.property = nonStruct.property; // error
+//                        ^^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/on_type_variable_inference2.dart:60:34: Error: The getter 'property' isn't defined for the class 'NonStruct'.
+//  - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference2.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'property'.
+//   nonStruct.property = nonStruct.property; // error
+//                                  ^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/on_type_variable_inference2.dart:60:13: Error: The setter 'property' isn't defined for the class 'NonStruct'.
+//  - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference2.dart'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'property'.
+//   nonStruct.property = nonStruct.property; // error
+//             ^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/on_type_variable_inference2.dart:61:19: Error: The method 'method' isn't defined for the class 'NonStruct'.
+//  - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference2.dart'.
+// Try correcting the name to the name of an existing method, or defining a method named 'method'.
+//   new NonStruct().method(); // error
+//                   ^^^^^^
+//
+// pkg/front_end/testcases/extensions/on_type_variable_inference2.dart:62:19: Error: The getter 'property' isn't defined for the class 'NonStruct'.
+//  - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference2.dart'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'property'.
+//   new NonStruct().property; // error
+//                   ^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/on_type_variable_inference2.dart:63:19: Error: The setter 'property' isn't defined for the class 'NonStruct'.
+//  - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference2.dart'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'property'.
+//   new NonStruct().property = null; // error
+//                   ^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Struct extends core::Object {
+  synthetic constructor •() → self::Struct
+    : super core::Object::•()
+    ;
+}
+class StructA extends self::Struct {
+  synthetic constructor •() → self::StructA
+    : super self::Struct::•()
+    ;
+}
+class StructB extends self::Struct {
+  synthetic constructor •() → self::StructB
+    : super self::Struct::•()
+    ;
+}
+class NonStruct extends core::Object {
+  synthetic constructor •() → self::NonStruct
+    : super core::Object::•()
+    ;
+}
+extension Extension<T extends self::Struct?> on T% {
+  method method = self::Extension|method;
+  tearoff method = self::Extension|get#method;
+  get property = self::Extension|get#property;
+  set property = self::Extension|set#property;
+}
+static method Extension|method<T extends self::Struct?>(lowered final self::Extension|method::T% #this) → self::Extension|method::T%
+  return #this;
+static method Extension|get#method<T extends 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?>(lowered final self::Extension|get#property::T% #this) → self::Extension|get#property::T%
+  return #this;
+static method Extension|set#property<T extends 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;
+  self::StructB? structB;
+  self::Extension|method<self::Struct?>(struct);
+  self::Extension|set#property<self::Struct?>(struct, self::Extension|get#property<self::Struct?>(struct));
+  self::Extension|set#property<self::Struct?>(struct, self::Extension|get#property<self::StructA?>(structA));
+  self::Extension|set#property<self::Struct?>(struct, self::Extension|get#property<self::StructB?>(structB));
+  self::Extension|method<self::StructA?>(structA);
+  self::Extension|set#property<self::StructA?>(structA, self::Extension|get#property<self::StructA?>(structA));
+  self::Extension|method<self::StructB?>(structB);
+  self::Extension|set#property<self::StructB?>(structB, self::Extension|get#property<self::StructB?>(structB));
+  self::Extension|method<self::Struct>(new self::Struct::•());
+  self::Extension|get#property<self::Struct>(new self::Struct::•());
+  self::Extension|set#property<self::Struct?>(struct, null);
+  self::Extension|method<self::StructA>(new self::StructA::•());
+  self::Extension|get#property<self::StructA>(new self::StructA::•());
+  self::Extension|set#property<self::StructA?>(structA, null);
+  self::Extension|method<self::StructB>(new self::StructB::•());
+  self::Extension|get#property<self::StructB>(new self::StructB::•());
+  self::Extension|set#property<self::StructB?>(structB, null);
+}
+static method errors() → dynamic {
+  self::Struct? struct;
+  self::StructA? structA;
+  self::StructB? structB;
+  self::Extension|set#property<self::StructA?>(structA, invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference2.dart:49:29: Error: A value of type 'Struct?' can't be assigned to a variable of type 'StructA?'.
+ - 'Struct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference2.dart'.
+ - 'StructA' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference2.dart'.
+  structA.property = struct.property; // error
+                            ^" in self::Extension|get#property<self::Struct?>(struct) as{TypeError,ForNonNullableByDefault} self::StructA?);
+  self::Extension|set#property<self::StructB?>(structB, invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference2.dart:50:29: Error: A value of type 'Struct?' can't be assigned to a variable of type 'StructB?'.
+ - 'Struct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference2.dart'.
+ - 'StructB' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference2.dart'.
+  structB.property = struct.property; // error
+                            ^" in self::Extension|get#property<self::Struct?>(struct) as{TypeError,ForNonNullableByDefault} self::StructB?);
+  self::Extension|set#property<self::Struct>(new self::Struct::•(), invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference2.dart:52:27: Error: The value 'null' can't be assigned to a variable of type 'Struct' because 'Struct' is not nullable.
+ - 'Struct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference2.dart'.
+  new Struct().property = null; // error
+                          ^" in null);
+  self::Extension|set#property<self::StructA>(new self::StructA::•(), invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference2.dart:53:28: Error: The value 'null' can't be assigned to a variable of type 'StructA' because 'StructA' is not nullable.
+ - 'StructA' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference2.dart'.
+  new StructA().property = null; // error
+                           ^" in null);
+  self::Extension|set#property<self::StructB>(new self::StructB::•(), invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference2.dart:54:28: Error: The value 'null' can't be assigned to a variable of type 'StructB' because 'StructB' is not nullable.
+ - 'StructB' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference2.dart'.
+  new StructB().property = null; // error
+                           ^" in null);
+}
+static method testNonStruct() → dynamic {
+  self::NonStruct nonStruct;
+  invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference2.dart:59:13: Error: The method 'method' isn't defined for the class 'NonStruct'.
+ - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference2.dart'.
+Try correcting the name to the name of an existing method, or defining a method named 'method'.
+  nonStruct.method(); // error
+            ^^^^^^" in invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference2.dart:59:3: Error: Non-nullable variable 'nonStruct' must be assigned before it can be used.
+  nonStruct.method(); // error
+  ^^^^^^^^^" in nonStruct{<unresolved>}.method();
+  invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference2.dart:60:13: Error: The setter 'property' isn't defined for the class 'NonStruct'.
+ - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference2.dart'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'property'.
+  nonStruct.property = nonStruct.property; // error
+            ^^^^^^^^" in invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference2.dart:60:3: Error: Non-nullable variable 'nonStruct' must be assigned before it can be used.
+  nonStruct.property = nonStruct.property; // error
+  ^^^^^^^^^" in nonStruct{<unresolved>}.property = invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference2.dart:60:34: Error: The getter 'property' isn't defined for the class 'NonStruct'.
+ - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference2.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'property'.
+  nonStruct.property = nonStruct.property; // error
+                                 ^^^^^^^^" in invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference2.dart:60:24: Error: Non-nullable variable 'nonStruct' must be assigned before it can be used.
+  nonStruct.property = nonStruct.property; // error
+                       ^^^^^^^^^" in nonStruct{<unresolved>}.property;
+  invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference2.dart:61:19: Error: The method 'method' isn't defined for the class 'NonStruct'.
+ - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference2.dart'.
+Try correcting the name to the name of an existing method, or defining a method named 'method'.
+  new NonStruct().method(); // error
+                  ^^^^^^" in new self::NonStruct::•(){<unresolved>}.method();
+  invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference2.dart:62:19: Error: The getter 'property' isn't defined for the class 'NonStruct'.
+ - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference2.dart'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'property'.
+  new NonStruct().property; // error
+                  ^^^^^^^^" in new self::NonStruct::•(){<unresolved>}.property;
+  invalid-expression "pkg/front_end/testcases/extensions/on_type_variable_inference2.dart:63:19: Error: The setter 'property' isn't defined for the class 'NonStruct'.
+ - 'NonStruct' is from 'pkg/front_end/testcases/extensions/on_type_variable_inference2.dart'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'property'.
+  new NonStruct().property = null; // error
+                  ^^^^^^^^" in new self::NonStruct::•(){<unresolved>}.property = null;
+}
diff --git a/pkg/front_end/testcases/extensions/operators.dart b/pkg/front_end/testcases/extensions/operators.dart
index 8e50810..17d5e27 100644
--- a/pkg/front_end/testcases/extensions/operators.dart
+++ b/pkg/front_end/testcases/extensions/operators.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2019, 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.
-// @dart=2.9
+
 class Complex {
   final double real;
   final double imaginary;
diff --git a/pkg/front_end/testcases/extensions/operators.dart.textual_outline.expect b/pkg/front_end/testcases/extensions/operators.dart.textual_outline.expect
index 3242e21..908102a 100644
--- a/pkg/front_end/testcases/extensions/operators.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/extensions/operators.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Complex {
   final double real;
   final double imaginary;
diff --git a/pkg/front_end/testcases/extensions/operators.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/extensions/operators.dart.textual_outline_modelled.expect
index a7a65c6..d77488d 100644
--- a/pkg/front_end/testcases/extensions/operators.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/extensions/operators.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Complex {
   Complex add(Complex other) {}
   Complex negate() {}
diff --git a/pkg/front_end/testcases/extensions/operators.dart.weak.expect b/pkg/front_end/testcases/extensions/operators.dart.weak.expect
index d97d9f4..7ee87a4 100644
--- a/pkg/front_end/testcases/extensions/operators.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/operators.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -14,58 +14,51 @@
 import "dart:core" as core;
 
 class Complex extends core::Object /*hasConstConstructor*/  {
-  final field core::double* real;
-  final field core::double* imaginary;
-  const constructor •(core::double* real, core::double* imaginary) → self::Complex*
+  final field core::double real;
+  final field core::double imaginary;
+  const constructor •(core::double real, core::double imaginary) → self::Complex
     : self::Complex::real = real, self::Complex::imaginary = imaginary, super core::Object::•()
     ;
-  method add(self::Complex* other) → self::Complex* {
-    return new self::Complex::•(this.{self::Complex::real}{core::double*}.{core::double::+}(other.{self::Complex::real}{core::double*}){(core::num*) →* core::double*}, this.{self::Complex::imaginary}{core::double*}.{core::double::+}(other.{self::Complex::imaginary}{core::double*}){(core::num*) →* core::double*});
+  method add(self::Complex other) → self::Complex {
+    return new self::Complex::•(this.{self::Complex::real}{core::double}.{core::double::+}(other.{self::Complex::real}{core::double}){(core::num) → core::double}, this.{self::Complex::imaginary}{core::double}.{core::double::+}(other.{self::Complex::imaginary}{core::double}){(core::num) → core::double});
   }
-  method sub(self::Complex* other) → self::Complex* {
-    return new self::Complex::•(this.{self::Complex::real}{core::double*}.{core::double::-}(other.{self::Complex::real}{core::double*}){(core::num*) →* core::double*}, this.{self::Complex::imaginary}{core::double*}.{core::double::-}(other.{self::Complex::imaginary}{core::double*}){(core::num*) →* core::double*});
+  method sub(self::Complex other) → self::Complex {
+    return new self::Complex::•(this.{self::Complex::real}{core::double}.{core::double::-}(other.{self::Complex::real}{core::double}){(core::num) → core::double}, this.{self::Complex::imaginary}{core::double}.{core::double::-}(other.{self::Complex::imaginary}{core::double}){(core::num) → core::double});
   }
-  method negate() → self::Complex* {
-    return new self::Complex::•(this.{self::Complex::real}{core::double*}.{core::double::unary-}(){() →* core::double*}, this.{self::Complex::imaginary}{core::double*}.{core::double::unary-}(){() →* core::double*});
+  method negate() → self::Complex {
+    return new self::Complex::•(this.{self::Complex::real}{core::double}.{core::double::unary-}(){() → core::double}, this.{self::Complex::imaginary}{core::double}.{core::double::unary-}(){() → core::double});
   }
-  get hashCode() → core::int*
-    return this.{self::Complex::real}{core::double*}.{core::num::hashCode}{core::int*}.{core::num::*}(13){(core::num*) →* core::int*}.{core::num::+}(this.{self::Complex::imaginary}{core::double*}.{core::num::hashCode}{core::int*}.{core::num::*}(19){(core::num*) →* core::int*}){(core::num*) →* core::int*};
-  operator ==(core::Object* other) → core::bool* {
+  get hashCode() → core::int
+    return this.{self::Complex::real}{core::double}.{core::num::hashCode}{core::int}.{core::num::*}(13){(core::num) → core::int}.{core::num::+}(this.{self::Complex::imaginary}{core::double}.{core::num::hashCode}{core::int}.{core::num::*}(19){(core::num) → core::int}){(core::num) → core::int};
+  operator ==(core::Object other) → core::bool {
     if(core::identical(this, other))
       return true;
-    return other is self::Complex* && this.{self::Complex::real}{core::double*} =={core::num::==}{(core::Object*) →* core::bool*} other{self::Complex*}.{self::Complex::real}{core::double*} && this.{self::Complex::imaginary}{core::double*} =={core::num::==}{(core::Object*) →* core::bool*} other{self::Complex*}.{self::Complex::imaginary}{core::double*};
+    return other is{ForNonNullableByDefault} self::Complex && this.{self::Complex::real}{core::double} =={core::num::==}{(core::Object) → core::bool} other{self::Complex}.{self::Complex::real}{core::double} && this.{self::Complex::imaginary}{core::double} =={core::num::==}{(core::Object) → core::bool} other{self::Complex}.{self::Complex::imaginary}{core::double};
   }
-  method toString() → core::String*
-    return "Complex(${this.{self::Complex::real}{core::double*}},${this.{self::Complex::imaginary}{core::double*}})";
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method toString() → core::String
+    return "Complex(${this.{self::Complex::real}{core::double}},${this.{self::Complex::imaginary}{core::double}})";
 }
-extension Operators on self::Complex* {
+extension Operators on self::Complex {
   operator + = self::Operators|+;
   operator - = self::Operators|-;
   operator unary- = self::Operators|unary-;
 }
-static method Operators|+(lowered final self::Complex* #this, self::Complex* other) → self::Complex*
-  return #this.{self::Complex::add}(other){(self::Complex*) →* self::Complex*};
-static method Operators|-(lowered final self::Complex* #this, self::Complex* other) → self::Complex*
-  return #this.{self::Complex::sub}(other){(self::Complex*) →* self::Complex*};
-static method Operators|unary-(lowered final self::Complex* #this) → self::Complex*
-  return #this.{self::Complex::negate}(){() →* self::Complex*};
+static method Operators|+(lowered final self::Complex #this, self::Complex other) → self::Complex
+  return #this.{self::Complex::add}(other){(self::Complex) → self::Complex};
+static method Operators|-(lowered final self::Complex #this, self::Complex other) → self::Complex
+  return #this.{self::Complex::sub}(other){(self::Complex) → self::Complex};
+static method Operators|unary-(lowered final self::Complex #this) → self::Complex
+  return #this.{self::Complex::negate}(){() → self::Complex};
 static method main() → dynamic {
   self::implicit();
   self::explicit();
 }
 static method implicit() → dynamic {
-  self::Complex* c_m2 = new self::Complex::•(-2.0, 2.0);
-  self::Complex* c_m1 = new self::Complex::•(-1.0, 1.0);
-  self::Complex* c0 = new self::Complex::•(0.0, 0.0);
-  self::Complex* c1 = new self::Complex::•(1.0, -1.0);
-  self::Complex* c2 = new self::Complex::•(2.0, -2.0);
+  self::Complex c_m2 = new self::Complex::•(-2.0, 2.0);
+  self::Complex c_m1 = new self::Complex::•(-1.0, 1.0);
+  self::Complex c0 = new self::Complex::•(0.0, 0.0);
+  self::Complex c1 = new self::Complex::•(1.0, -1.0);
+  self::Complex c2 = new self::Complex::•(2.0, -2.0);
   self::expect(c_m2, self::Operators|+(c0, c_m2));
   self::expect(c_m2, self::Operators|+(c_m2, c0));
   self::expect(c_m2, self::Operators|+(c_m1, c_m1));
@@ -97,11 +90,11 @@
   self::expect(c0, self::Operators|unary-(c0));
 }
 static method explicit() → dynamic {
-  self::Complex* c_m2 = new self::Complex::•(-2.0, 2.0);
-  self::Complex* c_m1 = new self::Complex::•(-1.0, 1.0);
-  self::Complex* c0 = new self::Complex::•(0.0, 0.0);
-  self::Complex* c1 = new self::Complex::•(1.0, -1.0);
-  self::Complex* c2 = new self::Complex::•(2.0, -2.0);
+  self::Complex c_m2 = new self::Complex::•(-2.0, 2.0);
+  self::Complex c_m1 = new self::Complex::•(-1.0, 1.0);
+  self::Complex c0 = new self::Complex::•(0.0, 0.0);
+  self::Complex c1 = new self::Complex::•(1.0, -1.0);
+  self::Complex c2 = new self::Complex::•(2.0, -2.0);
   self::expect(c_m2, self::Operators|+(c0, c_m2));
   self::expect(c_m2, self::Operators|+(c_m2, c0));
   self::expect(c_m2, self::Operators|+(c_m1, c_m1));
@@ -132,16 +125,16 @@
   self::expect(c0, self::Operators|-(c_m2, c_m2));
   self::expect(c0, self::Operators|unary-(c0));
 }
-static method errors(self::Complex* c) → void {
+static method errors(self::Complex c) → void {
   invalid-expression "pkg/front_end/testcases/extensions/operators.dart:125:3: Error: Explicit extension application cannot be used as an expression.
   Operators(c) == c;
-  ^^^^^^^^^" =={core::Object::==}{(core::Object*) →* core::bool*} c;
+  ^^^^^^^^^" =={core::Object::==}{(core::Object) → core::bool} c;
   !(invalid-expression "pkg/front_end/testcases/extensions/operators.dart:126:3: Error: Explicit extension application cannot be used as an expression.
   Operators(c) != c;
-  ^^^^^^^^^" =={core::Object::==}{(core::Object*) →* core::bool*} c);
+  ^^^^^^^^^" =={core::Object::==}{(core::Object) → core::bool} c);
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual)) {
     throw "Mismatch: expected=${expected}, actual=${actual}";
   }
 }
diff --git a/pkg/front_end/testcases/extensions/operators.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/operators.dart.weak.modular.expect
index d97d9f4..7ee87a4 100644
--- a/pkg/front_end/testcases/extensions/operators.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/extensions/operators.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -14,58 +14,51 @@
 import "dart:core" as core;
 
 class Complex extends core::Object /*hasConstConstructor*/  {
-  final field core::double* real;
-  final field core::double* imaginary;
-  const constructor •(core::double* real, core::double* imaginary) → self::Complex*
+  final field core::double real;
+  final field core::double imaginary;
+  const constructor •(core::double real, core::double imaginary) → self::Complex
     : self::Complex::real = real, self::Complex::imaginary = imaginary, super core::Object::•()
     ;
-  method add(self::Complex* other) → self::Complex* {
-    return new self::Complex::•(this.{self::Complex::real}{core::double*}.{core::double::+}(other.{self::Complex::real}{core::double*}){(core::num*) →* core::double*}, this.{self::Complex::imaginary}{core::double*}.{core::double::+}(other.{self::Complex::imaginary}{core::double*}){(core::num*) →* core::double*});
+  method add(self::Complex other) → self::Complex {
+    return new self::Complex::•(this.{self::Complex::real}{core::double}.{core::double::+}(other.{self::Complex::real}{core::double}){(core::num) → core::double}, this.{self::Complex::imaginary}{core::double}.{core::double::+}(other.{self::Complex::imaginary}{core::double}){(core::num) → core::double});
   }
-  method sub(self::Complex* other) → self::Complex* {
-    return new self::Complex::•(this.{self::Complex::real}{core::double*}.{core::double::-}(other.{self::Complex::real}{core::double*}){(core::num*) →* core::double*}, this.{self::Complex::imaginary}{core::double*}.{core::double::-}(other.{self::Complex::imaginary}{core::double*}){(core::num*) →* core::double*});
+  method sub(self::Complex other) → self::Complex {
+    return new self::Complex::•(this.{self::Complex::real}{core::double}.{core::double::-}(other.{self::Complex::real}{core::double}){(core::num) → core::double}, this.{self::Complex::imaginary}{core::double}.{core::double::-}(other.{self::Complex::imaginary}{core::double}){(core::num) → core::double});
   }
-  method negate() → self::Complex* {
-    return new self::Complex::•(this.{self::Complex::real}{core::double*}.{core::double::unary-}(){() →* core::double*}, this.{self::Complex::imaginary}{core::double*}.{core::double::unary-}(){() →* core::double*});
+  method negate() → self::Complex {
+    return new self::Complex::•(this.{self::Complex::real}{core::double}.{core::double::unary-}(){() → core::double}, this.{self::Complex::imaginary}{core::double}.{core::double::unary-}(){() → core::double});
   }
-  get hashCode() → core::int*
-    return this.{self::Complex::real}{core::double*}.{core::num::hashCode}{core::int*}.{core::num::*}(13){(core::num*) →* core::int*}.{core::num::+}(this.{self::Complex::imaginary}{core::double*}.{core::num::hashCode}{core::int*}.{core::num::*}(19){(core::num*) →* core::int*}){(core::num*) →* core::int*};
-  operator ==(core::Object* other) → core::bool* {
+  get hashCode() → core::int
+    return this.{self::Complex::real}{core::double}.{core::num::hashCode}{core::int}.{core::num::*}(13){(core::num) → core::int}.{core::num::+}(this.{self::Complex::imaginary}{core::double}.{core::num::hashCode}{core::int}.{core::num::*}(19){(core::num) → core::int}){(core::num) → core::int};
+  operator ==(core::Object other) → core::bool {
     if(core::identical(this, other))
       return true;
-    return other is self::Complex* && this.{self::Complex::real}{core::double*} =={core::num::==}{(core::Object*) →* core::bool*} other{self::Complex*}.{self::Complex::real}{core::double*} && this.{self::Complex::imaginary}{core::double*} =={core::num::==}{(core::Object*) →* core::bool*} other{self::Complex*}.{self::Complex::imaginary}{core::double*};
+    return other is{ForNonNullableByDefault} self::Complex && this.{self::Complex::real}{core::double} =={core::num::==}{(core::Object) → core::bool} other{self::Complex}.{self::Complex::real}{core::double} && this.{self::Complex::imaginary}{core::double} =={core::num::==}{(core::Object) → core::bool} other{self::Complex}.{self::Complex::imaginary}{core::double};
   }
-  method toString() → core::String*
-    return "Complex(${this.{self::Complex::real}{core::double*}},${this.{self::Complex::imaginary}{core::double*}})";
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method toString() → core::String
+    return "Complex(${this.{self::Complex::real}{core::double}},${this.{self::Complex::imaginary}{core::double}})";
 }
-extension Operators on self::Complex* {
+extension Operators on self::Complex {
   operator + = self::Operators|+;
   operator - = self::Operators|-;
   operator unary- = self::Operators|unary-;
 }
-static method Operators|+(lowered final self::Complex* #this, self::Complex* other) → self::Complex*
-  return #this.{self::Complex::add}(other){(self::Complex*) →* self::Complex*};
-static method Operators|-(lowered final self::Complex* #this, self::Complex* other) → self::Complex*
-  return #this.{self::Complex::sub}(other){(self::Complex*) →* self::Complex*};
-static method Operators|unary-(lowered final self::Complex* #this) → self::Complex*
-  return #this.{self::Complex::negate}(){() →* self::Complex*};
+static method Operators|+(lowered final self::Complex #this, self::Complex other) → self::Complex
+  return #this.{self::Complex::add}(other){(self::Complex) → self::Complex};
+static method Operators|-(lowered final self::Complex #this, self::Complex other) → self::Complex
+  return #this.{self::Complex::sub}(other){(self::Complex) → self::Complex};
+static method Operators|unary-(lowered final self::Complex #this) → self::Complex
+  return #this.{self::Complex::negate}(){() → self::Complex};
 static method main() → dynamic {
   self::implicit();
   self::explicit();
 }
 static method implicit() → dynamic {
-  self::Complex* c_m2 = new self::Complex::•(-2.0, 2.0);
-  self::Complex* c_m1 = new self::Complex::•(-1.0, 1.0);
-  self::Complex* c0 = new self::Complex::•(0.0, 0.0);
-  self::Complex* c1 = new self::Complex::•(1.0, -1.0);
-  self::Complex* c2 = new self::Complex::•(2.0, -2.0);
+  self::Complex c_m2 = new self::Complex::•(-2.0, 2.0);
+  self::Complex c_m1 = new self::Complex::•(-1.0, 1.0);
+  self::Complex c0 = new self::Complex::•(0.0, 0.0);
+  self::Complex c1 = new self::Complex::•(1.0, -1.0);
+  self::Complex c2 = new self::Complex::•(2.0, -2.0);
   self::expect(c_m2, self::Operators|+(c0, c_m2));
   self::expect(c_m2, self::Operators|+(c_m2, c0));
   self::expect(c_m2, self::Operators|+(c_m1, c_m1));
@@ -97,11 +90,11 @@
   self::expect(c0, self::Operators|unary-(c0));
 }
 static method explicit() → dynamic {
-  self::Complex* c_m2 = new self::Complex::•(-2.0, 2.0);
-  self::Complex* c_m1 = new self::Complex::•(-1.0, 1.0);
-  self::Complex* c0 = new self::Complex::•(0.0, 0.0);
-  self::Complex* c1 = new self::Complex::•(1.0, -1.0);
-  self::Complex* c2 = new self::Complex::•(2.0, -2.0);
+  self::Complex c_m2 = new self::Complex::•(-2.0, 2.0);
+  self::Complex c_m1 = new self::Complex::•(-1.0, 1.0);
+  self::Complex c0 = new self::Complex::•(0.0, 0.0);
+  self::Complex c1 = new self::Complex::•(1.0, -1.0);
+  self::Complex c2 = new self::Complex::•(2.0, -2.0);
   self::expect(c_m2, self::Operators|+(c0, c_m2));
   self::expect(c_m2, self::Operators|+(c_m2, c0));
   self::expect(c_m2, self::Operators|+(c_m1, c_m1));
@@ -132,16 +125,16 @@
   self::expect(c0, self::Operators|-(c_m2, c_m2));
   self::expect(c0, self::Operators|unary-(c0));
 }
-static method errors(self::Complex* c) → void {
+static method errors(self::Complex c) → void {
   invalid-expression "pkg/front_end/testcases/extensions/operators.dart:125:3: Error: Explicit extension application cannot be used as an expression.
   Operators(c) == c;
-  ^^^^^^^^^" =={core::Object::==}{(core::Object*) →* core::bool*} c;
+  ^^^^^^^^^" =={core::Object::==}{(core::Object) → core::bool} c;
   !(invalid-expression "pkg/front_end/testcases/extensions/operators.dart:126:3: Error: Explicit extension application cannot be used as an expression.
   Operators(c) != c;
-  ^^^^^^^^^" =={core::Object::==}{(core::Object*) →* core::bool*} c);
+  ^^^^^^^^^" =={core::Object::==}{(core::Object) → core::bool} c);
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual)) {
     throw "Mismatch: expected=${expected}, actual=${actual}";
   }
 }
diff --git a/pkg/front_end/testcases/extensions/operators.dart.weak.outline.expect b/pkg/front_end/testcases/extensions/operators.dart.weak.outline.expect
index 479c1d6..75596b2 100644
--- a/pkg/front_end/testcases/extensions/operators.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extensions/operators.dart.weak.outline.expect
@@ -1,43 +1,36 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Complex extends core::Object /*hasConstConstructor*/  {
-  final field core::double* real;
-  final field core::double* imaginary;
-  const constructor •(core::double* real, core::double* imaginary) → self::Complex*
+  final field core::double real;
+  final field core::double imaginary;
+  const constructor •(core::double real, core::double imaginary) → self::Complex
     : self::Complex::real = real, self::Complex::imaginary = imaginary, super core::Object::•()
     ;
-  method add(self::Complex* other) → self::Complex*
+  method add(self::Complex other) → self::Complex
     ;
-  method sub(self::Complex* other) → self::Complex*
+  method sub(self::Complex other) → self::Complex
     ;
-  method negate() → self::Complex*
+  method negate() → self::Complex
     ;
-  get hashCode() → core::int*
+  get hashCode() → core::int
     ;
-  operator ==(core::Object* other) → core::bool*
+  operator ==(core::Object other) → core::bool
     ;
-  method toString() → core::String*
+  method toString() → core::String
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension Operators on self::Complex* {
+extension Operators on self::Complex {
   operator + = self::Operators|+;
   operator - = self::Operators|-;
   operator unary- = self::Operators|unary-;
 }
-static method Operators|+(lowered 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|-(lowered 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-(lowered final self::Complex* #this) → self::Complex*
+static method Operators|unary-(lowered final self::Complex #this) → self::Complex
   ;
 static method main() → dynamic
   ;
@@ -45,7 +38,7 @@
   ;
 static method explicit() → dynamic
   ;
-static method errors(self::Complex* c) → void
+static method errors(self::Complex c) → void
   ;
 static method expect(dynamic expected, dynamic actual) → dynamic
   ;
diff --git a/pkg/front_end/testcases/extensions/operators.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/operators.dart.weak.transformed.expect
index d97d9f4..7ee87a4 100644
--- a/pkg/front_end/testcases/extensions/operators.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/operators.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -14,58 +14,51 @@
 import "dart:core" as core;
 
 class Complex extends core::Object /*hasConstConstructor*/  {
-  final field core::double* real;
-  final field core::double* imaginary;
-  const constructor •(core::double* real, core::double* imaginary) → self::Complex*
+  final field core::double real;
+  final field core::double imaginary;
+  const constructor •(core::double real, core::double imaginary) → self::Complex
     : self::Complex::real = real, self::Complex::imaginary = imaginary, super core::Object::•()
     ;
-  method add(self::Complex* other) → self::Complex* {
-    return new self::Complex::•(this.{self::Complex::real}{core::double*}.{core::double::+}(other.{self::Complex::real}{core::double*}){(core::num*) →* core::double*}, this.{self::Complex::imaginary}{core::double*}.{core::double::+}(other.{self::Complex::imaginary}{core::double*}){(core::num*) →* core::double*});
+  method add(self::Complex other) → self::Complex {
+    return new self::Complex::•(this.{self::Complex::real}{core::double}.{core::double::+}(other.{self::Complex::real}{core::double}){(core::num) → core::double}, this.{self::Complex::imaginary}{core::double}.{core::double::+}(other.{self::Complex::imaginary}{core::double}){(core::num) → core::double});
   }
-  method sub(self::Complex* other) → self::Complex* {
-    return new self::Complex::•(this.{self::Complex::real}{core::double*}.{core::double::-}(other.{self::Complex::real}{core::double*}){(core::num*) →* core::double*}, this.{self::Complex::imaginary}{core::double*}.{core::double::-}(other.{self::Complex::imaginary}{core::double*}){(core::num*) →* core::double*});
+  method sub(self::Complex other) → self::Complex {
+    return new self::Complex::•(this.{self::Complex::real}{core::double}.{core::double::-}(other.{self::Complex::real}{core::double}){(core::num) → core::double}, this.{self::Complex::imaginary}{core::double}.{core::double::-}(other.{self::Complex::imaginary}{core::double}){(core::num) → core::double});
   }
-  method negate() → self::Complex* {
-    return new self::Complex::•(this.{self::Complex::real}{core::double*}.{core::double::unary-}(){() →* core::double*}, this.{self::Complex::imaginary}{core::double*}.{core::double::unary-}(){() →* core::double*});
+  method negate() → self::Complex {
+    return new self::Complex::•(this.{self::Complex::real}{core::double}.{core::double::unary-}(){() → core::double}, this.{self::Complex::imaginary}{core::double}.{core::double::unary-}(){() → core::double});
   }
-  get hashCode() → core::int*
-    return this.{self::Complex::real}{core::double*}.{core::num::hashCode}{core::int*}.{core::num::*}(13){(core::num*) →* core::int*}.{core::num::+}(this.{self::Complex::imaginary}{core::double*}.{core::num::hashCode}{core::int*}.{core::num::*}(19){(core::num*) →* core::int*}){(core::num*) →* core::int*};
-  operator ==(core::Object* other) → core::bool* {
+  get hashCode() → core::int
+    return this.{self::Complex::real}{core::double}.{core::num::hashCode}{core::int}.{core::num::*}(13){(core::num) → core::int}.{core::num::+}(this.{self::Complex::imaginary}{core::double}.{core::num::hashCode}{core::int}.{core::num::*}(19){(core::num) → core::int}){(core::num) → core::int};
+  operator ==(core::Object other) → core::bool {
     if(core::identical(this, other))
       return true;
-    return other is self::Complex* && this.{self::Complex::real}{core::double*} =={core::num::==}{(core::Object*) →* core::bool*} other{self::Complex*}.{self::Complex::real}{core::double*} && this.{self::Complex::imaginary}{core::double*} =={core::num::==}{(core::Object*) →* core::bool*} other{self::Complex*}.{self::Complex::imaginary}{core::double*};
+    return other is{ForNonNullableByDefault} self::Complex && this.{self::Complex::real}{core::double} =={core::num::==}{(core::Object) → core::bool} other{self::Complex}.{self::Complex::real}{core::double} && this.{self::Complex::imaginary}{core::double} =={core::num::==}{(core::Object) → core::bool} other{self::Complex}.{self::Complex::imaginary}{core::double};
   }
-  method toString() → core::String*
-    return "Complex(${this.{self::Complex::real}{core::double*}},${this.{self::Complex::imaginary}{core::double*}})";
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method toString() → core::String
+    return "Complex(${this.{self::Complex::real}{core::double}},${this.{self::Complex::imaginary}{core::double}})";
 }
-extension Operators on self::Complex* {
+extension Operators on self::Complex {
   operator + = self::Operators|+;
   operator - = self::Operators|-;
   operator unary- = self::Operators|unary-;
 }
-static method Operators|+(lowered final self::Complex* #this, self::Complex* other) → self::Complex*
-  return #this.{self::Complex::add}(other){(self::Complex*) →* self::Complex*};
-static method Operators|-(lowered final self::Complex* #this, self::Complex* other) → self::Complex*
-  return #this.{self::Complex::sub}(other){(self::Complex*) →* self::Complex*};
-static method Operators|unary-(lowered final self::Complex* #this) → self::Complex*
-  return #this.{self::Complex::negate}(){() →* self::Complex*};
+static method Operators|+(lowered final self::Complex #this, self::Complex other) → self::Complex
+  return #this.{self::Complex::add}(other){(self::Complex) → self::Complex};
+static method Operators|-(lowered final self::Complex #this, self::Complex other) → self::Complex
+  return #this.{self::Complex::sub}(other){(self::Complex) → self::Complex};
+static method Operators|unary-(lowered final self::Complex #this) → self::Complex
+  return #this.{self::Complex::negate}(){() → self::Complex};
 static method main() → dynamic {
   self::implicit();
   self::explicit();
 }
 static method implicit() → dynamic {
-  self::Complex* c_m2 = new self::Complex::•(-2.0, 2.0);
-  self::Complex* c_m1 = new self::Complex::•(-1.0, 1.0);
-  self::Complex* c0 = new self::Complex::•(0.0, 0.0);
-  self::Complex* c1 = new self::Complex::•(1.0, -1.0);
-  self::Complex* c2 = new self::Complex::•(2.0, -2.0);
+  self::Complex c_m2 = new self::Complex::•(-2.0, 2.0);
+  self::Complex c_m1 = new self::Complex::•(-1.0, 1.0);
+  self::Complex c0 = new self::Complex::•(0.0, 0.0);
+  self::Complex c1 = new self::Complex::•(1.0, -1.0);
+  self::Complex c2 = new self::Complex::•(2.0, -2.0);
   self::expect(c_m2, self::Operators|+(c0, c_m2));
   self::expect(c_m2, self::Operators|+(c_m2, c0));
   self::expect(c_m2, self::Operators|+(c_m1, c_m1));
@@ -97,11 +90,11 @@
   self::expect(c0, self::Operators|unary-(c0));
 }
 static method explicit() → dynamic {
-  self::Complex* c_m2 = new self::Complex::•(-2.0, 2.0);
-  self::Complex* c_m1 = new self::Complex::•(-1.0, 1.0);
-  self::Complex* c0 = new self::Complex::•(0.0, 0.0);
-  self::Complex* c1 = new self::Complex::•(1.0, -1.0);
-  self::Complex* c2 = new self::Complex::•(2.0, -2.0);
+  self::Complex c_m2 = new self::Complex::•(-2.0, 2.0);
+  self::Complex c_m1 = new self::Complex::•(-1.0, 1.0);
+  self::Complex c0 = new self::Complex::•(0.0, 0.0);
+  self::Complex c1 = new self::Complex::•(1.0, -1.0);
+  self::Complex c2 = new self::Complex::•(2.0, -2.0);
   self::expect(c_m2, self::Operators|+(c0, c_m2));
   self::expect(c_m2, self::Operators|+(c_m2, c0));
   self::expect(c_m2, self::Operators|+(c_m1, c_m1));
@@ -132,16 +125,16 @@
   self::expect(c0, self::Operators|-(c_m2, c_m2));
   self::expect(c0, self::Operators|unary-(c0));
 }
-static method errors(self::Complex* c) → void {
+static method errors(self::Complex c) → void {
   invalid-expression "pkg/front_end/testcases/extensions/operators.dart:125:3: Error: Explicit extension application cannot be used as an expression.
   Operators(c) == c;
-  ^^^^^^^^^" =={core::Object::==}{(core::Object*) →* core::bool*} c;
+  ^^^^^^^^^" =={core::Object::==}{(core::Object) → core::bool} c;
   !(invalid-expression "pkg/front_end/testcases/extensions/operators.dart:126:3: Error: Explicit extension application cannot be used as an expression.
   Operators(c) != c;
-  ^^^^^^^^^" =={core::Object::==}{(core::Object*) →* core::bool*} c);
+  ^^^^^^^^^" =={core::Object::==}{(core::Object) → core::bool} c);
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual)) {
     throw "Mismatch: expected=${expected}, actual=${actual}";
   }
 }
diff --git a/pkg/front_end/testcases/extensions/other_kinds.dart b/pkg/front_end/testcases/extensions/other_kinds.dart
index cefe49f..91046a3 100644
--- a/pkg/front_end/testcases/extensions/other_kinds.dart
+++ b/pkg/front_end/testcases/extensions/other_kinds.dart
@@ -1,9 +1,9 @@
 // Copyright (c) 2019, 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.
-// @dart=2.9
+
 class A1 {
-  int _instanceField;
+  int _instanceField = 0;
   int getInstanceField() => _instanceField;
   void setInstanceField(int value) {
     _instanceField = value;
diff --git a/pkg/front_end/testcases/extensions/other_kinds.dart.textual_outline.expect b/pkg/front_end/testcases/extensions/other_kinds.dart.textual_outline.expect
index 70739a0..b57e67b 100644
--- a/pkg/front_end/testcases/extensions/other_kinds.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/extensions/other_kinds.dart.textual_outline.expect
@@ -1,6 +1,5 @@
-// @dart = 2.9
 class A1 {
-  int _instanceField;
+  int _instanceField = 0;
   int getInstanceField() => _instanceField;
   void setInstanceField(int value) {}
   static int _staticField = 0;
diff --git a/pkg/front_end/testcases/extensions/other_kinds.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/extensions/other_kinds.dart.textual_outline_modelled.expect
index ceb2b26..1691357 100644
--- a/pkg/front_end/testcases/extensions/other_kinds.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/extensions/other_kinds.dart.textual_outline_modelled.expect
@@ -1,6 +1,5 @@
-// @dart = 2.9
 class A1 {
-  int _instanceField;
+  int _instanceField = 0;
   int getInstanceField() => _instanceField;
   static int _staticField = 0;
   static int getStaticField() => _staticField;
diff --git a/pkg/front_end/testcases/extensions/other_kinds.dart.weak.expect b/pkg/front_end/testcases/extensions/other_kinds.dart.weak.expect
index 5a567f7..267a00e 100644
--- a/pkg/front_end/testcases/extensions/other_kinds.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/other_kinds.dart.weak.expect
@@ -1,35 +1,25 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A1 extends core::Object {
-  field core::int* _instanceField = null;
-  static field core::int* _staticField = 0;
-  synthetic constructor •() → self::A1*
+  field core::int _instanceField = 0;
+  static field core::int _staticField = 0;
+  synthetic constructor •() → self::A1
     : super core::Object::•()
     ;
-  method getInstanceField() → core::int*
-    return this.{self::A1::_instanceField}{core::int*};
-  method setInstanceField(core::int* value) → void {
+  method getInstanceField() → core::int
+    return this.{self::A1::_instanceField}{core::int};
+  method setInstanceField(core::int value) → void {
     this.{self::A1::_instanceField} = value;
   }
-  static method getStaticField() → core::int*
+  static method getStaticField() → core::int
     return self::A1::_staticField;
-  static method setStaticField(core::int* value) → void {
+  static method setStaticField(core::int value) → void {
     self::A1::_staticField = value;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension A2 on self::A1* {
+extension A2 on self::A1 {
   get instanceProperty = self::A2|get#instanceProperty;
   operator + = self::A2|+;
   operator - = self::A2|-;
@@ -39,24 +29,24 @@
   set instanceProperty = self::A2|set#instanceProperty;
   static set staticProperty = set self::A2|staticProperty;
 }
-static field core::int* A2|staticField = self::A1::getStaticField();
-static method A2|get#instanceProperty(lowered final self::A1* #this) → core::int*
-  return #this.{self::A1::getInstanceField}(){() →* core::int*};
-static method A2|set#instanceProperty(lowered final self::A1* #this, core::int* value) → void {
-  #this.{self::A1::setInstanceField}(value){(core::int*) →* void};
+static field core::int A2|staticField = self::A1::getStaticField();
+static method A2|get#instanceProperty(lowered final self::A1 #this) → core::int
+  return #this.{self::A1::getInstanceField}(){() → core::int};
+static method A2|set#instanceProperty(lowered final self::A1 #this, core::int value) → void {
+  #this.{self::A1::setInstanceField}(value){(core::int) → void};
 }
-static method A2|+(lowered final self::A1* #this, core::int* value) → core::int* {
-  return #this.{self::A1::getInstanceField}(){() →* core::int*}.{core::num::+}(value){(core::num*) →* core::int*};
+static method A2|+(lowered final self::A1 #this, core::int value) → core::int {
+  return #this.{self::A1::getInstanceField}(){() → core::int}.{core::num::+}(value){(core::num) → core::int};
 }
-static method A2|-(lowered final self::A1* #this, core::int* value) → core::int* {
-  return #this.{self::A1::getInstanceField}(){() →* core::int*}.{core::num::-}(value){(core::num*) →* core::int*};
+static method A2|-(lowered final self::A1 #this, core::int value) → core::int {
+  return #this.{self::A1::getInstanceField}(){() → core::int}.{core::num::-}(value){(core::num) → core::int};
 }
-static method A2|unary-(lowered final self::A1* #this) → core::int* {
-  return #this.{self::A1::getInstanceField}(){() →* core::int*}.{core::int::unary-}(){() →* core::int*};
+static method A2|unary-(lowered final self::A1 #this) → core::int {
+  return #this.{self::A1::getInstanceField}(){() → core::int}.{core::int::unary-}(){() → core::int};
 }
-static get A2|staticProperty() → core::int*
+static get A2|staticProperty() → core::int
   return self::A1::getStaticField();
-static set A2|staticProperty(core::int* value) → void {
+static set A2|staticProperty(core::int value) → void {
   self::A1::setStaticField(value);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extensions/other_kinds.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/other_kinds.dart.weak.modular.expect
index 5a567f7..267a00e 100644
--- a/pkg/front_end/testcases/extensions/other_kinds.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/extensions/other_kinds.dart.weak.modular.expect
@@ -1,35 +1,25 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A1 extends core::Object {
-  field core::int* _instanceField = null;
-  static field core::int* _staticField = 0;
-  synthetic constructor •() → self::A1*
+  field core::int _instanceField = 0;
+  static field core::int _staticField = 0;
+  synthetic constructor •() → self::A1
     : super core::Object::•()
     ;
-  method getInstanceField() → core::int*
-    return this.{self::A1::_instanceField}{core::int*};
-  method setInstanceField(core::int* value) → void {
+  method getInstanceField() → core::int
+    return this.{self::A1::_instanceField}{core::int};
+  method setInstanceField(core::int value) → void {
     this.{self::A1::_instanceField} = value;
   }
-  static method getStaticField() → core::int*
+  static method getStaticField() → core::int
     return self::A1::_staticField;
-  static method setStaticField(core::int* value) → void {
+  static method setStaticField(core::int value) → void {
     self::A1::_staticField = value;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension A2 on self::A1* {
+extension A2 on self::A1 {
   get instanceProperty = self::A2|get#instanceProperty;
   operator + = self::A2|+;
   operator - = self::A2|-;
@@ -39,24 +29,24 @@
   set instanceProperty = self::A2|set#instanceProperty;
   static set staticProperty = set self::A2|staticProperty;
 }
-static field core::int* A2|staticField = self::A1::getStaticField();
-static method A2|get#instanceProperty(lowered final self::A1* #this) → core::int*
-  return #this.{self::A1::getInstanceField}(){() →* core::int*};
-static method A2|set#instanceProperty(lowered final self::A1* #this, core::int* value) → void {
-  #this.{self::A1::setInstanceField}(value){(core::int*) →* void};
+static field core::int A2|staticField = self::A1::getStaticField();
+static method A2|get#instanceProperty(lowered final self::A1 #this) → core::int
+  return #this.{self::A1::getInstanceField}(){() → core::int};
+static method A2|set#instanceProperty(lowered final self::A1 #this, core::int value) → void {
+  #this.{self::A1::setInstanceField}(value){(core::int) → void};
 }
-static method A2|+(lowered final self::A1* #this, core::int* value) → core::int* {
-  return #this.{self::A1::getInstanceField}(){() →* core::int*}.{core::num::+}(value){(core::num*) →* core::int*};
+static method A2|+(lowered final self::A1 #this, core::int value) → core::int {
+  return #this.{self::A1::getInstanceField}(){() → core::int}.{core::num::+}(value){(core::num) → core::int};
 }
-static method A2|-(lowered final self::A1* #this, core::int* value) → core::int* {
-  return #this.{self::A1::getInstanceField}(){() →* core::int*}.{core::num::-}(value){(core::num*) →* core::int*};
+static method A2|-(lowered final self::A1 #this, core::int value) → core::int {
+  return #this.{self::A1::getInstanceField}(){() → core::int}.{core::num::-}(value){(core::num) → core::int};
 }
-static method A2|unary-(lowered final self::A1* #this) → core::int* {
-  return #this.{self::A1::getInstanceField}(){() →* core::int*}.{core::int::unary-}(){() →* core::int*};
+static method A2|unary-(lowered final self::A1 #this) → core::int {
+  return #this.{self::A1::getInstanceField}(){() → core::int}.{core::int::unary-}(){() → core::int};
 }
-static get A2|staticProperty() → core::int*
+static get A2|staticProperty() → core::int
   return self::A1::getStaticField();
-static set A2|staticProperty(core::int* value) → void {
+static set A2|staticProperty(core::int value) → void {
   self::A1::setStaticField(value);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extensions/other_kinds.dart.weak.outline.expect b/pkg/front_end/testcases/extensions/other_kinds.dart.weak.outline.expect
index e2dcbf5..8a9fd95 100644
--- a/pkg/front_end/testcases/extensions/other_kinds.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extensions/other_kinds.dart.weak.outline.expect
@@ -1,32 +1,22 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A1 extends core::Object {
-  field core::int* _instanceField;
-  static field core::int* _staticField;
-  synthetic constructor •() → self::A1*
+  field core::int _instanceField;
+  static field core::int _staticField;
+  synthetic constructor •() → self::A1
     ;
-  method getInstanceField() → core::int*
+  method getInstanceField() → core::int
     ;
-  method setInstanceField(core::int* value) → void
+  method setInstanceField(core::int value) → void
     ;
-  static method getStaticField() → core::int*
+  static method getStaticField() → core::int
     ;
-  static method setStaticField(core::int* value) → void
+  static method setStaticField(core::int value) → void
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension A2 on self::A1* {
+extension A2 on self::A1 {
   get instanceProperty = self::A2|get#instanceProperty;
   operator + = self::A2|+;
   operator - = self::A2|-;
@@ -36,20 +26,20 @@
   set instanceProperty = self::A2|set#instanceProperty;
   static set staticProperty = set self::A2|staticProperty;
 }
-static field core::int* A2|staticField;
-static method A2|get#instanceProperty(lowered final self::A1* #this) → core::int*
+static field core::int A2|staticField;
+static method A2|get#instanceProperty(lowered final self::A1 #this) → core::int
   ;
-static method A2|set#instanceProperty(lowered 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|+(lowered 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|-(lowered 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-(lowered final self::A1* #this) → core::int*
+static method A2|unary-(lowered final self::A1 #this) → core::int
   ;
-static get A2|staticProperty() → core::int*
+static get A2|staticProperty() → core::int
   ;
-static set A2|staticProperty(core::int* value) → void
+static set A2|staticProperty(core::int value) → void
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/extensions/other_kinds.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/other_kinds.dart.weak.transformed.expect
index 5a567f7..267a00e 100644
--- a/pkg/front_end/testcases/extensions/other_kinds.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/other_kinds.dart.weak.transformed.expect
@@ -1,35 +1,25 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A1 extends core::Object {
-  field core::int* _instanceField = null;
-  static field core::int* _staticField = 0;
-  synthetic constructor •() → self::A1*
+  field core::int _instanceField = 0;
+  static field core::int _staticField = 0;
+  synthetic constructor •() → self::A1
     : super core::Object::•()
     ;
-  method getInstanceField() → core::int*
-    return this.{self::A1::_instanceField}{core::int*};
-  method setInstanceField(core::int* value) → void {
+  method getInstanceField() → core::int
+    return this.{self::A1::_instanceField}{core::int};
+  method setInstanceField(core::int value) → void {
     this.{self::A1::_instanceField} = value;
   }
-  static method getStaticField() → core::int*
+  static method getStaticField() → core::int
     return self::A1::_staticField;
-  static method setStaticField(core::int* value) → void {
+  static method setStaticField(core::int value) → void {
     self::A1::_staticField = value;
   }
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension A2 on self::A1* {
+extension A2 on self::A1 {
   get instanceProperty = self::A2|get#instanceProperty;
   operator + = self::A2|+;
   operator - = self::A2|-;
@@ -39,24 +29,24 @@
   set instanceProperty = self::A2|set#instanceProperty;
   static set staticProperty = set self::A2|staticProperty;
 }
-static field core::int* A2|staticField = self::A1::getStaticField();
-static method A2|get#instanceProperty(lowered final self::A1* #this) → core::int*
-  return #this.{self::A1::getInstanceField}(){() →* core::int*};
-static method A2|set#instanceProperty(lowered final self::A1* #this, core::int* value) → void {
-  #this.{self::A1::setInstanceField}(value){(core::int*) →* void};
+static field core::int A2|staticField = self::A1::getStaticField();
+static method A2|get#instanceProperty(lowered final self::A1 #this) → core::int
+  return #this.{self::A1::getInstanceField}(){() → core::int};
+static method A2|set#instanceProperty(lowered final self::A1 #this, core::int value) → void {
+  #this.{self::A1::setInstanceField}(value){(core::int) → void};
 }
-static method A2|+(lowered final self::A1* #this, core::int* value) → core::int* {
-  return #this.{self::A1::getInstanceField}(){() →* core::int*}.{core::num::+}(value){(core::num*) →* core::int*};
+static method A2|+(lowered final self::A1 #this, core::int value) → core::int {
+  return #this.{self::A1::getInstanceField}(){() → core::int}.{core::num::+}(value){(core::num) → core::int};
 }
-static method A2|-(lowered final self::A1* #this, core::int* value) → core::int* {
-  return #this.{self::A1::getInstanceField}(){() →* core::int*}.{core::num::-}(value){(core::num*) →* core::int*};
+static method A2|-(lowered final self::A1 #this, core::int value) → core::int {
+  return #this.{self::A1::getInstanceField}(){() → core::int}.{core::num::-}(value){(core::num) → core::int};
 }
-static method A2|unary-(lowered final self::A1* #this) → core::int* {
-  return #this.{self::A1::getInstanceField}(){() →* core::int*}.{core::int::unary-}(){() →* core::int*};
+static method A2|unary-(lowered final self::A1 #this) → core::int {
+  return #this.{self::A1::getInstanceField}(){() → core::int}.{core::int::unary-}(){() → core::int};
 }
-static get A2|staticProperty() → core::int*
+static get A2|staticProperty() → core::int
   return self::A1::getStaticField();
-static set A2|staticProperty(core::int* value) → void {
+static set A2|staticProperty(core::int value) → void {
   self::A1::setStaticField(value);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extensions/private_members.dart b/pkg/front_end/testcases/extensions/private_members.dart
index 73cbe03..59b873f 100644
--- a/pkg/front_end/testcases/extensions/private_members.dart
+++ b/pkg/front_end/testcases/extensions/private_members.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2019, 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.
-// @dart=2.9
+
 import 'private_members_lib.dart';
 
 main() {
diff --git a/pkg/front_end/testcases/extensions/private_members.dart.textual_outline.expect b/pkg/front_end/testcases/extensions/private_members.dart.textual_outline.expect
index 492a3a9..ca40cab 100644
--- a/pkg/front_end/testcases/extensions/private_members.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/extensions/private_members.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'private_members_lib.dart';
 
 main() {}
diff --git a/pkg/front_end/testcases/extensions/private_members.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/extensions/private_members.dart.textual_outline_modelled.expect
index 65259cc..dfeb024 100644
--- a/pkg/front_end/testcases/extensions/private_members.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/extensions/private_members.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 import 'private_members_lib.dart';
 
 errors() {}
diff --git a/pkg/front_end/testcases/extensions/private_members.dart.weak.expect b/pkg/front_end/testcases/extensions/private_members.dart.weak.expect
index 1e4a440..b67ccfa 100644
--- a/pkg/front_end/testcases/extensions/private_members.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/private_members.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -103,11 +103,11 @@
                               ^^^^^^^^^^^^^^^^^^^^^");
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as pri;
 import "dart:core" as core;
 
-extension _PrivateExtension on core::String* {
+extension _PrivateExtension on core::String {
   method publicMethod1 = pri::_PrivateExtension|publicMethod1;
   tearoff publicMethod1 = pri::_PrivateExtension|get#publicMethod1;
   method _privateMethod1 = pri::_PrivateExtension|_privateMethod1;
@@ -117,7 +117,7 @@
   method test1 = pri::_PrivateExtension|test1;
   tearoff test1 = pri::_PrivateExtension|get#test1;
 }
-extension PublicExtension on core::String* {
+extension PublicExtension on core::String {
   method publicMethod2 = pri::PublicExtension|publicMethod2;
   tearoff publicMethod2 = pri::PublicExtension|get#publicMethod2;
   method _privateMethod2 = pri::PublicExtension|_privateMethod2;
@@ -127,7 +127,7 @@
   method test2 = pri::PublicExtension|test2;
   tearoff test2 = pri::PublicExtension|get#test2;
 }
-extension _extension#0 on core::String* {
+extension _extension#0 on core::String {
   method publicMethod3 = pri::_extension#0|publicMethod3;
   tearoff publicMethod3 = pri::_extension#0|get#publicMethod3;
   method _privateMethod3 = pri::_extension#0|_privateMethod3;
@@ -137,65 +137,65 @@
   method test3 = pri::_extension#0|test3;
   tearoff test3 = pri::_extension#0|get#test3;
 }
-static method _PrivateExtension|publicMethod1(lowered final core::String* #this) → core::int*
+static method _PrivateExtension|publicMethod1(lowered final core::String #this) → core::int
   return 42;
-static method _PrivateExtension|get#publicMethod1(lowered final core::String* #this) → () →* core::int*
-  return () → core::int* => pri::_PrivateExtension|publicMethod1(#this);
-static method _PrivateExtension|_privateMethod1(lowered 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(lowered final core::String #this) → core::int
   return 87;
-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*
+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*
+static method _PrivateExtension|_privateStaticMethod1() → core::int
   return 78;
-static method _PrivateExtension|test1(lowered 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(lowered 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(lowered final core::String* #this) → core::int*
+static method PublicExtension|publicMethod2(lowered final core::String #this) → core::int
   return 123;
-static method PublicExtension|get#publicMethod2(lowered final core::String* #this) → () →* core::int*
-  return () → core::int* => pri::PublicExtension|publicMethod2(#this);
-static method PublicExtension|_privateMethod2(lowered 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(lowered final core::String #this) → core::int
   return 237;
-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*
+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*
+static method PublicExtension|_privateStaticMethod2() → core::int
   return 732;
-static method PublicExtension|test2(lowered 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(lowered 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(lowered 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(lowered final core::String* #this) → () →* core::int*
-  return () → core::int* => pri::_extension#0|publicMethod3(#this);
-static method _extension#0|_privateMethod3(lowered 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(lowered final core::String #this) → core::int
   return 586;
-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*
+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*
+static method _extension#0|_privateStaticMethod3() → core::int
   return 685;
-static method _extension#0|test3(lowered 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(lowered 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(""));
@@ -217,7 +217,7 @@
   pri::_extension#0|test3("");
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual)) {
     throw "Mismatch: expected=${expected}, actual=${actual}";
   }
 }
diff --git a/pkg/front_end/testcases/extensions/private_members.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/private_members.dart.weak.modular.expect
index 1e4a440..b67ccfa 100644
--- a/pkg/front_end/testcases/extensions/private_members.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/extensions/private_members.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -103,11 +103,11 @@
                               ^^^^^^^^^^^^^^^^^^^^^");
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as pri;
 import "dart:core" as core;
 
-extension _PrivateExtension on core::String* {
+extension _PrivateExtension on core::String {
   method publicMethod1 = pri::_PrivateExtension|publicMethod1;
   tearoff publicMethod1 = pri::_PrivateExtension|get#publicMethod1;
   method _privateMethod1 = pri::_PrivateExtension|_privateMethod1;
@@ -117,7 +117,7 @@
   method test1 = pri::_PrivateExtension|test1;
   tearoff test1 = pri::_PrivateExtension|get#test1;
 }
-extension PublicExtension on core::String* {
+extension PublicExtension on core::String {
   method publicMethod2 = pri::PublicExtension|publicMethod2;
   tearoff publicMethod2 = pri::PublicExtension|get#publicMethod2;
   method _privateMethod2 = pri::PublicExtension|_privateMethod2;
@@ -127,7 +127,7 @@
   method test2 = pri::PublicExtension|test2;
   tearoff test2 = pri::PublicExtension|get#test2;
 }
-extension _extension#0 on core::String* {
+extension _extension#0 on core::String {
   method publicMethod3 = pri::_extension#0|publicMethod3;
   tearoff publicMethod3 = pri::_extension#0|get#publicMethod3;
   method _privateMethod3 = pri::_extension#0|_privateMethod3;
@@ -137,65 +137,65 @@
   method test3 = pri::_extension#0|test3;
   tearoff test3 = pri::_extension#0|get#test3;
 }
-static method _PrivateExtension|publicMethod1(lowered final core::String* #this) → core::int*
+static method _PrivateExtension|publicMethod1(lowered final core::String #this) → core::int
   return 42;
-static method _PrivateExtension|get#publicMethod1(lowered final core::String* #this) → () →* core::int*
-  return () → core::int* => pri::_PrivateExtension|publicMethod1(#this);
-static method _PrivateExtension|_privateMethod1(lowered 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(lowered final core::String #this) → core::int
   return 87;
-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*
+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*
+static method _PrivateExtension|_privateStaticMethod1() → core::int
   return 78;
-static method _PrivateExtension|test1(lowered 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(lowered 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(lowered final core::String* #this) → core::int*
+static method PublicExtension|publicMethod2(lowered final core::String #this) → core::int
   return 123;
-static method PublicExtension|get#publicMethod2(lowered final core::String* #this) → () →* core::int*
-  return () → core::int* => pri::PublicExtension|publicMethod2(#this);
-static method PublicExtension|_privateMethod2(lowered 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(lowered final core::String #this) → core::int
   return 237;
-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*
+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*
+static method PublicExtension|_privateStaticMethod2() → core::int
   return 732;
-static method PublicExtension|test2(lowered 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(lowered 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(lowered 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(lowered final core::String* #this) → () →* core::int*
-  return () → core::int* => pri::_extension#0|publicMethod3(#this);
-static method _extension#0|_privateMethod3(lowered 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(lowered final core::String #this) → core::int
   return 586;
-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*
+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*
+static method _extension#0|_privateStaticMethod3() → core::int
   return 685;
-static method _extension#0|test3(lowered 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(lowered 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(""));
@@ -217,7 +217,7 @@
   pri::_extension#0|test3("");
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual)) {
     throw "Mismatch: expected=${expected}, actual=${actual}";
   }
 }
diff --git a/pkg/front_end/testcases/extensions/private_members.dart.weak.outline.expect b/pkg/front_end/testcases/extensions/private_members.dart.weak.outline.expect
index 5f25ddb..58a8257 100644
--- a/pkg/front_end/testcases/extensions/private_members.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extensions/private_members.dart.weak.outline.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 
 import "org-dartlang-testcase:///private_members_lib.dart";
@@ -8,11 +8,11 @@
 static method errors() → dynamic
   ;
 
-library;
+library /*isNonNullableByDefault*/;
 import self as self2;
 import "dart:core" as core;
 
-extension _PrivateExtension on core::String* {
+extension _PrivateExtension on core::String {
   method publicMethod1 = self2::_PrivateExtension|publicMethod1;
   tearoff publicMethod1 = self2::_PrivateExtension|get#publicMethod1;
   method _privateMethod1 = self2::_PrivateExtension|_privateMethod1;
@@ -22,7 +22,7 @@
   method test1 = self2::_PrivateExtension|test1;
   tearoff test1 = self2::_PrivateExtension|get#test1;
 }
-extension PublicExtension on core::String* {
+extension PublicExtension on core::String {
   method publicMethod2 = self2::PublicExtension|publicMethod2;
   tearoff publicMethod2 = self2::PublicExtension|get#publicMethod2;
   method _privateMethod2 = self2::PublicExtension|_privateMethod2;
@@ -32,7 +32,7 @@
   method test2 = self2::PublicExtension|test2;
   tearoff test2 = self2::PublicExtension|get#test2;
 }
-extension _extension#0 on core::String* {
+extension _extension#0 on core::String {
   method publicMethod3 = self2::_extension#0|publicMethod3;
   tearoff publicMethod3 = self2::_extension#0|get#publicMethod3;
   method _privateMethod3 = self2::_extension#0|_privateMethod3;
@@ -42,53 +42,53 @@
   method test3 = self2::_extension#0|test3;
   tearoff test3 = self2::_extension#0|get#test3;
 }
-static method _PrivateExtension|publicMethod1(lowered final core::String* #this) → core::int*
+static method _PrivateExtension|publicMethod1(lowered 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(lowered 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(lowered 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|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|_privateStaticMethod1() → core::int
   ;
-static method _PrivateExtension|test1(lowered final core::String* #this) → dynamic
+static method _PrivateExtension|test1(lowered final core::String #this) → dynamic
   ;
-static method _PrivateExtension|get#test1(lowered 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(lowered final core::String* #this) → core::int*
+static method PublicExtension|publicMethod2(lowered 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(lowered 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(lowered 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|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|_privateStaticMethod2() → core::int
   ;
-static method PublicExtension|test2(lowered final core::String* #this) → dynamic
+static method PublicExtension|test2(lowered final core::String #this) → dynamic
   ;
-static method PublicExtension|get#test2(lowered 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(lowered final core::String* #this) → core::int*
+static method _extension#0|publicMethod3(lowered 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(lowered 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(lowered 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|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|_privateStaticMethod3() → core::int
   ;
-static method _extension#0|test3(lowered final core::String* #this) → dynamic
+static method _extension#0|test3(lowered final core::String #this) → dynamic
   ;
-static method _extension#0|get#test3(lowered 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.weak.transformed.expect b/pkg/front_end/testcases/extensions/private_members.dart.weak.transformed.expect
index 1e4a440..b67ccfa 100644
--- a/pkg/front_end/testcases/extensions/private_members.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/private_members.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -103,11 +103,11 @@
                               ^^^^^^^^^^^^^^^^^^^^^");
 }
 
-library;
+library /*isNonNullableByDefault*/;
 import self as pri;
 import "dart:core" as core;
 
-extension _PrivateExtension on core::String* {
+extension _PrivateExtension on core::String {
   method publicMethod1 = pri::_PrivateExtension|publicMethod1;
   tearoff publicMethod1 = pri::_PrivateExtension|get#publicMethod1;
   method _privateMethod1 = pri::_PrivateExtension|_privateMethod1;
@@ -117,7 +117,7 @@
   method test1 = pri::_PrivateExtension|test1;
   tearoff test1 = pri::_PrivateExtension|get#test1;
 }
-extension PublicExtension on core::String* {
+extension PublicExtension on core::String {
   method publicMethod2 = pri::PublicExtension|publicMethod2;
   tearoff publicMethod2 = pri::PublicExtension|get#publicMethod2;
   method _privateMethod2 = pri::PublicExtension|_privateMethod2;
@@ -127,7 +127,7 @@
   method test2 = pri::PublicExtension|test2;
   tearoff test2 = pri::PublicExtension|get#test2;
 }
-extension _extension#0 on core::String* {
+extension _extension#0 on core::String {
   method publicMethod3 = pri::_extension#0|publicMethod3;
   tearoff publicMethod3 = pri::_extension#0|get#publicMethod3;
   method _privateMethod3 = pri::_extension#0|_privateMethod3;
@@ -137,65 +137,65 @@
   method test3 = pri::_extension#0|test3;
   tearoff test3 = pri::_extension#0|get#test3;
 }
-static method _PrivateExtension|publicMethod1(lowered final core::String* #this) → core::int*
+static method _PrivateExtension|publicMethod1(lowered final core::String #this) → core::int
   return 42;
-static method _PrivateExtension|get#publicMethod1(lowered final core::String* #this) → () →* core::int*
-  return () → core::int* => pri::_PrivateExtension|publicMethod1(#this);
-static method _PrivateExtension|_privateMethod1(lowered 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(lowered final core::String #this) → core::int
   return 87;
-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*
+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*
+static method _PrivateExtension|_privateStaticMethod1() → core::int
   return 78;
-static method _PrivateExtension|test1(lowered 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(lowered 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(lowered final core::String* #this) → core::int*
+static method PublicExtension|publicMethod2(lowered final core::String #this) → core::int
   return 123;
-static method PublicExtension|get#publicMethod2(lowered final core::String* #this) → () →* core::int*
-  return () → core::int* => pri::PublicExtension|publicMethod2(#this);
-static method PublicExtension|_privateMethod2(lowered 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(lowered final core::String #this) → core::int
   return 237;
-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*
+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*
+static method PublicExtension|_privateStaticMethod2() → core::int
   return 732;
-static method PublicExtension|test2(lowered 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(lowered 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(lowered 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(lowered final core::String* #this) → () →* core::int*
-  return () → core::int* => pri::_extension#0|publicMethod3(#this);
-static method _extension#0|_privateMethod3(lowered 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(lowered final core::String #this) → core::int
   return 586;
-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*
+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*
+static method _extension#0|_privateStaticMethod3() → core::int
   return 685;
-static method _extension#0|test3(lowered 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(lowered 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(""));
@@ -217,7 +217,7 @@
   pri::_extension#0|test3("");
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual)) {
     throw "Mismatch: expected=${expected}, actual=${actual}";
   }
 }
diff --git a/pkg/front_end/testcases/extensions/private_members_lib.dart b/pkg/front_end/testcases/extensions/private_members_lib.dart
index 4f5f780..2cf5032 100644
--- a/pkg/front_end/testcases/extensions/private_members_lib.dart
+++ b/pkg/front_end/testcases/extensions/private_members_lib.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2019, 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.
-// @dart=2.9
+
 extension _PrivateExtension on String {
   int publicMethod1() => 42;
   int _privateMethod1() => 87;
diff --git a/pkg/front_end/testcases/extensions/static_access.dart b/pkg/front_end/testcases/extensions/static_access.dart
index 37f9cf6..170f77e 100644
--- a/pkg/front_end/testcases/extensions/static_access.dart
+++ b/pkg/front_end/testcases/extensions/static_access.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2019, 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.
-// @dart=2.9
+
 class Class {}
 
 extension Extension on Class {
diff --git a/pkg/front_end/testcases/extensions/static_access.dart.textual_outline.expect b/pkg/front_end/testcases/extensions/static_access.dart.textual_outline.expect
index a124177..af89663 100644
--- a/pkg/front_end/testcases/extensions/static_access.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/extensions/static_access.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Class {}
 
 extension Extension on Class {
diff --git a/pkg/front_end/testcases/extensions/static_access.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/extensions/static_access.dart.textual_outline_modelled.expect
index 03ebb40..d7a88d1 100644
--- a/pkg/front_end/testcases/extensions/static_access.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/extensions/static_access.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Class {}
 
 extension Extension on Class {
diff --git a/pkg/front_end/testcases/extensions/static_access.dart.weak.expect b/pkg/front_end/testcases/extensions/static_access.dart.weak.expect
index 973805f..91c0ad8 100644
--- a/pkg/front_end/testcases/extensions/static_access.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/static_access.dart.weak.expect
@@ -1,23 +1,13 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Class extends core::Object {
-  synthetic constructor •() → self::Class*
+  synthetic constructor •() → self::Class
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension Extension on self::Class* {
+extension Extension on self::Class {
   static method method = self::Extension|method;
   static method genericMethod = self::Extension|genericMethod;
   static get property = get self::Extension|property;
@@ -30,20 +20,20 @@
 }
 static field dynamic Extension|field;
 static method Extension|method() → dynamic {}
-static method Extension|genericMethod<T extends core::Object* = dynamic>(self::Extension|genericMethod::T* t) → dynamic {}
+static method Extension|genericMethod<T extends core::Object? = dynamic>(self::Extension|genericMethod::T% t) → dynamic {}
 static get Extension|property() → dynamic
   return 42;
 static set Extension|property(dynamic value) → void {}
-static method Extension|instanceMethod(lowered final self::Class* #this) → dynamic {}
-static method Extension|get#instanceMethod(lowered 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(lowered final self::Class* #this) → dynamic
+static method Extension|get#instanceProperty(lowered final self::Class #this) → dynamic
   return 42;
-static method Extension|set#instanceProperty(lowered 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);
-  self::Extension|genericMethod<core::num*>(42);
+  self::Extension|genericMethod<core::int>(42);
+  self::Extension|genericMethod<core::num>(42);
   #C1;
   #C2;
   self::Extension|property;
diff --git a/pkg/front_end/testcases/extensions/static_access.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/static_access.dart.weak.modular.expect
index 973805f..91c0ad8 100644
--- a/pkg/front_end/testcases/extensions/static_access.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/extensions/static_access.dart.weak.modular.expect
@@ -1,23 +1,13 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Class extends core::Object {
-  synthetic constructor •() → self::Class*
+  synthetic constructor •() → self::Class
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension Extension on self::Class* {
+extension Extension on self::Class {
   static method method = self::Extension|method;
   static method genericMethod = self::Extension|genericMethod;
   static get property = get self::Extension|property;
@@ -30,20 +20,20 @@
 }
 static field dynamic Extension|field;
 static method Extension|method() → dynamic {}
-static method Extension|genericMethod<T extends core::Object* = dynamic>(self::Extension|genericMethod::T* t) → dynamic {}
+static method Extension|genericMethod<T extends core::Object? = dynamic>(self::Extension|genericMethod::T% t) → dynamic {}
 static get Extension|property() → dynamic
   return 42;
 static set Extension|property(dynamic value) → void {}
-static method Extension|instanceMethod(lowered final self::Class* #this) → dynamic {}
-static method Extension|get#instanceMethod(lowered 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(lowered final self::Class* #this) → dynamic
+static method Extension|get#instanceProperty(lowered final self::Class #this) → dynamic
   return 42;
-static method Extension|set#instanceProperty(lowered 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);
-  self::Extension|genericMethod<core::num*>(42);
+  self::Extension|genericMethod<core::int>(42);
+  self::Extension|genericMethod<core::num>(42);
   #C1;
   #C2;
   self::Extension|property;
diff --git a/pkg/front_end/testcases/extensions/static_access.dart.weak.outline.expect b/pkg/front_end/testcases/extensions/static_access.dart.weak.outline.expect
index 362a61f..c0fe1cd 100644
--- a/pkg/front_end/testcases/extensions/static_access.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extensions/static_access.dart.weak.outline.expect
@@ -1,22 +1,12 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Class extends core::Object {
-  synthetic constructor •() → self::Class*
+  synthetic constructor •() → self::Class
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension Extension on self::Class* {
+extension Extension on self::Class {
   static method method = self::Extension|method;
   static method genericMethod = self::Extension|genericMethod;
   static get property = get self::Extension|property;
@@ -30,19 +20,19 @@
 static field dynamic Extension|field;
 static method Extension|method() → dynamic
   ;
-static method Extension|genericMethod<T extends core::Object* = dynamic>(self::Extension|genericMethod::T* t) → dynamic
+static method Extension|genericMethod<T extends core::Object? = dynamic>(self::Extension|genericMethod::T% t) → dynamic
   ;
 static get Extension|property() → dynamic
   ;
 static set Extension|property(dynamic value) → void
   ;
-static method Extension|instanceMethod(lowered 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
+static method Extension|get#instanceMethod(lowered final self::Class #this) → () → dynamic
   return () → dynamic => self::Extension|instanceMethod(#this);
-static method Extension|get#instanceProperty(lowered final self::Class* #this) → dynamic
+static method Extension|get#instanceProperty(lowered final self::Class #this) → dynamic
   ;
-static method Extension|set#instanceProperty(lowered 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.weak.transformed.expect b/pkg/front_end/testcases/extensions/static_access.dart.weak.transformed.expect
index 973805f..91c0ad8 100644
--- a/pkg/front_end/testcases/extensions/static_access.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/static_access.dart.weak.transformed.expect
@@ -1,23 +1,13 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Class extends core::Object {
-  synthetic constructor •() → self::Class*
+  synthetic constructor •() → self::Class
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension Extension on self::Class* {
+extension Extension on self::Class {
   static method method = self::Extension|method;
   static method genericMethod = self::Extension|genericMethod;
   static get property = get self::Extension|property;
@@ -30,20 +20,20 @@
 }
 static field dynamic Extension|field;
 static method Extension|method() → dynamic {}
-static method Extension|genericMethod<T extends core::Object* = dynamic>(self::Extension|genericMethod::T* t) → dynamic {}
+static method Extension|genericMethod<T extends core::Object? = dynamic>(self::Extension|genericMethod::T% t) → dynamic {}
 static get Extension|property() → dynamic
   return 42;
 static set Extension|property(dynamic value) → void {}
-static method Extension|instanceMethod(lowered final self::Class* #this) → dynamic {}
-static method Extension|get#instanceMethod(lowered 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(lowered final self::Class* #this) → dynamic
+static method Extension|get#instanceProperty(lowered final self::Class #this) → dynamic
   return 42;
-static method Extension|set#instanceProperty(lowered 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);
-  self::Extension|genericMethod<core::num*>(42);
+  self::Extension|genericMethod<core::int>(42);
+  self::Extension|genericMethod<core::num>(42);
   #C1;
   #C2;
   self::Extension|property;
diff --git a/pkg/front_end/testcases/extensions/static_access_of_instance.dart b/pkg/front_end/testcases/extensions/static_access_of_instance.dart
index 7b664f9..606a735 100644
--- a/pkg/front_end/testcases/extensions/static_access_of_instance.dart
+++ b/pkg/front_end/testcases/extensions/static_access_of_instance.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2019, 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.
-// @dart=2.9
+
 class Class {}
 
 extension Extension on Class {
diff --git a/pkg/front_end/testcases/extensions/static_access_of_instance.dart.textual_outline.expect b/pkg/front_end/testcases/extensions/static_access_of_instance.dart.textual_outline.expect
index 2a3f073..38dbcbf 100644
--- a/pkg/front_end/testcases/extensions/static_access_of_instance.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/extensions/static_access_of_instance.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Class {}
 
 extension Extension on Class {
diff --git a/pkg/front_end/testcases/extensions/static_access_of_instance.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/extensions/static_access_of_instance.dart.textual_outline_modelled.expect
index 856f36c..114f677 100644
--- a/pkg/front_end/testcases/extensions/static_access_of_instance.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/extensions/static_access_of_instance.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Class {}
 
 extension Extension on Class {
diff --git a/pkg/front_end/testcases/extensions/static_access_of_instance.dart.weak.expect b/pkg/front_end/testcases/extensions/static_access_of_instance.dart.weak.expect
index b6e0e94..3fcfdf7 100644
--- a/pkg/front_end/testcases/extensions/static_access_of_instance.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/static_access_of_instance.dart.weak.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -22,32 +22,22 @@
 import "dart:core" as core;
 
 class Class extends core::Object {
-  synthetic constructor •() → self::Class*
+  synthetic constructor •() → self::Class
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension Extension on self::Class* {
+extension Extension on self::Class {
   method instanceMethod = self::Extension|instanceMethod;
   tearoff instanceMethod = self::Extension|get#instanceMethod;
   get instanceProperty = self::Extension|get#instanceProperty;
   set instanceProperty = self::Extension|set#instanceProperty;
 }
-static method Extension|instanceMethod(lowered final self::Class* #this) → dynamic {}
-static method Extension|get#instanceMethod(lowered 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(lowered final self::Class* #this) → dynamic
+static method Extension|get#instanceProperty(lowered final self::Class #this) → dynamic
   return 42;
-static method Extension|set#instanceProperty(lowered 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: Member not found: 'Extension.instanceMethod'.
   Extension.instanceMethod();
diff --git a/pkg/front_end/testcases/extensions/static_access_of_instance.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/static_access_of_instance.dart.weak.modular.expect
index b6e0e94..3fcfdf7 100644
--- a/pkg/front_end/testcases/extensions/static_access_of_instance.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/extensions/static_access_of_instance.dart.weak.modular.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -22,32 +22,22 @@
 import "dart:core" as core;
 
 class Class extends core::Object {
-  synthetic constructor •() → self::Class*
+  synthetic constructor •() → self::Class
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension Extension on self::Class* {
+extension Extension on self::Class {
   method instanceMethod = self::Extension|instanceMethod;
   tearoff instanceMethod = self::Extension|get#instanceMethod;
   get instanceProperty = self::Extension|get#instanceProperty;
   set instanceProperty = self::Extension|set#instanceProperty;
 }
-static method Extension|instanceMethod(lowered final self::Class* #this) → dynamic {}
-static method Extension|get#instanceMethod(lowered 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(lowered final self::Class* #this) → dynamic
+static method Extension|get#instanceProperty(lowered final self::Class #this) → dynamic
   return 42;
-static method Extension|set#instanceProperty(lowered 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: Member not found: 'Extension.instanceMethod'.
   Extension.instanceMethod();
diff --git a/pkg/front_end/testcases/extensions/static_access_of_instance.dart.weak.outline.expect b/pkg/front_end/testcases/extensions/static_access_of_instance.dart.weak.outline.expect
index a401139..3dcb102 100644
--- a/pkg/front_end/testcases/extensions/static_access_of_instance.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extensions/static_access_of_instance.dart.weak.outline.expect
@@ -1,34 +1,24 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Class extends core::Object {
-  synthetic constructor •() → self::Class*
+  synthetic constructor •() → self::Class
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension Extension on self::Class* {
+extension Extension on self::Class {
   method instanceMethod = self::Extension|instanceMethod;
   tearoff instanceMethod = self::Extension|get#instanceMethod;
   get instanceProperty = self::Extension|get#instanceProperty;
   set instanceProperty = self::Extension|set#instanceProperty;
 }
-static method Extension|instanceMethod(lowered 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
+static method Extension|get#instanceMethod(lowered final self::Class #this) → () → dynamic
   return () → dynamic => self::Extension|instanceMethod(#this);
-static method Extension|get#instanceProperty(lowered final self::Class* #this) → dynamic
+static method Extension|get#instanceProperty(lowered final self::Class #this) → dynamic
   ;
-static method Extension|set#instanceProperty(lowered 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.weak.transformed.expect b/pkg/front_end/testcases/extensions/static_access_of_instance.dart.weak.transformed.expect
index b6e0e94..3fcfdf7 100644
--- a/pkg/front_end/testcases/extensions/static_access_of_instance.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/static_access_of_instance.dart.weak.transformed.expect
@@ -1,4 +1,4 @@
-library;
+library /*isNonNullableByDefault*/;
 //
 // Problems in library:
 //
@@ -22,32 +22,22 @@
 import "dart:core" as core;
 
 class Class extends core::Object {
-  synthetic constructor •() → self::Class*
+  synthetic constructor •() → self::Class
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension Extension on self::Class* {
+extension Extension on self::Class {
   method instanceMethod = self::Extension|instanceMethod;
   tearoff instanceMethod = self::Extension|get#instanceMethod;
   get instanceProperty = self::Extension|get#instanceProperty;
   set instanceProperty = self::Extension|set#instanceProperty;
 }
-static method Extension|instanceMethod(lowered final self::Class* #this) → dynamic {}
-static method Extension|get#instanceMethod(lowered 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(lowered final self::Class* #this) → dynamic
+static method Extension|get#instanceProperty(lowered final self::Class #this) → dynamic
   return 42;
-static method Extension|set#instanceProperty(lowered 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: Member not found: 'Extension.instanceMethod'.
   Extension.instanceMethod();
diff --git a/pkg/front_end/testcases/extensions/tear_offs.dart b/pkg/front_end/testcases/extensions/tear_offs.dart
index ce7b186..b683759 100644
--- a/pkg/front_end/testcases/extensions/tear_offs.dart
+++ b/pkg/front_end/testcases/extensions/tear_offs.dart
@@ -1,7 +1,9 @@
 // Copyright (c) 2019, 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.
+
 // @dart=2.9
+
 class Class {}
 
 extension Extension on Class {
diff --git a/pkg/front_end/testcases/extensions/tear_offs.dart.weak.expect b/pkg/front_end/testcases/extensions/tear_offs.dart.weak.expect
index d56bc4b..7c706bd 100644
--- a/pkg/front_end/testcases/extensions/tear_offs.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/tear_offs.dart.weak.expect
@@ -2,15 +2,15 @@
 //
 // Problems in library:
 //
-// 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)'.
+// pkg/front_end/testcases/extensions/tear_offs.dart:19: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;
 //                               ^
 //
-// pkg/front_end/testcases/extensions/tear_offs.dart:30:31: Error: A value of type 'T Function<T>(T)' can't be assigned to a variable of type 'num Function(num)'.
+// pkg/front_end/testcases/extensions/tear_offs.dart:32:31: Error: A value of type 'T Function<T>(T)' can't be assigned to a variable of type 'num Function(num)'.
 //   num Function(num) numId = c.getter;
 //                               ^
 //
-// pkg/front_end/testcases/extensions/tear_offs.dart:31:45: Error: A value of type 'T Function<T>(T)' can't be assigned to a variable of type 'bool Function(bool)'.
+// pkg/front_end/testcases/extensions/tear_offs.dart:33:45: Error: A value of type 'T Function<T>(T)' can't be assigned to a variable of type 'bool Function(bool)'.
 //   bool Function(bool) boolId = Extension(c).getter;
 //                                             ^
 //
@@ -53,7 +53,7 @@
 static method Extension|get#method(lowered final self::Class* #this) → () →* dynamic
   return () → dynamic => self::Extension|method(#this);
 static method Extension|errors(lowered final self::Class* #this) → dynamic {
-  (core::int*) →* core::int* intId = 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)'.
+  (core::int*) →* core::int* intId = invalid-expression "pkg/front_end/testcases/extensions/tear_offs.dart:19: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*;
 }
@@ -66,10 +66,10 @@
 }
 static method errors() → dynamic {
   self::Class* c = new self::Class::•();
-  (core::num*) →* core::num* numId = invalid-expression "pkg/front_end/testcases/extensions/tear_offs.dart:30:31: Error: A value of type 'T Function<T>(T)' can't be assigned to a variable of type 'num Function(num)'.
+  (core::num*) →* core::num* numId = invalid-expression "pkg/front_end/testcases/extensions/tear_offs.dart:32:31: Error: A value of type 'T Function<T>(T)' can't be assigned to a variable of type 'num Function(num)'.
   num Function(num) numId = c.getter;
                               ^" in self::Extension|get#getter(c) as{TypeError} (core::num*) →* core::num*;
-  (core::bool*) →* core::bool* boolId = invalid-expression "pkg/front_end/testcases/extensions/tear_offs.dart:31:45: Error: A value of type 'T Function<T>(T)' can't be assigned to a variable of type 'bool Function(bool)'.
+  (core::bool*) →* core::bool* boolId = invalid-expression "pkg/front_end/testcases/extensions/tear_offs.dart:33:45: Error: A value of type 'T Function<T>(T)' can't be assigned to a variable of type 'bool Function(bool)'.
   bool Function(bool) boolId = Extension(c).getter;
                                             ^" in self::Extension|get#getter(c) as{TypeError} (core::bool*) →* core::bool*;
 }
diff --git a/pkg/front_end/testcases/extensions/tear_offs.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/tear_offs.dart.weak.modular.expect
index d56bc4b..7c706bd 100644
--- a/pkg/front_end/testcases/extensions/tear_offs.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/extensions/tear_offs.dart.weak.modular.expect
@@ -2,15 +2,15 @@
 //
 // Problems in library:
 //
-// 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)'.
+// pkg/front_end/testcases/extensions/tear_offs.dart:19: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;
 //                               ^
 //
-// pkg/front_end/testcases/extensions/tear_offs.dart:30:31: Error: A value of type 'T Function<T>(T)' can't be assigned to a variable of type 'num Function(num)'.
+// pkg/front_end/testcases/extensions/tear_offs.dart:32:31: Error: A value of type 'T Function<T>(T)' can't be assigned to a variable of type 'num Function(num)'.
 //   num Function(num) numId = c.getter;
 //                               ^
 //
-// pkg/front_end/testcases/extensions/tear_offs.dart:31:45: Error: A value of type 'T Function<T>(T)' can't be assigned to a variable of type 'bool Function(bool)'.
+// pkg/front_end/testcases/extensions/tear_offs.dart:33:45: Error: A value of type 'T Function<T>(T)' can't be assigned to a variable of type 'bool Function(bool)'.
 //   bool Function(bool) boolId = Extension(c).getter;
 //                                             ^
 //
@@ -53,7 +53,7 @@
 static method Extension|get#method(lowered final self::Class* #this) → () →* dynamic
   return () → dynamic => self::Extension|method(#this);
 static method Extension|errors(lowered final self::Class* #this) → dynamic {
-  (core::int*) →* core::int* intId = 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)'.
+  (core::int*) →* core::int* intId = invalid-expression "pkg/front_end/testcases/extensions/tear_offs.dart:19: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*;
 }
@@ -66,10 +66,10 @@
 }
 static method errors() → dynamic {
   self::Class* c = new self::Class::•();
-  (core::num*) →* core::num* numId = invalid-expression "pkg/front_end/testcases/extensions/tear_offs.dart:30:31: Error: A value of type 'T Function<T>(T)' can't be assigned to a variable of type 'num Function(num)'.
+  (core::num*) →* core::num* numId = invalid-expression "pkg/front_end/testcases/extensions/tear_offs.dart:32:31: Error: A value of type 'T Function<T>(T)' can't be assigned to a variable of type 'num Function(num)'.
   num Function(num) numId = c.getter;
                               ^" in self::Extension|get#getter(c) as{TypeError} (core::num*) →* core::num*;
-  (core::bool*) →* core::bool* boolId = invalid-expression "pkg/front_end/testcases/extensions/tear_offs.dart:31:45: Error: A value of type 'T Function<T>(T)' can't be assigned to a variable of type 'bool Function(bool)'.
+  (core::bool*) →* core::bool* boolId = invalid-expression "pkg/front_end/testcases/extensions/tear_offs.dart:33:45: Error: A value of type 'T Function<T>(T)' can't be assigned to a variable of type 'bool Function(bool)'.
   bool Function(bool) boolId = Extension(c).getter;
                                             ^" in self::Extension|get#getter(c) as{TypeError} (core::bool*) →* core::bool*;
 }
diff --git a/pkg/front_end/testcases/extensions/tear_offs.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/tear_offs.dart.weak.transformed.expect
index d56bc4b..7c706bd 100644
--- a/pkg/front_end/testcases/extensions/tear_offs.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/tear_offs.dart.weak.transformed.expect
@@ -2,15 +2,15 @@
 //
 // Problems in library:
 //
-// 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)'.
+// pkg/front_end/testcases/extensions/tear_offs.dart:19: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;
 //                               ^
 //
-// pkg/front_end/testcases/extensions/tear_offs.dart:30:31: Error: A value of type 'T Function<T>(T)' can't be assigned to a variable of type 'num Function(num)'.
+// pkg/front_end/testcases/extensions/tear_offs.dart:32:31: Error: A value of type 'T Function<T>(T)' can't be assigned to a variable of type 'num Function(num)'.
 //   num Function(num) numId = c.getter;
 //                               ^
 //
-// pkg/front_end/testcases/extensions/tear_offs.dart:31:45: Error: A value of type 'T Function<T>(T)' can't be assigned to a variable of type 'bool Function(bool)'.
+// pkg/front_end/testcases/extensions/tear_offs.dart:33:45: Error: A value of type 'T Function<T>(T)' can't be assigned to a variable of type 'bool Function(bool)'.
 //   bool Function(bool) boolId = Extension(c).getter;
 //                                             ^
 //
@@ -53,7 +53,7 @@
 static method Extension|get#method(lowered final self::Class* #this) → () →* dynamic
   return () → dynamic => self::Extension|method(#this);
 static method Extension|errors(lowered final self::Class* #this) → dynamic {
-  (core::int*) →* core::int* intId = 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)'.
+  (core::int*) →* core::int* intId = invalid-expression "pkg/front_end/testcases/extensions/tear_offs.dart:19: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*;
 }
@@ -66,10 +66,10 @@
 }
 static method errors() → dynamic {
   self::Class* c = new self::Class::•();
-  (core::num*) →* core::num* numId = invalid-expression "pkg/front_end/testcases/extensions/tear_offs.dart:30:31: Error: A value of type 'T Function<T>(T)' can't be assigned to a variable of type 'num Function(num)'.
+  (core::num*) →* core::num* numId = invalid-expression "pkg/front_end/testcases/extensions/tear_offs.dart:32:31: Error: A value of type 'T Function<T>(T)' can't be assigned to a variable of type 'num Function(num)'.
   num Function(num) numId = c.getter;
                               ^" in self::Extension|get#getter(c) as{TypeError} (core::num*) →* core::num*;
-  (core::bool*) →* core::bool* boolId = invalid-expression "pkg/front_end/testcases/extensions/tear_offs.dart:31:45: Error: A value of type 'T Function<T>(T)' can't be assigned to a variable of type 'bool Function(bool)'.
+  (core::bool*) →* core::bool* boolId = invalid-expression "pkg/front_end/testcases/extensions/tear_offs.dart:33:45: Error: A value of type 'T Function<T>(T)' can't be assigned to a variable of type 'bool Function(bool)'.
   bool Function(bool) boolId = Extension(c).getter;
                                             ^" in self::Extension|get#getter(c) as{TypeError} (core::bool*) →* core::bool*;
 }
diff --git a/pkg/front_end/testcases/extensions/tear_offs2.dart b/pkg/front_end/testcases/extensions/tear_offs2.dart
new file mode 100644
index 0000000..910bae9
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/tear_offs2.dart
@@ -0,0 +1,31 @@
+// Copyright (c) 2019, 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.
+
+class Class {}
+
+extension Extension on Class {
+  T id<T>(T t) => t;
+
+  T Function<T>(T) get getter => id;
+
+  method() {
+    String Function(String) stringId = id;
+  }
+
+  errors() {
+    int Function(int) intId = getter;
+  }
+}
+
+main() {
+  Class c = new Class();
+  int Function(int) intId = c.id;
+  double Function(double) doubleId = Extension(c).id;
+}
+
+errors() {
+  Class c = new Class();
+  num Function(num) numId = c.getter;
+  bool Function(bool) boolId = Extension(c).getter;
+}
diff --git a/pkg/front_end/testcases/extensions/tear_offs2.dart.textual_outline.expect b/pkg/front_end/testcases/extensions/tear_offs2.dart.textual_outline.expect
new file mode 100644
index 0000000..45dbc23
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/tear_offs2.dart.textual_outline.expect
@@ -0,0 +1,11 @@
+class Class {}
+
+extension Extension on Class {
+  T id<T>(T t) => t;
+  T Function<T>(T) get getter => id;
+  method() {}
+  errors() {}
+}
+
+main() {}
+errors() {}
diff --git a/pkg/front_end/testcases/extensions/tear_offs2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/extensions/tear_offs2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..5ce0c980
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/tear_offs2.dart.textual_outline_modelled.expect
@@ -0,0 +1,12 @@
+class Class {}
+
+errors() {}
+
+extension Extension on Class {
+  T Function<T>(T) get getter => id;
+  T id<T>(T t) => t;
+  errors() {}
+  method() {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/extensions/tear_offs2.dart.weak.expect b/pkg/front_end/testcases/extensions/tear_offs2.dart.weak.expect
new file mode 100644
index 0000000..6aad050
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/tear_offs2.dart.weak.expect
@@ -0,0 +1,44 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+}
+extension Extension on self::Class {
+  method id = self::Extension|id;
+  tearoff id = self::Extension|get#id;
+  get getter = self::Extension|get#getter;
+  method method = self::Extension|method;
+  tearoff method = self::Extension|get#method;
+  method errors = self::Extension|errors;
+  tearoff errors = self::Extension|get#errors;
+}
+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(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(lowered final self::Class #this) → <T extends core::Object? = dynamic>(T%) → T%
+  return self::Extension|get#id(#this);
+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(lowered final self::Class #this) → () → dynamic
+  return () → dynamic => self::Extension|method(#this);
+static method Extension|errors(lowered final self::Class #this) → dynamic {
+  (core::int) → core::int intId = self::Extension|get#getter(#this)<core::int>;
+}
+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::•();
+  (core::int) → core::int intId = self::Extension|get#id(c)<core::int>;
+  (core::double) → core::double doubleId = self::Extension|get#id(c)<core::double>;
+}
+static method errors() → dynamic {
+  self::Class c = new self::Class::•();
+  (core::num) → core::num numId = self::Extension|get#getter(c)<core::num>;
+  (core::bool) → core::bool boolId = self::Extension|get#getter(c)<core::bool>;
+}
diff --git a/pkg/front_end/testcases/extensions/tear_offs2.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/tear_offs2.dart.weak.modular.expect
new file mode 100644
index 0000000..6aad050
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/tear_offs2.dart.weak.modular.expect
@@ -0,0 +1,44 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+}
+extension Extension on self::Class {
+  method id = self::Extension|id;
+  tearoff id = self::Extension|get#id;
+  get getter = self::Extension|get#getter;
+  method method = self::Extension|method;
+  tearoff method = self::Extension|get#method;
+  method errors = self::Extension|errors;
+  tearoff errors = self::Extension|get#errors;
+}
+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(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(lowered final self::Class #this) → <T extends core::Object? = dynamic>(T%) → T%
+  return self::Extension|get#id(#this);
+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(lowered final self::Class #this) → () → dynamic
+  return () → dynamic => self::Extension|method(#this);
+static method Extension|errors(lowered final self::Class #this) → dynamic {
+  (core::int) → core::int intId = self::Extension|get#getter(#this)<core::int>;
+}
+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::•();
+  (core::int) → core::int intId = self::Extension|get#id(c)<core::int>;
+  (core::double) → core::double doubleId = self::Extension|get#id(c)<core::double>;
+}
+static method errors() → dynamic {
+  self::Class c = new self::Class::•();
+  (core::num) → core::num numId = self::Extension|get#getter(c)<core::num>;
+  (core::bool) → core::bool boolId = self::Extension|get#getter(c)<core::bool>;
+}
diff --git a/pkg/front_end/testcases/extensions/tear_offs2.dart.weak.outline.expect b/pkg/front_end/testcases/extensions/tear_offs2.dart.weak.outline.expect
new file mode 100644
index 0000000..c5df276
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/tear_offs2.dart.weak.outline.expect
@@ -0,0 +1,35 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  synthetic constructor •() → self::Class
+    ;
+}
+extension Extension on self::Class {
+  method id = self::Extension|id;
+  tearoff id = self::Extension|get#id;
+  get getter = self::Extension|get#getter;
+  method method = self::Extension|method;
+  tearoff method = self::Extension|get#method;
+  method errors = self::Extension|errors;
+  tearoff errors = self::Extension|get#errors;
+}
+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(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(lowered final self::Class #this) → <T extends core::Object? = dynamic>(T%) → T%
+  ;
+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 Extension|errors(lowered 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
+  ;
+static method errors() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/extensions/tear_offs2.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/tear_offs2.dart.weak.transformed.expect
new file mode 100644
index 0000000..6aad050
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/tear_offs2.dart.weak.transformed.expect
@@ -0,0 +1,44 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+}
+extension Extension on self::Class {
+  method id = self::Extension|id;
+  tearoff id = self::Extension|get#id;
+  get getter = self::Extension|get#getter;
+  method method = self::Extension|method;
+  tearoff method = self::Extension|get#method;
+  method errors = self::Extension|errors;
+  tearoff errors = self::Extension|get#errors;
+}
+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(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(lowered final self::Class #this) → <T extends core::Object? = dynamic>(T%) → T%
+  return self::Extension|get#id(#this);
+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(lowered final self::Class #this) → () → dynamic
+  return () → dynamic => self::Extension|method(#this);
+static method Extension|errors(lowered final self::Class #this) → dynamic {
+  (core::int) → core::int intId = self::Extension|get#getter(#this)<core::int>;
+}
+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::•();
+  (core::int) → core::int intId = self::Extension|get#id(c)<core::int>;
+  (core::double) → core::double doubleId = self::Extension|get#id(c)<core::double>;
+}
+static method errors() → dynamic {
+  self::Class c = new self::Class::•();
+  (core::num) → core::num numId = self::Extension|get#getter(c)<core::num>;
+  (core::bool) → core::bool boolId = self::Extension|get#getter(c)<core::bool>;
+}
diff --git a/pkg/front_end/testcases/extensions/type_variable_bound.dart b/pkg/front_end/testcases/extensions/type_variable_bound.dart
index 2d98762d..5adb87c 100644
--- a/pkg/front_end/testcases/extensions/type_variable_bound.dart
+++ b/pkg/front_end/testcases/extensions/type_variable_bound.dart
@@ -1,8 +1,8 @@
 // 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.
+
 // @dart=2.9
-// @dart=2.8
 
 extension Extension<T> on T {
   T method1() => this;
diff --git a/pkg/front_end/testcases/extensions/type_variable_bound.dart.textual_outline.expect b/pkg/front_end/testcases/extensions/type_variable_bound.dart.textual_outline.expect
index 23bbc97..4bd6f06 100644
--- a/pkg/front_end/testcases/extensions/type_variable_bound.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/extensions/type_variable_bound.dart.textual_outline.expect
@@ -1,5 +1,4 @@
 // @dart = 2.9
-// @dart = 2.8
 extension Extension<T> on T {
   T method1() => this;
 }
diff --git a/pkg/front_end/testcases/extensions/type_variable_bound.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/extensions/type_variable_bound.dart.textual_outline_modelled.expect
index 3dcbad3..3f5d1a5 100644
--- a/pkg/front_end/testcases/extensions/type_variable_bound.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/extensions/type_variable_bound.dart.textual_outline_modelled.expect
@@ -1,5 +1,4 @@
 // @dart = 2.9
-// @dart = 2.8
 Class test1<T>(T t1) {}
 
 class Class {}
diff --git a/pkg/front_end/testcases/extensions/type_variable_bound2.dart b/pkg/front_end/testcases/extensions/type_variable_bound2.dart
new file mode 100644
index 0000000..82744c3
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/type_variable_bound2.dart
@@ -0,0 +1,36 @@
+// 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<T> on T {
+  T method1() => this;
+}
+
+extension BoundExtension<T extends Class> on T {
+  T method2() => this;
+}
+
+class Class {}
+
+class SubClass extends Class {}
+
+Class test1<T>(T t1) {
+  if (t1 is SubClass) {
+    return t1.method1() as SubClass;
+  }
+  return new Class();
+}
+
+test2<T extends Class>(T t2) {
+  if (T == SubClass) {
+    SubClass subClass = t2.method2() as SubClass;
+  }
+}
+
+test3<T>(T t3) {
+  if (t3 is SubClass) {
+    SubClass subClass = t3.method2() as SubClass; // error
+  }
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/extensions/type_variable_bound2.dart.textual_outline.expect b/pkg/front_end/testcases/extensions/type_variable_bound2.dart.textual_outline.expect
new file mode 100644
index 0000000..7f86fba
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/type_variable_bound2.dart.textual_outline.expect
@@ -0,0 +1,16 @@
+extension Extension<T> on T {
+  T method1() => this;
+}
+
+extension BoundExtension<T extends Class> on T {
+  T method2() => this;
+}
+
+class Class {}
+
+class SubClass extends Class {}
+
+Class test1<T>(T t1) {}
+test2<T extends Class>(T t2) {}
+test3<T>(T t3) {}
+main() {}
diff --git a/pkg/front_end/testcases/extensions/type_variable_bound2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/extensions/type_variable_bound2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..d20dc15
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/type_variable_bound2.dart.textual_outline_modelled.expect
@@ -0,0 +1,17 @@
+Class test1<T>(T t1) {}
+
+class Class {}
+
+class SubClass extends Class {}
+
+extension BoundExtension<T extends Class> on T {
+  T method2() => this;
+}
+
+extension Extension<T> on T {
+  T method1() => this;
+}
+
+main() {}
+test2<T extends Class>(T t2) {}
+test3<T>(T t3) {}
diff --git a/pkg/front_end/testcases/extensions/type_variable_bound2.dart.weak.expect b/pkg/front_end/testcases/extensions/type_variable_bound2.dart.weak.expect
new file mode 100644
index 0000000..d5f25e2
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/type_variable_bound2.dart.weak.expect
@@ -0,0 +1,64 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extensions/type_variable_bound2.dart:32:28: Error: The method 'method2' isn't defined for the class 'SubClass'.
+//  - 'SubClass' is from 'pkg/front_end/testcases/extensions/type_variable_bound2.dart'.
+// Try correcting the name to the name of an existing method, or defining a method named 'method2'.
+//     SubClass subClass = t3.method2() as SubClass; // error
+//                            ^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+}
+class SubClass extends self::Class {
+  synthetic constructor •() → self::SubClass
+    : super self::Class::•()
+    ;
+}
+extension Extension<T extends core::Object? = dynamic> on T% {
+  method method1 = self::Extension|method1;
+  tearoff method1 = self::Extension|get#method1;
+}
+extension BoundExtension<T extends self::Class> on T {
+  method method2 = self::BoundExtension|method2;
+  tearoff method2 = self::BoundExtension|get#method2;
+}
+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>(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>(lowered final self::BoundExtension|method2::T #this) → self::BoundExtension|method2::T
+  return #this;
+static method BoundExtension|get#method2<T extends 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) {
+    return self::Extension|method1<self::test1::T%>(t1{self::test1::T% & self::SubClass /* '%' & '!' = '!' */}) as{ForNonNullableByDefault} self::SubClass;
+  }
+  return new self::Class::•();
+}
+static method test2<T extends self::Class>(self::test2::T t2) → dynamic {
+  if(self::test2::T =={core::Type::==}{(core::Object) → core::bool} #C1) {
+    self::SubClass subClass = self::BoundExtension|method2<self::test2::T>(t2) as{ForNonNullableByDefault} self::SubClass;
+  }
+}
+static method test3<T extends core::Object? = dynamic>(self::test3::T% t3) → dynamic {
+  if(t3 is{ForNonNullableByDefault} self::SubClass) {
+    self::SubClass subClass = invalid-expression "pkg/front_end/testcases/extensions/type_variable_bound2.dart:32:28: Error: The method 'method2' isn't defined for the class 'SubClass'.
+ - 'SubClass' is from 'pkg/front_end/testcases/extensions/type_variable_bound2.dart'.
+Try correcting the name to the name of an existing method, or defining a method named 'method2'.
+    SubClass subClass = t3.method2() as SubClass; // error
+                           ^^^^^^^" in t3{self::test3::T% & self::SubClass /* '%' & '!' = '!' */}{<unresolved>}.method2() as{ForNonNullableByDefault} self::SubClass;
+  }
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = TypeLiteralConstant(self::SubClass*)
+}
diff --git a/pkg/front_end/testcases/extensions/type_variable_bound2.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/type_variable_bound2.dart.weak.modular.expect
new file mode 100644
index 0000000..d5f25e2
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/type_variable_bound2.dart.weak.modular.expect
@@ -0,0 +1,64 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extensions/type_variable_bound2.dart:32:28: Error: The method 'method2' isn't defined for the class 'SubClass'.
+//  - 'SubClass' is from 'pkg/front_end/testcases/extensions/type_variable_bound2.dart'.
+// Try correcting the name to the name of an existing method, or defining a method named 'method2'.
+//     SubClass subClass = t3.method2() as SubClass; // error
+//                            ^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+}
+class SubClass extends self::Class {
+  synthetic constructor •() → self::SubClass
+    : super self::Class::•()
+    ;
+}
+extension Extension<T extends core::Object? = dynamic> on T% {
+  method method1 = self::Extension|method1;
+  tearoff method1 = self::Extension|get#method1;
+}
+extension BoundExtension<T extends self::Class> on T {
+  method method2 = self::BoundExtension|method2;
+  tearoff method2 = self::BoundExtension|get#method2;
+}
+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>(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>(lowered final self::BoundExtension|method2::T #this) → self::BoundExtension|method2::T
+  return #this;
+static method BoundExtension|get#method2<T extends 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) {
+    return self::Extension|method1<self::test1::T%>(t1{self::test1::T% & self::SubClass /* '%' & '!' = '!' */}) as{ForNonNullableByDefault} self::SubClass;
+  }
+  return new self::Class::•();
+}
+static method test2<T extends self::Class>(self::test2::T t2) → dynamic {
+  if(self::test2::T =={core::Type::==}{(core::Object) → core::bool} #C1) {
+    self::SubClass subClass = self::BoundExtension|method2<self::test2::T>(t2) as{ForNonNullableByDefault} self::SubClass;
+  }
+}
+static method test3<T extends core::Object? = dynamic>(self::test3::T% t3) → dynamic {
+  if(t3 is{ForNonNullableByDefault} self::SubClass) {
+    self::SubClass subClass = invalid-expression "pkg/front_end/testcases/extensions/type_variable_bound2.dart:32:28: Error: The method 'method2' isn't defined for the class 'SubClass'.
+ - 'SubClass' is from 'pkg/front_end/testcases/extensions/type_variable_bound2.dart'.
+Try correcting the name to the name of an existing method, or defining a method named 'method2'.
+    SubClass subClass = t3.method2() as SubClass; // error
+                           ^^^^^^^" in t3{self::test3::T% & self::SubClass /* '%' & '!' = '!' */}{<unresolved>}.method2() as{ForNonNullableByDefault} self::SubClass;
+  }
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = TypeLiteralConstant(self::SubClass*)
+}
diff --git a/pkg/front_end/testcases/extensions/type_variable_bound2.dart.weak.outline.expect b/pkg/front_end/testcases/extensions/type_variable_bound2.dart.weak.outline.expect
new file mode 100644
index 0000000..1a7ba19
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/type_variable_bound2.dart.weak.outline.expect
@@ -0,0 +1,36 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  synthetic constructor •() → self::Class
+    ;
+}
+class SubClass extends self::Class {
+  synthetic constructor •() → self::SubClass
+    ;
+}
+extension Extension<T extends core::Object? = dynamic> on T% {
+  method method1 = self::Extension|method1;
+  tearoff method1 = self::Extension|get#method1;
+}
+extension BoundExtension<T extends self::Class> on T {
+  method method2 = self::BoundExtension|method2;
+  tearoff method2 = self::BoundExtension|get#method2;
+}
+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>(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>(lowered final self::BoundExtension|method2::T #this) → self::BoundExtension|method2::T
+  ;
+static method BoundExtension|get#method2<T extends 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
+  ;
+static method test2<T extends self::Class>(self::test2::T t2) → dynamic
+  ;
+static method test3<T extends core::Object? = dynamic>(self::test3::T% t3) → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/extensions/type_variable_bound2.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/type_variable_bound2.dart.weak.transformed.expect
new file mode 100644
index 0000000..0c70fa2
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/type_variable_bound2.dart.weak.transformed.expect
@@ -0,0 +1,64 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extensions/type_variable_bound2.dart:32:28: Error: The method 'method2' isn't defined for the class 'SubClass'.
+//  - 'SubClass' is from 'pkg/front_end/testcases/extensions/type_variable_bound2.dart'.
+// Try correcting the name to the name of an existing method, or defining a method named 'method2'.
+//     SubClass subClass = t3.method2() as SubClass; // error
+//                            ^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+}
+class SubClass extends self::Class {
+  synthetic constructor •() → self::SubClass
+    : super self::Class::•()
+    ;
+}
+extension Extension<T extends core::Object? = dynamic> on T% {
+  method method1 = self::Extension|method1;
+  tearoff method1 = self::Extension|get#method1;
+}
+extension BoundExtension<T extends self::Class> on T {
+  method method2 = self::BoundExtension|method2;
+  tearoff method2 = self::BoundExtension|get#method2;
+}
+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>(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>(lowered final self::BoundExtension|method2::T #this) → self::BoundExtension|method2::T
+  return #this;
+static method BoundExtension|get#method2<T extends 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) {
+    return self::Extension|method1<self::test1::T%>(t1{self::test1::T% & self::SubClass /* '%' & '!' = '!' */}) as{ForNonNullableByDefault} self::SubClass;
+  }
+  return new self::Class::•();
+}
+static method test2<T extends self::Class>(self::test2::T t2) → dynamic {
+  if(self::test2::T =={core::Type::==}{(core::Object) → core::bool} #C1) {
+    self::SubClass subClass = self::BoundExtension|method2<self::test2::T>(t2) as{ForNonNullableByDefault} self::SubClass;
+  }
+}
+static method test3<T extends core::Object? = dynamic>(self::test3::T% t3) → dynamic {
+  if(t3 is{ForNonNullableByDefault} self::SubClass) {
+    self::SubClass subClass = invalid-expression "pkg/front_end/testcases/extensions/type_variable_bound2.dart:32:28: Error: The method 'method2' isn't defined for the class 'SubClass'.
+ - 'SubClass' is from 'pkg/front_end/testcases/extensions/type_variable_bound2.dart'.
+Try correcting the name to the name of an existing method, or defining a method named 'method2'.
+    SubClass subClass = t3.method2() as SubClass; // error
+                           ^^^^^^^" in t3{self::test3::T% & self::SubClass /* '%' & '!' = '!' */}{<unresolved>}.method2();
+  }
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = TypeLiteralConstant(self::SubClass*)
+}
diff --git a/pkg/front_end/testcases/extensions/type_variables.dart b/pkg/front_end/testcases/extensions/type_variables.dart
index c17dbcb..bea2ded 100644
--- a/pkg/front_end/testcases/extensions/type_variables.dart
+++ b/pkg/front_end/testcases/extensions/type_variables.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2019, 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.
-// @dart=2.9
+
 class A1<T> {}
 
 extension A2<T> on A1<T> {
diff --git a/pkg/front_end/testcases/extensions/type_variables.dart.textual_outline.expect b/pkg/front_end/testcases/extensions/type_variables.dart.textual_outline.expect
index 28326e8..4f3bfdf 100644
--- a/pkg/front_end/testcases/extensions/type_variables.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/extensions/type_variables.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A1<T> {}
 
 extension A2<T> on A1<T> {
diff --git a/pkg/front_end/testcases/extensions/type_variables.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/extensions/type_variables.dart.textual_outline_modelled.expect
index 28326e8..4f3bfdf 100644
--- a/pkg/front_end/testcases/extensions/type_variables.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/extensions/type_variables.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A1<T> {}
 
 extension A2<T> on A1<T> {
diff --git a/pkg/front_end/testcases/extensions/type_variables.dart.weak.expect b/pkg/front_end/testcases/extensions/type_variables.dart.weak.expect
index aeae0f7..ef08b8e 100644
--- a/pkg/front_end/testcases/extensions/type_variables.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/type_variables.dart.weak.expect
@@ -1,48 +1,38 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A1<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A1<self::A1::T*>*
+class A1<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A1<self::A1::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension A2<T extends core::Object* = dynamic> on self::A1<T*>* {
+extension A2<T extends core::Object? = dynamic> on self::A1<T%> {
   method method1 = self::A2|method1;
   tearoff method1 = self::A2|get#method1;
   method method2 = self::A2|method2;
   tearoff method2 = self::A2|get#method2;
 }
-extension A3<T extends self::A1<T*>* = self::A1<dynamic>*> on self::A1<T*>* {
+extension A3<T extends self::A1<T> = self::A1<dynamic>> on self::A1<T> {
 }
-extension A4<T extends core::Object* = dynamic> on self::A1<T*>* {
+extension A4<T extends core::Object? = dynamic> on self::A1<T%> {
   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>(lowered 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>(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>*>(lowered final self::A1<self::A2|method2::T*>* #this, self::A2|method2::S* o) → self::A1<self::A2|method2::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>>(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*);
+  core::print(self::A2|method2::T%);
+  core::print(self::A2|method2::S);
   return #this;
 }
-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>(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 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>(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.weak.modular.expect b/pkg/front_end/testcases/extensions/type_variables.dart.weak.modular.expect
index aeae0f7..ef08b8e 100644
--- a/pkg/front_end/testcases/extensions/type_variables.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/extensions/type_variables.dart.weak.modular.expect
@@ -1,48 +1,38 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A1<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A1<self::A1::T*>*
+class A1<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A1<self::A1::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension A2<T extends core::Object* = dynamic> on self::A1<T*>* {
+extension A2<T extends core::Object? = dynamic> on self::A1<T%> {
   method method1 = self::A2|method1;
   tearoff method1 = self::A2|get#method1;
   method method2 = self::A2|method2;
   tearoff method2 = self::A2|get#method2;
 }
-extension A3<T extends self::A1<T*>* = self::A1<dynamic>*> on self::A1<T*>* {
+extension A3<T extends self::A1<T> = self::A1<dynamic>> on self::A1<T> {
 }
-extension A4<T extends core::Object* = dynamic> on self::A1<T*>* {
+extension A4<T extends core::Object? = dynamic> on self::A1<T%> {
   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>(lowered 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>(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>*>(lowered final self::A1<self::A2|method2::T*>* #this, self::A2|method2::S* o) → self::A1<self::A2|method2::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>>(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*);
+  core::print(self::A2|method2::T%);
+  core::print(self::A2|method2::S);
   return #this;
 }
-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>(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 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>(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.weak.outline.expect b/pkg/front_end/testcases/extensions/type_variables.dart.weak.outline.expect
index 38ec5af..bae3a86 100644
--- a/pkg/front_end/testcases/extensions/type_variables.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extensions/type_variables.dart.weak.outline.expect
@@ -1,44 +1,34 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A1<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A1<self::A1::T*>*
+class A1<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A1<self::A1::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension A2<T extends core::Object* = dynamic> on self::A1<T*>* {
+extension A2<T extends core::Object? = dynamic> on self::A1<T%> {
   method method1 = self::A2|method1;
   tearoff method1 = self::A2|get#method1;
   method method2 = self::A2|method2;
   tearoff method2 = self::A2|get#method2;
 }
-extension A3<T extends self::A1<T*>* = self::A1<dynamic>*> on self::A1<T*>* {
+extension A3<T extends self::A1<T> = self::A1<dynamic>> on self::A1<T> {
 }
-extension A4<T extends core::Object* = dynamic> on self::A1<T*>* {
+extension A4<T extends core::Object? = dynamic> on self::A1<T%> {
   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>(lowered 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>(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>*>(lowered final self::A1<self::A2|method2::T*>* #this, self::A2|method2::S* o) → self::A1<self::A2|method2::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>>(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>(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>(lowered final self::A1<self::A4|method::#T*>* #this) → dynamic
+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>(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 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.weak.transformed.expect b/pkg/front_end/testcases/extensions/type_variables.dart.weak.transformed.expect
index aeae0f7..ef08b8e 100644
--- a/pkg/front_end/testcases/extensions/type_variables.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/type_variables.dart.weak.transformed.expect
@@ -1,48 +1,38 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
-class A1<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::A1<self::A1::T*>*
+class A1<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A1<self::A1::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension A2<T extends core::Object* = dynamic> on self::A1<T*>* {
+extension A2<T extends core::Object? = dynamic> on self::A1<T%> {
   method method1 = self::A2|method1;
   tearoff method1 = self::A2|get#method1;
   method method2 = self::A2|method2;
   tearoff method2 = self::A2|get#method2;
 }
-extension A3<T extends self::A1<T*>* = self::A1<dynamic>*> on self::A1<T*>* {
+extension A3<T extends self::A1<T> = self::A1<dynamic>> on self::A1<T> {
 }
-extension A4<T extends core::Object* = dynamic> on self::A1<T*>* {
+extension A4<T extends core::Object? = dynamic> on self::A1<T%> {
   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>(lowered 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>(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>*>(lowered final self::A1<self::A2|method2::T*>* #this, self::A2|method2::S* o) → self::A1<self::A2|method2::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>>(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*);
+  core::print(self::A2|method2::T%);
+  core::print(self::A2|method2::S);
   return #this;
 }
-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>(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 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>(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 b/pkg/front_end/testcases/extensions/unnamed_extensions.dart
index bf0bddc..58eecf4 100644
--- a/pkg/front_end/testcases/extensions/unnamed_extensions.dart
+++ b/pkg/front_end/testcases/extensions/unnamed_extensions.dart
@@ -1,7 +1,7 @@
 // Copyright (c) 2019, 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.
-// @dart=2.9
+
 class Class1 {
   int field;
 
@@ -23,7 +23,7 @@
     print('Extension1.method on $this');
     return field;
   }
-  int genericMethod<T extends num>(T t) {
+  num genericMethod<T extends num>(T t) {
     print('Extension1.genericMethod<$T>($t) on $this');
     return field + t;
   }
@@ -44,7 +44,7 @@
     print('Extension2.method on $this');
     return field + 3;
   }
-  int genericMethod<T extends num>(T t) {
+  num genericMethod<T extends num>(T t) {
     print('Extension2.genericMethod<$T>($t) on $this');
     return field + t + 4;
   }
@@ -60,22 +60,24 @@
 }
 
 main() {
-  testExtension1();
-  testExtension2();
+  Class1 c10 = new Class1(0);
+  Class1 c11 = new Class1(1);
+  testExtension1(c10, c11, c10, c11);
+  Class2 c20 = new Class2(0);
+  Class2 c21 = new Class2(1);
+  testExtension2(c20, c21, c20);
 }
 
-testExtension1() {
-  Class1 c0 = new Class1(0);
-  Class1 c1 = new Class1(1);
+testExtension1(Class1 c0, Class1 c1, Class1? c0n, Class1? c1n) {
   expect(0, c0.method());
   expect(1, c1.method());
-  expect(1, c1?.method());
+  expect(1, c1n?.method());
   expect(42, c0.genericMethod(42));
   expect(43, c0.genericMethod<num>(43));
   expect(88, c1.genericMethod(87));
   expect(89, c1.genericMethod<num>(88));
   expect(0, c0.property);
-  expect(0, c0?.property);
+  expect(0, c0n?.property);
   expect(42, c0.property = 42);
   expect(1, c1.property);
   expect(87, c0.property = 87);
@@ -85,18 +87,16 @@
   expect(67, c0.property = c1.property = c0.property = 67);
 }
 
-testExtension2() {
-  Class2 c0 = new Class2(0);
-  Class2 c1 = new Class2(1);
+testExtension2(Class2 c0, Class2 c1, Class2? c0n) {
   expect(3, c0.method());
-  expect(3, c0?.method());
+  expect(3, c0n?.method());
   expect(4, c1.method());
   expect(46, c0.genericMethod(42));
   expect(47, c0.genericMethod<num>(43));
   expect(92, c1.genericMethod(87));
   expect(93, c1.genericMethod<num>(88));
   expect(5, c0.property);
-  expect(5, c0?.property);
+  expect(5, c0n?.property);
   expect(42, c0.property = 42);
   expect(48, c0.property);
   expect(6, c1.property);
diff --git a/pkg/front_end/testcases/extensions/unnamed_extensions.dart.textual_outline.expect b/pkg/front_end/testcases/extensions/unnamed_extensions.dart.textual_outline.expect
index 4120a4e..c1ec591 100644
--- a/pkg/front_end/testcases/extensions/unnamed_extensions.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/extensions/unnamed_extensions.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Class1 {
   int field;
   Class1(this.field);
@@ -13,19 +12,19 @@
 
 extension on Class1 {
   int method() {}
-  int genericMethod<T extends num>(T t) {}
+  num genericMethod<T extends num>(T t) {}
   int get property {}
   set property(int value) {}
 }
 
 extension on Class2 {
   int method() {}
-  int genericMethod<T extends num>(T t) {}
+  num genericMethod<T extends num>(T t) {}
   int get property {}
   set property(int value) {}
 }
 
 main() {}
-testExtension1() {}
-testExtension2() {}
+testExtension1(Class1 c0, Class1 c1, Class1? c0n, Class1? c1n) {}
+testExtension2(Class2 c0, Class2 c1, Class2? c0n) {}
 expect(expected, actual) {}
diff --git a/pkg/front_end/testcases/extensions/unnamed_extensions.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/extensions/unnamed_extensions.dart.textual_outline_modelled.expect
index d2ab91a..77bfd33 100644
--- a/pkg/front_end/testcases/extensions/unnamed_extensions.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/extensions/unnamed_extensions.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class Class1 {
   Class1(this.field);
   String toString() => 'Class1($field)';
@@ -14,19 +13,19 @@
 expect(expected, actual) {}
 
 extension on Class1 {
-  int genericMethod<T extends num>(T t) {}
   int get property {}
   int method() {}
+  num genericMethod<T extends num>(T t) {}
   set property(int value) {}
 }
 
 extension on Class2 {
-  int genericMethod<T extends num>(T t) {}
   int get property {}
   int method() {}
+  num genericMethod<T extends num>(T t) {}
   set property(int value) {}
 }
 
 main() {}
-testExtension1() {}
-testExtension2() {}
+testExtension1(Class1 c0, Class1 c1, Class1? c0n, Class1? c1n) {}
+testExtension2(Class2 c0, Class2 c1, Class2? c0n) {}
diff --git a/pkg/front_end/testcases/extensions/unnamed_extensions.dart.weak.expect b/pkg/front_end/testcases/extensions/unnamed_extensions.dart.weak.expect
index 6532400..d69a033 100644
--- a/pkg/front_end/testcases/extensions/unnamed_extensions.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/unnamed_extensions.dart.weak.expect
@@ -1,42 +1,24 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Class1 extends core::Object {
-  field core::int* field;
-  constructor •(core::int* field) → self::Class1*
+  field core::int field;
+  constructor •(core::int field) → self::Class1
     : self::Class1::field = field, super core::Object::•()
     ;
-  method toString() → core::String*
-    return "Class1(${this.{self::Class1::field}{core::int*}})";
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method toString() → core::String
+    return "Class1(${this.{self::Class1::field}{core::int}})";
 }
 class Class2 extends core::Object {
-  field core::int* field;
-  constructor •(core::int* field) → self::Class2*
+  field core::int field;
+  constructor •(core::int field) → self::Class2
     : self::Class2::field = field, super core::Object::•()
     ;
-  method toString() → core::String*
-    return "Class2(${this.{self::Class2::field}{core::int*}})";
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method toString() → core::String
+    return "Class2(${this.{self::Class2::field}{core::int}})";
 }
-extension _extension#0 on self::Class1* {
+extension _extension#0 on self::Class1 {
   method method = self::_extension#0|method;
   tearoff method = self::_extension#0|get#method;
   method genericMethod = self::_extension#0|genericMethod;
@@ -44,7 +26,7 @@
   get property = self::_extension#0|get#property;
   set property = self::_extension#0|set#property;
 }
-extension _extension#1 on self::Class2* {
+extension _extension#1 on self::Class2 {
   method method = self::_extension#1|method;
   tearoff method = self::_extension#1|get#method;
   method genericMethod = self::_extension#1|genericMethod;
@@ -52,96 +34,96 @@
   get property = self::_extension#1|get#property;
   set property = self::_extension#1|set#property;
 }
-static method _extension#0|method(lowered 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}{core::int*};
+  return #this.{self::Class1::field}{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*>(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::int*}.{core::num::+}(t){(core::num*) →* core::num*} as{TypeError} 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>(lowered final self::Class1 #this, self::_extension#0|genericMethod::T t) → core::num {
+  core::print("Extension1.genericMethod<${self::_extension#0|genericMethod::T}>(${t}) on ${#this}");
+  return #this.{self::Class1::field}{core::int}.{core::num::+}(t){(core::num) → core::num};
 }
-static method _extension#0|get#genericMethod(lowered final self::Class1* #this) → <T extends core::num*>(T*) →* core::int*
-  return <T extends core::num*>(T* t) → core::int* => self::_extension#0|genericMethod<T*>(#this, t);
-static method _extension#0|get#property(lowered final self::Class1* #this) → core::int* {
+static method _extension#0|get#genericMethod(lowered final self::Class1 #this) → <T extends core::num>(T) → core::num
+  return <T extends core::num>(T t) → core::num => self::_extension#0|genericMethod<T>(#this, t);
+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}{core::int*};
+  return #this.{self::Class1::field}{core::int};
 }
-static method _extension#0|set#property(lowered 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){(core::num*) →* core::int*};
+  value = value.{core::num::+}(1){(core::num) → core::int};
 }
-static method _extension#1|method(lowered 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::int*}.{core::num::+}(3){(core::num*) →* core::int*};
+  return #this.{self::Class2::field}{core::int}.{core::num::+}(3){(core::num) → 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*>(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::int*}.{core::num::+}(t){(core::num*) →* core::num*}.{core::num::+}(4){(core::num*) →* core::num*} as{TypeError} 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>(lowered final self::Class2 #this, self::_extension#1|genericMethod::T t) → core::num {
+  core::print("Extension2.genericMethod<${self::_extension#1|genericMethod::T}>(${t}) on ${#this}");
+  return #this.{self::Class2::field}{core::int}.{core::num::+}(t){(core::num) → core::num}.{core::num::+}(4){(core::num) → core::num};
 }
-static method _extension#1|get#genericMethod(lowered final self::Class2* #this) → <T extends core::num*>(T*) →* core::int*
-  return <T extends core::num*>(T* t) → core::int* => self::_extension#1|genericMethod<T*>(#this, t);
-static method _extension#1|get#property(lowered final self::Class2* #this) → core::int* {
+static method _extension#1|get#genericMethod(lowered final self::Class2 #this) → <T extends core::num>(T) → core::num
+  return <T extends core::num>(T t) → core::num => self::_extension#1|genericMethod<T>(#this, t);
+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::int*}.{core::num::+}(5){(core::num*) →* core::int*};
+  return #this.{self::Class2::field}{core::int}.{core::num::+}(5){(core::num) → core::int};
 }
-static method _extension#1|set#property(lowered 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){(core::num*) →* core::int*};
+  value = value.{core::num::+}(1){(core::num) → core::int};
   #this.{self::Class2::field} = value;
 }
 static method main() → dynamic {
-  self::testExtension1();
-  self::testExtension2();
+  self::Class1 c10 = new self::Class1::•(0);
+  self::Class1 c11 = new self::Class1::•(1);
+  self::testExtension1(c10, c11, c10, c11);
+  self::Class2 c20 = new self::Class2::•(0);
+  self::Class2 c21 = new self::Class2::•(1);
+  self::testExtension2(c20, c21, c20);
 }
-static method testExtension1() → dynamic {
-  self::Class1* c0 = new self::Class1::•(0);
-  self::Class1* c1 = new self::Class1::•(1);
+static method testExtension1(self::Class1 c0, self::Class1 c1, self::Class1? c0n, self::Class1? c1n) → dynamic {
   self::expect(0, self::_extension#0|method(c0));
   self::expect(1, self::_extension#0|method(c1));
-  self::expect(1, let final self::Class1* #t1 = c1 in #t1 == null ?{core::int*} null : self::_extension#0|method(#t1));
-  self::expect(42, self::_extension#0|genericMethod<core::int*>(c0, 42));
-  self::expect(43, self::_extension#0|genericMethod<core::num*>(c0, 43));
-  self::expect(88, self::_extension#0|genericMethod<core::int*>(c1, 87));
-  self::expect(89, self::_extension#0|genericMethod<core::num*>(c1, 88));
+  self::expect(1, let final self::Class1? #t1 = c1n in #t1 == null ?{core::int?} null : self::_extension#0|method(#t1{self::Class1}));
+  self::expect(42, self::_extension#0|genericMethod<core::int>(c0, 42));
+  self::expect(43, self::_extension#0|genericMethod<core::num>(c0, 43));
+  self::expect(88, self::_extension#0|genericMethod<core::int>(c1, 87));
+  self::expect(89, self::_extension#0|genericMethod<core::num>(c1, 88));
   self::expect(0, self::_extension#0|get#property(c0));
-  self::expect(0, let final self::Class1* #t2 = c0 in #t2 == null ?{core::int*} null : self::_extension#0|get#property(#t2));
-  self::expect(42, let final core::int* #t3 = 42 in let final void #t4 = self::_extension#0|set#property(c0, #t3) in #t3);
+  self::expect(0, let final self::Class1? #t2 = c0n in #t2 == null ?{core::int?} null : self::_extension#0|get#property(#t2{self::Class1}));
+  self::expect(42, let final core::int #t3 = 42 in let final void #t4 = self::_extension#0|set#property(c0, #t3) in #t3);
   self::expect(1, self::_extension#0|get#property(c1));
-  self::expect(87, let final core::int* #t5 = 87 in let final void #t6 = self::_extension#0|set#property(c0, #t5) in #t5);
-  self::expect(27, let final core::int* #t7 = let final core::int* #t8 = 27 in let final void #t9 = self::_extension#0|set#property(c1, #t8) in #t8 in let final void #t10 = self::_extension#0|set#property(c0, #t7) in #t7);
-  self::expect(37, let final core::int* #t11 = let final core::int* #t12 = 37 in let final void #t13 = self::_extension#0|set#property(c0, #t12) in #t12 in let final void #t14 = self::_extension#0|set#property(c1, #t11) in #t11);
-  self::expect(77, let final core::int* #t15 = let final core::int* #t16 = let final core::int* #t17 = 77 in let final void #t18 = self::_extension#0|set#property(c1, #t17) in #t17 in let final void #t19 = self::_extension#0|set#property(c0, #t16) in #t16 in let final void #t20 = self::_extension#0|set#property(c1, #t15) in #t15);
-  self::expect(67, let final core::int* #t21 = let final core::int* #t22 = let final core::int* #t23 = 67 in let final void #t24 = self::_extension#0|set#property(c0, #t23) in #t23 in let final void #t25 = self::_extension#0|set#property(c1, #t22) in #t22 in let final void #t26 = self::_extension#0|set#property(c0, #t21) in #t21);
+  self::expect(87, let final core::int #t5 = 87 in let final void #t6 = self::_extension#0|set#property(c0, #t5) in #t5);
+  self::expect(27, let final core::int #t7 = let final core::int #t8 = 27 in let final void #t9 = self::_extension#0|set#property(c1, #t8) in #t8 in let final void #t10 = self::_extension#0|set#property(c0, #t7) in #t7);
+  self::expect(37, let final core::int #t11 = let final core::int #t12 = 37 in let final void #t13 = self::_extension#0|set#property(c0, #t12) in #t12 in let final void #t14 = self::_extension#0|set#property(c1, #t11) in #t11);
+  self::expect(77, let final core::int #t15 = let final core::int #t16 = let final core::int #t17 = 77 in let final void #t18 = self::_extension#0|set#property(c1, #t17) in #t17 in let final void #t19 = self::_extension#0|set#property(c0, #t16) in #t16 in let final void #t20 = self::_extension#0|set#property(c1, #t15) in #t15);
+  self::expect(67, let final core::int #t21 = let final core::int #t22 = let final core::int #t23 = 67 in let final void #t24 = self::_extension#0|set#property(c0, #t23) in #t23 in let final void #t25 = self::_extension#0|set#property(c1, #t22) in #t22 in let final void #t26 = self::_extension#0|set#property(c0, #t21) in #t21);
 }
-static method testExtension2() → dynamic {
-  self::Class2* c0 = new self::Class2::•(0);
-  self::Class2* c1 = new self::Class2::•(1);
+static method testExtension2(self::Class2 c0, self::Class2 c1, self::Class2? c0n) → dynamic {
   self::expect(3, self::_extension#1|method(c0));
-  self::expect(3, let final self::Class2* #t27 = c0 in #t27 == null ?{core::int*} null : self::_extension#1|method(#t27));
+  self::expect(3, let final self::Class2? #t27 = c0n in #t27 == null ?{core::int?} null : self::_extension#1|method(#t27{self::Class2}));
   self::expect(4, self::_extension#1|method(c1));
-  self::expect(46, self::_extension#1|genericMethod<core::int*>(c0, 42));
-  self::expect(47, self::_extension#1|genericMethod<core::num*>(c0, 43));
-  self::expect(92, self::_extension#1|genericMethod<core::int*>(c1, 87));
-  self::expect(93, self::_extension#1|genericMethod<core::num*>(c1, 88));
+  self::expect(46, self::_extension#1|genericMethod<core::int>(c0, 42));
+  self::expect(47, self::_extension#1|genericMethod<core::num>(c0, 43));
+  self::expect(92, self::_extension#1|genericMethod<core::int>(c1, 87));
+  self::expect(93, self::_extension#1|genericMethod<core::num>(c1, 88));
   self::expect(5, self::_extension#1|get#property(c0));
-  self::expect(5, let final self::Class2* #t28 = c0 in #t28 == null ?{core::int*} null : self::_extension#1|get#property(#t28));
-  self::expect(42, let final core::int* #t29 = 42 in let final void #t30 = self::_extension#1|set#property(c0, #t29) in #t29);
+  self::expect(5, let final self::Class2? #t28 = c0n in #t28 == null ?{core::int?} null : self::_extension#1|get#property(#t28{self::Class2}));
+  self::expect(42, let final core::int #t29 = 42 in let final void #t30 = self::_extension#1|set#property(c0, #t29) in #t29);
   self::expect(48, self::_extension#1|get#property(c0));
   self::expect(6, self::_extension#1|get#property(c1));
-  self::expect(43, let final core::int* #t31 = 43 in let final void #t32 = self::_extension#1|set#property(c1, #t31) in #t31);
+  self::expect(43, let final core::int #t31 = 43 in let final void #t32 = self::_extension#1|set#property(c1, #t31) in #t31);
   self::expect(49, self::_extension#1|get#property(c1));
-  self::expect(49, let final core::int* #t33 = self::_extension#1|get#property(c1) in let final void #t34 = self::_extension#1|set#property(c0, #t33) in #t33);
-  self::expect(55, let final core::int* #t35 = self::_extension#1|get#property(c0) in let final void #t36 = self::_extension#1|set#property(c1, #t35) in #t35);
-  self::expect(61, let final core::int* #t37 = let final core::int* #t38 = self::_extension#1|get#property(c1) in let final void #t39 = self::_extension#1|set#property(c0, #t38) in #t38 in let final void #t40 = self::_extension#1|set#property(c1, #t37) in #t37);
-  self::expect(67, let final core::int* #t41 = let final core::int* #t42 = self::_extension#1|get#property(c0) in let final void #t43 = self::_extension#1|set#property(c1, #t42) in #t42 in let final void #t44 = self::_extension#1|set#property(c0, #t41) in #t41);
+  self::expect(49, let final core::int #t33 = self::_extension#1|get#property(c1) in let final void #t34 = self::_extension#1|set#property(c0, #t33) in #t33);
+  self::expect(55, let final core::int #t35 = self::_extension#1|get#property(c0) in let final void #t36 = self::_extension#1|set#property(c1, #t35) in #t35);
+  self::expect(61, let final core::int #t37 = let final core::int #t38 = self::_extension#1|get#property(c1) in let final void #t39 = self::_extension#1|set#property(c0, #t38) in #t38 in let final void #t40 = self::_extension#1|set#property(c1, #t37) in #t37);
+  self::expect(67, let final core::int #t41 = let final core::int #t42 = self::_extension#1|get#property(c0) in let final void #t43 = self::_extension#1|set#property(c1, #t42) in #t42 in let final void #t44 = self::_extension#1|set#property(c0, #t41) in #t41);
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual)) {
     throw "Mismatch: expected=${expected}, actual=${actual}";
   }
 }
diff --git a/pkg/front_end/testcases/extensions/unnamed_extensions.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/unnamed_extensions.dart.weak.modular.expect
index 6532400..d69a033 100644
--- a/pkg/front_end/testcases/extensions/unnamed_extensions.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/extensions/unnamed_extensions.dart.weak.modular.expect
@@ -1,42 +1,24 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Class1 extends core::Object {
-  field core::int* field;
-  constructor •(core::int* field) → self::Class1*
+  field core::int field;
+  constructor •(core::int field) → self::Class1
     : self::Class1::field = field, super core::Object::•()
     ;
-  method toString() → core::String*
-    return "Class1(${this.{self::Class1::field}{core::int*}})";
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method toString() → core::String
+    return "Class1(${this.{self::Class1::field}{core::int}})";
 }
 class Class2 extends core::Object {
-  field core::int* field;
-  constructor •(core::int* field) → self::Class2*
+  field core::int field;
+  constructor •(core::int field) → self::Class2
     : self::Class2::field = field, super core::Object::•()
     ;
-  method toString() → core::String*
-    return "Class2(${this.{self::Class2::field}{core::int*}})";
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method toString() → core::String
+    return "Class2(${this.{self::Class2::field}{core::int}})";
 }
-extension _extension#0 on self::Class1* {
+extension _extension#0 on self::Class1 {
   method method = self::_extension#0|method;
   tearoff method = self::_extension#0|get#method;
   method genericMethod = self::_extension#0|genericMethod;
@@ -44,7 +26,7 @@
   get property = self::_extension#0|get#property;
   set property = self::_extension#0|set#property;
 }
-extension _extension#1 on self::Class2* {
+extension _extension#1 on self::Class2 {
   method method = self::_extension#1|method;
   tearoff method = self::_extension#1|get#method;
   method genericMethod = self::_extension#1|genericMethod;
@@ -52,96 +34,96 @@
   get property = self::_extension#1|get#property;
   set property = self::_extension#1|set#property;
 }
-static method _extension#0|method(lowered 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}{core::int*};
+  return #this.{self::Class1::field}{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*>(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::int*}.{core::num::+}(t){(core::num*) →* core::num*} as{TypeError} 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>(lowered final self::Class1 #this, self::_extension#0|genericMethod::T t) → core::num {
+  core::print("Extension1.genericMethod<${self::_extension#0|genericMethod::T}>(${t}) on ${#this}");
+  return #this.{self::Class1::field}{core::int}.{core::num::+}(t){(core::num) → core::num};
 }
-static method _extension#0|get#genericMethod(lowered final self::Class1* #this) → <T extends core::num*>(T*) →* core::int*
-  return <T extends core::num*>(T* t) → core::int* => self::_extension#0|genericMethod<T*>(#this, t);
-static method _extension#0|get#property(lowered final self::Class1* #this) → core::int* {
+static method _extension#0|get#genericMethod(lowered final self::Class1 #this) → <T extends core::num>(T) → core::num
+  return <T extends core::num>(T t) → core::num => self::_extension#0|genericMethod<T>(#this, t);
+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}{core::int*};
+  return #this.{self::Class1::field}{core::int};
 }
-static method _extension#0|set#property(lowered 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){(core::num*) →* core::int*};
+  value = value.{core::num::+}(1){(core::num) → core::int};
 }
-static method _extension#1|method(lowered 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::int*}.{core::num::+}(3){(core::num*) →* core::int*};
+  return #this.{self::Class2::field}{core::int}.{core::num::+}(3){(core::num) → 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*>(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::int*}.{core::num::+}(t){(core::num*) →* core::num*}.{core::num::+}(4){(core::num*) →* core::num*} as{TypeError} 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>(lowered final self::Class2 #this, self::_extension#1|genericMethod::T t) → core::num {
+  core::print("Extension2.genericMethod<${self::_extension#1|genericMethod::T}>(${t}) on ${#this}");
+  return #this.{self::Class2::field}{core::int}.{core::num::+}(t){(core::num) → core::num}.{core::num::+}(4){(core::num) → core::num};
 }
-static method _extension#1|get#genericMethod(lowered final self::Class2* #this) → <T extends core::num*>(T*) →* core::int*
-  return <T extends core::num*>(T* t) → core::int* => self::_extension#1|genericMethod<T*>(#this, t);
-static method _extension#1|get#property(lowered final self::Class2* #this) → core::int* {
+static method _extension#1|get#genericMethod(lowered final self::Class2 #this) → <T extends core::num>(T) → core::num
+  return <T extends core::num>(T t) → core::num => self::_extension#1|genericMethod<T>(#this, t);
+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::int*}.{core::num::+}(5){(core::num*) →* core::int*};
+  return #this.{self::Class2::field}{core::int}.{core::num::+}(5){(core::num) → core::int};
 }
-static method _extension#1|set#property(lowered 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){(core::num*) →* core::int*};
+  value = value.{core::num::+}(1){(core::num) → core::int};
   #this.{self::Class2::field} = value;
 }
 static method main() → dynamic {
-  self::testExtension1();
-  self::testExtension2();
+  self::Class1 c10 = new self::Class1::•(0);
+  self::Class1 c11 = new self::Class1::•(1);
+  self::testExtension1(c10, c11, c10, c11);
+  self::Class2 c20 = new self::Class2::•(0);
+  self::Class2 c21 = new self::Class2::•(1);
+  self::testExtension2(c20, c21, c20);
 }
-static method testExtension1() → dynamic {
-  self::Class1* c0 = new self::Class1::•(0);
-  self::Class1* c1 = new self::Class1::•(1);
+static method testExtension1(self::Class1 c0, self::Class1 c1, self::Class1? c0n, self::Class1? c1n) → dynamic {
   self::expect(0, self::_extension#0|method(c0));
   self::expect(1, self::_extension#0|method(c1));
-  self::expect(1, let final self::Class1* #t1 = c1 in #t1 == null ?{core::int*} null : self::_extension#0|method(#t1));
-  self::expect(42, self::_extension#0|genericMethod<core::int*>(c0, 42));
-  self::expect(43, self::_extension#0|genericMethod<core::num*>(c0, 43));
-  self::expect(88, self::_extension#0|genericMethod<core::int*>(c1, 87));
-  self::expect(89, self::_extension#0|genericMethod<core::num*>(c1, 88));
+  self::expect(1, let final self::Class1? #t1 = c1n in #t1 == null ?{core::int?} null : self::_extension#0|method(#t1{self::Class1}));
+  self::expect(42, self::_extension#0|genericMethod<core::int>(c0, 42));
+  self::expect(43, self::_extension#0|genericMethod<core::num>(c0, 43));
+  self::expect(88, self::_extension#0|genericMethod<core::int>(c1, 87));
+  self::expect(89, self::_extension#0|genericMethod<core::num>(c1, 88));
   self::expect(0, self::_extension#0|get#property(c0));
-  self::expect(0, let final self::Class1* #t2 = c0 in #t2 == null ?{core::int*} null : self::_extension#0|get#property(#t2));
-  self::expect(42, let final core::int* #t3 = 42 in let final void #t4 = self::_extension#0|set#property(c0, #t3) in #t3);
+  self::expect(0, let final self::Class1? #t2 = c0n in #t2 == null ?{core::int?} null : self::_extension#0|get#property(#t2{self::Class1}));
+  self::expect(42, let final core::int #t3 = 42 in let final void #t4 = self::_extension#0|set#property(c0, #t3) in #t3);
   self::expect(1, self::_extension#0|get#property(c1));
-  self::expect(87, let final core::int* #t5 = 87 in let final void #t6 = self::_extension#0|set#property(c0, #t5) in #t5);
-  self::expect(27, let final core::int* #t7 = let final core::int* #t8 = 27 in let final void #t9 = self::_extension#0|set#property(c1, #t8) in #t8 in let final void #t10 = self::_extension#0|set#property(c0, #t7) in #t7);
-  self::expect(37, let final core::int* #t11 = let final core::int* #t12 = 37 in let final void #t13 = self::_extension#0|set#property(c0, #t12) in #t12 in let final void #t14 = self::_extension#0|set#property(c1, #t11) in #t11);
-  self::expect(77, let final core::int* #t15 = let final core::int* #t16 = let final core::int* #t17 = 77 in let final void #t18 = self::_extension#0|set#property(c1, #t17) in #t17 in let final void #t19 = self::_extension#0|set#property(c0, #t16) in #t16 in let final void #t20 = self::_extension#0|set#property(c1, #t15) in #t15);
-  self::expect(67, let final core::int* #t21 = let final core::int* #t22 = let final core::int* #t23 = 67 in let final void #t24 = self::_extension#0|set#property(c0, #t23) in #t23 in let final void #t25 = self::_extension#0|set#property(c1, #t22) in #t22 in let final void #t26 = self::_extension#0|set#property(c0, #t21) in #t21);
+  self::expect(87, let final core::int #t5 = 87 in let final void #t6 = self::_extension#0|set#property(c0, #t5) in #t5);
+  self::expect(27, let final core::int #t7 = let final core::int #t8 = 27 in let final void #t9 = self::_extension#0|set#property(c1, #t8) in #t8 in let final void #t10 = self::_extension#0|set#property(c0, #t7) in #t7);
+  self::expect(37, let final core::int #t11 = let final core::int #t12 = 37 in let final void #t13 = self::_extension#0|set#property(c0, #t12) in #t12 in let final void #t14 = self::_extension#0|set#property(c1, #t11) in #t11);
+  self::expect(77, let final core::int #t15 = let final core::int #t16 = let final core::int #t17 = 77 in let final void #t18 = self::_extension#0|set#property(c1, #t17) in #t17 in let final void #t19 = self::_extension#0|set#property(c0, #t16) in #t16 in let final void #t20 = self::_extension#0|set#property(c1, #t15) in #t15);
+  self::expect(67, let final core::int #t21 = let final core::int #t22 = let final core::int #t23 = 67 in let final void #t24 = self::_extension#0|set#property(c0, #t23) in #t23 in let final void #t25 = self::_extension#0|set#property(c1, #t22) in #t22 in let final void #t26 = self::_extension#0|set#property(c0, #t21) in #t21);
 }
-static method testExtension2() → dynamic {
-  self::Class2* c0 = new self::Class2::•(0);
-  self::Class2* c1 = new self::Class2::•(1);
+static method testExtension2(self::Class2 c0, self::Class2 c1, self::Class2? c0n) → dynamic {
   self::expect(3, self::_extension#1|method(c0));
-  self::expect(3, let final self::Class2* #t27 = c0 in #t27 == null ?{core::int*} null : self::_extension#1|method(#t27));
+  self::expect(3, let final self::Class2? #t27 = c0n in #t27 == null ?{core::int?} null : self::_extension#1|method(#t27{self::Class2}));
   self::expect(4, self::_extension#1|method(c1));
-  self::expect(46, self::_extension#1|genericMethod<core::int*>(c0, 42));
-  self::expect(47, self::_extension#1|genericMethod<core::num*>(c0, 43));
-  self::expect(92, self::_extension#1|genericMethod<core::int*>(c1, 87));
-  self::expect(93, self::_extension#1|genericMethod<core::num*>(c1, 88));
+  self::expect(46, self::_extension#1|genericMethod<core::int>(c0, 42));
+  self::expect(47, self::_extension#1|genericMethod<core::num>(c0, 43));
+  self::expect(92, self::_extension#1|genericMethod<core::int>(c1, 87));
+  self::expect(93, self::_extension#1|genericMethod<core::num>(c1, 88));
   self::expect(5, self::_extension#1|get#property(c0));
-  self::expect(5, let final self::Class2* #t28 = c0 in #t28 == null ?{core::int*} null : self::_extension#1|get#property(#t28));
-  self::expect(42, let final core::int* #t29 = 42 in let final void #t30 = self::_extension#1|set#property(c0, #t29) in #t29);
+  self::expect(5, let final self::Class2? #t28 = c0n in #t28 == null ?{core::int?} null : self::_extension#1|get#property(#t28{self::Class2}));
+  self::expect(42, let final core::int #t29 = 42 in let final void #t30 = self::_extension#1|set#property(c0, #t29) in #t29);
   self::expect(48, self::_extension#1|get#property(c0));
   self::expect(6, self::_extension#1|get#property(c1));
-  self::expect(43, let final core::int* #t31 = 43 in let final void #t32 = self::_extension#1|set#property(c1, #t31) in #t31);
+  self::expect(43, let final core::int #t31 = 43 in let final void #t32 = self::_extension#1|set#property(c1, #t31) in #t31);
   self::expect(49, self::_extension#1|get#property(c1));
-  self::expect(49, let final core::int* #t33 = self::_extension#1|get#property(c1) in let final void #t34 = self::_extension#1|set#property(c0, #t33) in #t33);
-  self::expect(55, let final core::int* #t35 = self::_extension#1|get#property(c0) in let final void #t36 = self::_extension#1|set#property(c1, #t35) in #t35);
-  self::expect(61, let final core::int* #t37 = let final core::int* #t38 = self::_extension#1|get#property(c1) in let final void #t39 = self::_extension#1|set#property(c0, #t38) in #t38 in let final void #t40 = self::_extension#1|set#property(c1, #t37) in #t37);
-  self::expect(67, let final core::int* #t41 = let final core::int* #t42 = self::_extension#1|get#property(c0) in let final void #t43 = self::_extension#1|set#property(c1, #t42) in #t42 in let final void #t44 = self::_extension#1|set#property(c0, #t41) in #t41);
+  self::expect(49, let final core::int #t33 = self::_extension#1|get#property(c1) in let final void #t34 = self::_extension#1|set#property(c0, #t33) in #t33);
+  self::expect(55, let final core::int #t35 = self::_extension#1|get#property(c0) in let final void #t36 = self::_extension#1|set#property(c1, #t35) in #t35);
+  self::expect(61, let final core::int #t37 = let final core::int #t38 = self::_extension#1|get#property(c1) in let final void #t39 = self::_extension#1|set#property(c0, #t38) in #t38 in let final void #t40 = self::_extension#1|set#property(c1, #t37) in #t37);
+  self::expect(67, let final core::int #t41 = let final core::int #t42 = self::_extension#1|get#property(c0) in let final void #t43 = self::_extension#1|set#property(c1, #t42) in #t42 in let final void #t44 = self::_extension#1|set#property(c0, #t41) in #t41);
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual)) {
     throw "Mismatch: expected=${expected}, actual=${actual}";
   }
 }
diff --git a/pkg/front_end/testcases/extensions/unnamed_extensions.dart.weak.outline.expect b/pkg/front_end/testcases/extensions/unnamed_extensions.dart.weak.outline.expect
index 7880975..fd6ebb3 100644
--- a/pkg/front_end/testcases/extensions/unnamed_extensions.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extensions/unnamed_extensions.dart.weak.outline.expect
@@ -1,40 +1,22 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Class1 extends core::Object {
-  field core::int* field;
-  constructor •(core::int* field) → self::Class1*
+  field core::int field;
+  constructor •(core::int field) → self::Class1
     ;
-  method toString() → core::String*
+  method toString() → core::String
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
 class Class2 extends core::Object {
-  field core::int* field;
-  constructor •(core::int* field) → self::Class2*
+  field core::int field;
+  constructor •(core::int field) → self::Class2
     ;
-  method toString() → core::String*
+  method toString() → core::String
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension _extension#0 on self::Class1* {
+extension _extension#0 on self::Class1 {
   method method = self::_extension#0|method;
   tearoff method = self::_extension#0|get#method;
   method genericMethod = self::_extension#0|genericMethod;
@@ -42,7 +24,7 @@
   get property = self::_extension#0|get#property;
   set property = self::_extension#0|set#property;
 }
-extension _extension#1 on self::Class2* {
+extension _extension#1 on self::Class2 {
   method method = self::_extension#1|method;
   tearoff method = self::_extension#1|get#method;
   method genericMethod = self::_extension#1|genericMethod;
@@ -50,35 +32,35 @@
   get property = self::_extension#1|get#property;
   set property = self::_extension#1|set#property;
 }
-static method _extension#0|method(lowered final self::Class1* #this) → core::int*
+static method _extension#0|method(lowered 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*>(lowered final self::Class1* #this, self::_extension#0|genericMethod::T* t) → 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>(lowered final self::Class1 #this, self::_extension#0|genericMethod::T t) → core::num
   ;
-static method _extension#0|get#genericMethod(lowered final self::Class1* #this) → <T extends core::num*>(T*) →* core::int*
-  return <T extends core::num*>(T* t) → core::int* => self::_extension#0|genericMethod<T*>(#this, t);
-static method _extension#0|get#property(lowered final self::Class1* #this) → core::int*
+static method _extension#0|get#genericMethod(lowered final self::Class1 #this) → <T extends core::num>(T) → core::num
+  return <T extends core::num>(T t) → core::num => self::_extension#0|genericMethod<T>(#this, t);
+static method _extension#0|get#property(lowered final self::Class1 #this) → core::int
   ;
-static method _extension#0|set#property(lowered 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(lowered final self::Class2* #this) → core::int*
+static method _extension#1|method(lowered 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*>(lowered final self::Class2* #this, self::_extension#1|genericMethod::T* t) → 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>(lowered final self::Class2 #this, self::_extension#1|genericMethod::T t) → core::num
   ;
-static method _extension#1|get#genericMethod(lowered final self::Class2* #this) → <T extends core::num*>(T*) →* core::int*
-  return <T extends core::num*>(T* t) → core::int* => self::_extension#1|genericMethod<T*>(#this, t);
-static method _extension#1|get#property(lowered final self::Class2* #this) → core::int*
+static method _extension#1|get#genericMethod(lowered final self::Class2 #this) → <T extends core::num>(T) → core::num
+  return <T extends core::num>(T t) → core::num => self::_extension#1|genericMethod<T>(#this, t);
+static method _extension#1|get#property(lowered final self::Class2 #this) → core::int
   ;
-static method _extension#1|set#property(lowered 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
   ;
-static method testExtension1() → dynamic
+static method testExtension1(self::Class1 c0, self::Class1 c1, self::Class1? c0n, self::Class1? c1n) → dynamic
   ;
-static method testExtension2() → dynamic
+static method testExtension2(self::Class2 c0, self::Class2 c1, self::Class2? c0n) → dynamic
   ;
 static method expect(dynamic expected, dynamic actual) → dynamic
   ;
diff --git a/pkg/front_end/testcases/extensions/unnamed_extensions.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/unnamed_extensions.dart.weak.transformed.expect
index f3b4c97..82dee77 100644
--- a/pkg/front_end/testcases/extensions/unnamed_extensions.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/unnamed_extensions.dart.weak.transformed.expect
@@ -1,42 +1,24 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class Class1 extends core::Object {
-  field core::int* field;
-  constructor •(core::int* field) → self::Class1*
+  field core::int field;
+  constructor •(core::int field) → self::Class1
     : self::Class1::field = field, super core::Object::•()
     ;
-  method toString() → core::String*
-    return "Class1(${this.{self::Class1::field}{core::int*}})";
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method toString() → core::String
+    return "Class1(${this.{self::Class1::field}{core::int}})";
 }
 class Class2 extends core::Object {
-  field core::int* field;
-  constructor •(core::int* field) → self::Class2*
+  field core::int field;
+  constructor •(core::int field) → self::Class2
     : self::Class2::field = field, super core::Object::•()
     ;
-  method toString() → core::String*
-    return "Class2(${this.{self::Class2::field}{core::int*}})";
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
+  method toString() → core::String
+    return "Class2(${this.{self::Class2::field}{core::int}})";
 }
-extension _extension#0 on self::Class1* {
+extension _extension#0 on self::Class1 {
   method method = self::_extension#0|method;
   tearoff method = self::_extension#0|get#method;
   method genericMethod = self::_extension#0|genericMethod;
@@ -44,7 +26,7 @@
   get property = self::_extension#0|get#property;
   set property = self::_extension#0|set#property;
 }
-extension _extension#1 on self::Class2* {
+extension _extension#1 on self::Class2 {
   method method = self::_extension#1|method;
   tearoff method = self::_extension#1|get#method;
   method genericMethod = self::_extension#1|genericMethod;
@@ -52,116 +34,116 @@
   get property = self::_extension#1|get#property;
   set property = self::_extension#1|set#property;
 }
-static method _extension#0|method(lowered 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}{core::int*};
+  return #this.{self::Class1::field}{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*>(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::int*}.{core::num::+}(t){(core::num*) →* core::num*} as{TypeError} 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>(lowered final self::Class1 #this, self::_extension#0|genericMethod::T t) → core::num {
+  core::print("Extension1.genericMethod<${self::_extension#0|genericMethod::T}>(${t}) on ${#this}");
+  return #this.{self::Class1::field}{core::int}.{core::num::+}(t){(core::num) → core::num};
 }
-static method _extension#0|get#genericMethod(lowered final self::Class1* #this) → <T extends core::num*>(T*) →* core::int*
-  return <T extends core::num*>(T* t) → core::int* => self::_extension#0|genericMethod<T*>(#this, t);
-static method _extension#0|get#property(lowered final self::Class1* #this) → core::int* {
+static method _extension#0|get#genericMethod(lowered final self::Class1 #this) → <T extends core::num>(T) → core::num
+  return <T extends core::num>(T t) → core::num => self::_extension#0|genericMethod<T>(#this, t);
+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}{core::int*};
+  return #this.{self::Class1::field}{core::int};
 }
-static method _extension#0|set#property(lowered 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){(core::num*) →* core::int*};
+  value = value.{core::num::+}(1){(core::num) → core::int};
 }
-static method _extension#1|method(lowered 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::int*}.{core::num::+}(3){(core::num*) →* core::int*};
+  return #this.{self::Class2::field}{core::int}.{core::num::+}(3){(core::num) → 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*>(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::int*}.{core::num::+}(t){(core::num*) →* core::num*}.{core::num::+}(4){(core::num*) →* core::num*} as{TypeError} 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>(lowered final self::Class2 #this, self::_extension#1|genericMethod::T t) → core::num {
+  core::print("Extension2.genericMethod<${self::_extension#1|genericMethod::T}>(${t}) on ${#this}");
+  return #this.{self::Class2::field}{core::int}.{core::num::+}(t){(core::num) → core::num}.{core::num::+}(4){(core::num) → core::num};
 }
-static method _extension#1|get#genericMethod(lowered final self::Class2* #this) → <T extends core::num*>(T*) →* core::int*
-  return <T extends core::num*>(T* t) → core::int* => self::_extension#1|genericMethod<T*>(#this, t);
-static method _extension#1|get#property(lowered final self::Class2* #this) → core::int* {
+static method _extension#1|get#genericMethod(lowered final self::Class2 #this) → <T extends core::num>(T) → core::num
+  return <T extends core::num>(T t) → core::num => self::_extension#1|genericMethod<T>(#this, t);
+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::int*}.{core::num::+}(5){(core::num*) →* core::int*};
+  return #this.{self::Class2::field}{core::int}.{core::num::+}(5){(core::num) → core::int};
 }
-static method _extension#1|set#property(lowered 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){(core::num*) →* core::int*};
+  value = value.{core::num::+}(1){(core::num) → core::int};
   #this.{self::Class2::field} = value;
 }
 static method main() → dynamic {
-  self::testExtension1();
-  self::testExtension2();
+  self::Class1 c10 = new self::Class1::•(0);
+  self::Class1 c11 = new self::Class1::•(1);
+  self::testExtension1(c10, c11, c10, c11);
+  self::Class2 c20 = new self::Class2::•(0);
+  self::Class2 c21 = new self::Class2::•(1);
+  self::testExtension2(c20, c21, c20);
 }
-static method testExtension1() → dynamic {
-  self::Class1* c0 = new self::Class1::•(0);
-  self::Class1* c1 = new self::Class1::•(1);
+static method testExtension1(self::Class1 c0, self::Class1 c1, self::Class1? c0n, self::Class1? c1n) → dynamic {
   self::expect(0, self::_extension#0|method(c0));
   self::expect(1, self::_extension#0|method(c1));
-  self::expect(1, let final self::Class1* #t1 = c1 in #t1 == null ?{core::int*} null : self::_extension#0|method(#t1));
-  self::expect(42, self::_extension#0|genericMethod<core::int*>(c0, 42));
-  self::expect(43, self::_extension#0|genericMethod<core::num*>(c0, 43));
-  self::expect(88, self::_extension#0|genericMethod<core::int*>(c1, 87));
-  self::expect(89, self::_extension#0|genericMethod<core::num*>(c1, 88));
+  self::expect(1, let final self::Class1? #t1 = c1n in #t1 == null ?{core::int?} null : self::_extension#0|method(#t1{self::Class1}));
+  self::expect(42, self::_extension#0|genericMethod<core::int>(c0, 42));
+  self::expect(43, self::_extension#0|genericMethod<core::num>(c0, 43));
+  self::expect(88, self::_extension#0|genericMethod<core::int>(c1, 87));
+  self::expect(89, self::_extension#0|genericMethod<core::num>(c1, 88));
   self::expect(0, self::_extension#0|get#property(c0));
-  self::expect(0, let final self::Class1* #t2 = c0 in #t2 == null ?{core::int*} null : self::_extension#0|get#property(#t2));
-  self::expect(42, let final core::int* #t3 = 42 in let final void #t4 = self::_extension#0|set#property(c0, #t3) in #t3);
+  self::expect(0, let final self::Class1? #t2 = c0n in #t2 == null ?{core::int?} null : self::_extension#0|get#property(#t2{self::Class1}));
+  self::expect(42, let final core::int #t3 = 42 in let final void #t4 = self::_extension#0|set#property(c0, #t3) in #t3);
   self::expect(1, self::_extension#0|get#property(c1));
-  self::expect(87, let final core::int* #t5 = 87 in let final void #t6 = self::_extension#0|set#property(c0, #t5) in #t5);
-  self::expect(27, let final core::int* #t7 = let final core::int* #t8 = 27 in let final void #t9 = self::_extension#0|set#property(c1, #t8) in #t8 in let final void #t10 = self::_extension#0|set#property(c0, #t7) in #t7);
-  self::expect(37, let final core::int* #t11 = let final core::int* #t12 = 37 in let final void #t13 = self::_extension#0|set#property(c0, #t12) in #t12 in let final void #t14 = self::_extension#0|set#property(c1, #t11) in #t11);
-  self::expect(77, let final core::int* #t15 = let final core::int* #t16 = let final core::int* #t17 = 77 in let final void #t18 = self::_extension#0|set#property(c1, #t17) in #t17 in let final void #t19 = self::_extension#0|set#property(c0, #t16) in #t16 in let final void #t20 = self::_extension#0|set#property(c1, #t15) in #t15);
-  self::expect(67, let final core::int* #t21 = let final core::int* #t22 = let final core::int* #t23 = 67 in let final void #t24 = self::_extension#0|set#property(c0, #t23) in #t23 in let final void #t25 = self::_extension#0|set#property(c1, #t22) in #t22 in let final void #t26 = self::_extension#0|set#property(c0, #t21) in #t21);
+  self::expect(87, let final core::int #t5 = 87 in let final void #t6 = self::_extension#0|set#property(c0, #t5) in #t5);
+  self::expect(27, let final core::int #t7 = let final core::int #t8 = 27 in let final void #t9 = self::_extension#0|set#property(c1, #t8) in #t8 in let final void #t10 = self::_extension#0|set#property(c0, #t7) in #t7);
+  self::expect(37, let final core::int #t11 = let final core::int #t12 = 37 in let final void #t13 = self::_extension#0|set#property(c0, #t12) in #t12 in let final void #t14 = self::_extension#0|set#property(c1, #t11) in #t11);
+  self::expect(77, let final core::int #t15 = let final core::int #t16 = let final core::int #t17 = 77 in let final void #t18 = self::_extension#0|set#property(c1, #t17) in #t17 in let final void #t19 = self::_extension#0|set#property(c0, #t16) in #t16 in let final void #t20 = self::_extension#0|set#property(c1, #t15) in #t15);
+  self::expect(67, let final core::int #t21 = let final core::int #t22 = let final core::int #t23 = 67 in let final void #t24 = self::_extension#0|set#property(c0, #t23) in #t23 in let final void #t25 = self::_extension#0|set#property(c1, #t22) in #t22 in let final void #t26 = self::_extension#0|set#property(c0, #t21) in #t21);
 }
-static method testExtension2() → dynamic {
-  self::Class2* c0 = new self::Class2::•(0);
-  self::Class2* c1 = new self::Class2::•(1);
+static method testExtension2(self::Class2 c0, self::Class2 c1, self::Class2? c0n) → dynamic {
   self::expect(3, self::_extension#1|method(c0));
-  self::expect(3, let final self::Class2* #t27 = c0 in #t27 == null ?{core::int*} null : self::_extension#1|method(#t27));
+  self::expect(3, let final self::Class2? #t27 = c0n in #t27 == null ?{core::int?} null : self::_extension#1|method(#t27{self::Class2}));
   self::expect(4, self::_extension#1|method(c1));
-  self::expect(46, self::_extension#1|genericMethod<core::int*>(c0, 42));
-  self::expect(47, self::_extension#1|genericMethod<core::num*>(c0, 43));
-  self::expect(92, self::_extension#1|genericMethod<core::int*>(c1, 87));
-  self::expect(93, self::_extension#1|genericMethod<core::num*>(c1, 88));
+  self::expect(46, self::_extension#1|genericMethod<core::int>(c0, 42));
+  self::expect(47, self::_extension#1|genericMethod<core::num>(c0, 43));
+  self::expect(92, self::_extension#1|genericMethod<core::int>(c1, 87));
+  self::expect(93, self::_extension#1|genericMethod<core::num>(c1, 88));
   self::expect(5, self::_extension#1|get#property(c0));
-  self::expect(5, let final self::Class2* #t28 = c0 in #t28 == null ?{core::int*} null : self::_extension#1|get#property(#t28));
-  self::expect(42, let final core::int* #t29 = 42 in let final void #t30 = self::_extension#1|set#property(c0, #t29) in #t29);
+  self::expect(5, let final self::Class2? #t28 = c0n in #t28 == null ?{core::int?} null : self::_extension#1|get#property(#t28{self::Class2}));
+  self::expect(42, let final core::int #t29 = 42 in let final void #t30 = self::_extension#1|set#property(c0, #t29) in #t29);
   self::expect(48, self::_extension#1|get#property(c0));
   self::expect(6, self::_extension#1|get#property(c1));
-  self::expect(43, let final core::int* #t31 = 43 in let final void #t32 = self::_extension#1|set#property(c1, #t31) in #t31);
+  self::expect(43, let final core::int #t31 = 43 in let final void #t32 = self::_extension#1|set#property(c1, #t31) in #t31);
   self::expect(49, self::_extension#1|get#property(c1));
-  self::expect(49, let final core::int* #t33 = self::_extension#1|get#property(c1) in let final void #t34 = self::_extension#1|set#property(c0, #t33) in #t33);
-  self::expect(55, let final core::int* #t35 = self::_extension#1|get#property(c0) in let final void #t36 = self::_extension#1|set#property(c1, #t35) in #t35);
-  self::expect(61, let final core::int* #t37 = let final core::int* #t38 = self::_extension#1|get#property(c1) in let final void #t39 = self::_extension#1|set#property(c0, #t38) in #t38 in let final void #t40 = self::_extension#1|set#property(c1, #t37) in #t37);
-  self::expect(67, let final core::int* #t41 = let final core::int* #t42 = self::_extension#1|get#property(c0) in let final void #t43 = self::_extension#1|set#property(c1, #t42) in #t42 in let final void #t44 = self::_extension#1|set#property(c0, #t41) in #t41);
+  self::expect(49, let final core::int #t33 = self::_extension#1|get#property(c1) in let final void #t34 = self::_extension#1|set#property(c0, #t33) in #t33);
+  self::expect(55, let final core::int #t35 = self::_extension#1|get#property(c0) in let final void #t36 = self::_extension#1|set#property(c1, #t35) in #t35);
+  self::expect(61, let final core::int #t37 = let final core::int #t38 = self::_extension#1|get#property(c1) in let final void #t39 = self::_extension#1|set#property(c0, #t38) in #t38 in let final void #t40 = self::_extension#1|set#property(c1, #t37) in #t37);
+  self::expect(67, let final core::int #t41 = let final core::int #t42 = self::_extension#1|get#property(c0) in let final void #t43 = self::_extension#1|set#property(c1, #t42) in #t42 in let final void #t44 = self::_extension#1|set#property(c0, #t41) in #t41);
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
-  if(!(expected =={core::Object::==}{(core::Object*) →* core::bool*} actual)) {
+  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual)) {
     throw "Mismatch: expected=${expected}, actual=${actual}";
   }
 }
 
 
 Extra constant evaluation status:
-Evaluated: VariableGet @ org-dartlang-testcase:///unnamed_extensions.dart:79:28 -> IntConstant(42)
-Evaluated: VariableGet @ org-dartlang-testcase:///unnamed_extensions.dart:79:28 -> IntConstant(42)
-Evaluated: VariableGet @ org-dartlang-testcase:///unnamed_extensions.dart:81:28 -> IntConstant(87)
-Evaluated: VariableGet @ org-dartlang-testcase:///unnamed_extensions.dart:81:28 -> IntConstant(87)
-Evaluated: VariableGet @ org-dartlang-testcase:///unnamed_extensions.dart:82:42 -> IntConstant(27)
-Evaluated: VariableGet @ org-dartlang-testcase:///unnamed_extensions.dart:82:42 -> IntConstant(27)
-Evaluated: VariableGet @ org-dartlang-testcase:///unnamed_extensions.dart:83:42 -> IntConstant(37)
-Evaluated: VariableGet @ org-dartlang-testcase:///unnamed_extensions.dart:83:42 -> IntConstant(37)
-Evaluated: VariableGet @ org-dartlang-testcase:///unnamed_extensions.dart:84:56 -> IntConstant(77)
-Evaluated: VariableGet @ org-dartlang-testcase:///unnamed_extensions.dart:84:56 -> IntConstant(77)
-Evaluated: VariableGet @ org-dartlang-testcase:///unnamed_extensions.dart:85:56 -> IntConstant(67)
-Evaluated: VariableGet @ org-dartlang-testcase:///unnamed_extensions.dart:85:56 -> IntConstant(67)
+Evaluated: VariableGet @ org-dartlang-testcase:///unnamed_extensions.dart:81:28 -> IntConstant(42)
+Evaluated: VariableGet @ org-dartlang-testcase:///unnamed_extensions.dart:81:28 -> IntConstant(42)
+Evaluated: VariableGet @ org-dartlang-testcase:///unnamed_extensions.dart:83:28 -> IntConstant(87)
+Evaluated: VariableGet @ org-dartlang-testcase:///unnamed_extensions.dart:83:28 -> IntConstant(87)
+Evaluated: VariableGet @ org-dartlang-testcase:///unnamed_extensions.dart:84:42 -> IntConstant(27)
+Evaluated: VariableGet @ org-dartlang-testcase:///unnamed_extensions.dart:84:42 -> IntConstant(27)
+Evaluated: VariableGet @ org-dartlang-testcase:///unnamed_extensions.dart:85:42 -> IntConstant(37)
+Evaluated: VariableGet @ org-dartlang-testcase:///unnamed_extensions.dart:85:42 -> IntConstant(37)
+Evaluated: VariableGet @ org-dartlang-testcase:///unnamed_extensions.dart:86:56 -> IntConstant(77)
+Evaluated: VariableGet @ org-dartlang-testcase:///unnamed_extensions.dart:86:56 -> IntConstant(77)
+Evaluated: VariableGet @ org-dartlang-testcase:///unnamed_extensions.dart:87:56 -> IntConstant(67)
+Evaluated: VariableGet @ org-dartlang-testcase:///unnamed_extensions.dart:87:56 -> IntConstant(67)
 Evaluated: VariableGet @ org-dartlang-testcase:///unnamed_extensions.dart:100:28 -> IntConstant(42)
 Evaluated: VariableGet @ org-dartlang-testcase:///unnamed_extensions.dart:100:28 -> IntConstant(42)
 Evaluated: VariableGet @ org-dartlang-testcase:///unnamed_extensions.dart:103:28 -> IntConstant(43)
 Evaluated: VariableGet @ org-dartlang-testcase:///unnamed_extensions.dart:103:28 -> IntConstant(43)
-Extra constant evaluation: evaluated: 325, effectively constant: 16
+Extra constant evaluation: evaluated: 330, effectively constant: 16
diff --git a/pkg/front_end/testcases/extensions/use_this.dart b/pkg/front_end/testcases/extensions/use_this.dart
index 8a23cb9..89105d8 100644
--- a/pkg/front_end/testcases/extensions/use_this.dart
+++ b/pkg/front_end/testcases/extensions/use_this.dart
@@ -2,8 +2,6 @@
 // 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.
 
-// @dart=2.9
-
 class A1 {}
 
 extension A2 on A1 {
diff --git a/pkg/front_end/testcases/extensions/use_this.dart.textual_outline.expect b/pkg/front_end/testcases/extensions/use_this.dart.textual_outline.expect
index 9cf7a3b..f12590a 100644
--- a/pkg/front_end/testcases/extensions/use_this.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/extensions/use_this.dart.textual_outline.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A1 {}
 
 extension A2 on A1 {
diff --git a/pkg/front_end/testcases/extensions/use_this.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/extensions/use_this.dart.textual_outline_modelled.expect
index d1ae3f2..f79fb58 100644
--- a/pkg/front_end/testcases/extensions/use_this.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/extensions/use_this.dart.textual_outline_modelled.expect
@@ -1,4 +1,3 @@
-// @dart = 2.9
 class A1 {}
 
 class B1<T> {}
diff --git a/pkg/front_end/testcases/extensions/use_this.dart.weak.expect b/pkg/front_end/testcases/extensions/use_this.dart.weak.expect
index f7ce7a4..b415f82 100644
--- a/pkg/front_end/testcases/extensions/use_this.dart.weak.expect
+++ b/pkg/front_end/testcases/extensions/use_this.dart.weak.expect
@@ -1,69 +1,49 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A1 extends core::Object {
-  synthetic constructor •() → self::A1*
+  synthetic constructor •() → self::A1
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B1<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B1<self::B1::T*>*
+class B1<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B1<self::B1::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension A2 on self::A1* {
+extension A2 on self::A1 {
   method method1 = self::A2|method1;
   tearoff method1 = self::A2|get#method1;
   method method2 = self::A2|method2;
   tearoff method2 = self::A2|get#method2;
 }
-extension B2<T extends core::Object* = dynamic> on self::B1<T*>* {
+extension B2<T extends core::Object? = dynamic> on self::B1<T%> {
   method method1 = self::B2|method1;
   tearoff method1 = self::B2|get#method1;
   method method2 = self::B2|method2;
   tearoff method2 = self::B2|get#method2;
 }
-static method A2|method1(lowered final self::A1* #this) → self::A1* {
+static method A2|method1(lowered final self::A1 #this) → self::A1 {
   return #this;
 }
-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>(lowered final self::A1* #this, self::A2|method2::T* o) → 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>(lowered final self::A1 #this, self::A2|method2::T% o) → self::A1 {
   core::print(o);
   return #this;
 }
-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>(lowered final self::B1<self::B2|method1::T*>* #this) → self::B1<self::B2|method1::T*>* {
+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>(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>(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>(lowered final self::B1<self::B2|method2::T*>* #this, self::B2|method2::S* o) → self::B1<self::B2|method2::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>(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>(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 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.weak.modular.expect b/pkg/front_end/testcases/extensions/use_this.dart.weak.modular.expect
index f7ce7a4..b415f82 100644
--- a/pkg/front_end/testcases/extensions/use_this.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/extensions/use_this.dart.weak.modular.expect
@@ -1,69 +1,49 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A1 extends core::Object {
-  synthetic constructor •() → self::A1*
+  synthetic constructor •() → self::A1
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B1<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B1<self::B1::T*>*
+class B1<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B1<self::B1::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension A2 on self::A1* {
+extension A2 on self::A1 {
   method method1 = self::A2|method1;
   tearoff method1 = self::A2|get#method1;
   method method2 = self::A2|method2;
   tearoff method2 = self::A2|get#method2;
 }
-extension B2<T extends core::Object* = dynamic> on self::B1<T*>* {
+extension B2<T extends core::Object? = dynamic> on self::B1<T%> {
   method method1 = self::B2|method1;
   tearoff method1 = self::B2|get#method1;
   method method2 = self::B2|method2;
   tearoff method2 = self::B2|get#method2;
 }
-static method A2|method1(lowered final self::A1* #this) → self::A1* {
+static method A2|method1(lowered final self::A1 #this) → self::A1 {
   return #this;
 }
-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>(lowered final self::A1* #this, self::A2|method2::T* o) → 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>(lowered final self::A1 #this, self::A2|method2::T% o) → self::A1 {
   core::print(o);
   return #this;
 }
-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>(lowered final self::B1<self::B2|method1::T*>* #this) → self::B1<self::B2|method1::T*>* {
+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>(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>(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>(lowered final self::B1<self::B2|method2::T*>* #this, self::B2|method2::S* o) → self::B1<self::B2|method2::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>(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>(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 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.weak.outline.expect b/pkg/front_end/testcases/extensions/use_this.dart.weak.outline.expect
index f40c736..07b6cee 100644
--- a/pkg/front_end/testcases/extensions/use_this.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extensions/use_this.dart.weak.outline.expect
@@ -1,62 +1,42 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A1 extends core::Object {
-  synthetic constructor •() → self::A1*
+  synthetic constructor •() → self::A1
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B1<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B1<self::B1::T*>*
+class B1<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B1<self::B1::T%>
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension A2 on self::A1* {
+extension A2 on self::A1 {
   method method1 = self::A2|method1;
   tearoff method1 = self::A2|get#method1;
   method method2 = self::A2|method2;
   tearoff method2 = self::A2|get#method2;
 }
-extension B2<T extends core::Object* = dynamic> on self::B1<T*>* {
+extension B2<T extends core::Object? = dynamic> on self::B1<T%> {
   method method1 = self::B2|method1;
   tearoff method1 = self::B2|get#method1;
   method method2 = self::B2|method2;
   tearoff method2 = self::B2|get#method2;
 }
-static method A2|method1(lowered final self::A1* #this) → self::A1*
+static method A2|method1(lowered 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>(lowered final self::A1* #this, self::A2|method2::T* o) → 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>(lowered final self::A1 #this, self::A2|method2::T% o) → 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>(lowered final self::B1<self::B2|method1::T*>* #this) → self::B1<self::B2|method1::T*>*
+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>(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>(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>(lowered final self::B1<self::B2|method2::T*>* #this, self::B2|method2::S* o) → self::B1<self::B2|method2::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>(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>(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 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.weak.transformed.expect b/pkg/front_end/testcases/extensions/use_this.dart.weak.transformed.expect
index f7ce7a4..b415f82 100644
--- a/pkg/front_end/testcases/extensions/use_this.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extensions/use_this.dart.weak.transformed.expect
@@ -1,69 +1,49 @@
-library;
+library /*isNonNullableByDefault*/;
 import self as self;
 import "dart:core" as core;
 
 class A1 extends core::Object {
-  synthetic constructor •() → self::A1*
+  synthetic constructor •() → self::A1
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-class B1<T extends core::Object* = dynamic> extends core::Object {
-  synthetic constructor •() → self::B1<self::B1::T*>*
+class B1<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::B1<self::B1::T%>
     : super core::Object::•()
     ;
-  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
-  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
-  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
-  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
-  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
-  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
-  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
-  abstract member-signature method toString() → core::String*; -> core::Object::toString
-  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
-  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
 }
-extension A2 on self::A1* {
+extension A2 on self::A1 {
   method method1 = self::A2|method1;
   tearoff method1 = self::A2|get#method1;
   method method2 = self::A2|method2;
   tearoff method2 = self::A2|get#method2;
 }
-extension B2<T extends core::Object* = dynamic> on self::B1<T*>* {
+extension B2<T extends core::Object? = dynamic> on self::B1<T%> {
   method method1 = self::B2|method1;
   tearoff method1 = self::B2|get#method1;
   method method2 = self::B2|method2;
   tearoff method2 = self::B2|get#method2;
 }
-static method A2|method1(lowered final self::A1* #this) → self::A1* {
+static method A2|method1(lowered final self::A1 #this) → self::A1 {
   return #this;
 }
-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>(lowered final self::A1* #this, self::A2|method2::T* o) → 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>(lowered final self::A1 #this, self::A2|method2::T% o) → self::A1 {
   core::print(o);
   return #this;
 }
-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>(lowered final self::B1<self::B2|method1::T*>* #this) → self::B1<self::B2|method1::T*>* {
+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>(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>(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>(lowered final self::B1<self::B2|method2::T*>* #this, self::B2|method2::S* o) → self::B1<self::B2|method2::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>(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>(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 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/strong.status b/pkg/front_end/testcases/strong.status
index 4d3af5e..cf5467d 100644
--- a/pkg/front_end/testcases/strong.status
+++ b/pkg/front_end/testcases/strong.status
@@ -13,6 +13,27 @@
 dart2js/late_statics: SemiFuzzFailure
 static_field_lowering/opt_in: SemiFuzzFailure
 
+const_functions/const_functions_list: SemiFuzzCrash
+generic_metadata/typedef_generic_types_in_arguments_and_bounds: SemiFuzzCrash
+
+# These tests have "privacy issues" and isn't compatiable with splitting files (fuzzing):
+constructor_tearoffs/lowering/typedef_from: semiFuzzFailureOnForceRebuildBodies # parts not supported
+dart2js/mixin_default_values/main: semiFuzzFailureOnForceRebuildBodies # private method
+dartdevc/factory_patch/main: semiFuzzFailureOnForceRebuildBodies # needs custom libraries.json (and platform?) not setup here
+dartdevc/private_covariant: semiFuzzFailureOnForceRebuildBodies # private method in class
+late_lowering/injected_late_field_checks/main: semiFuzzFailureOnForceRebuildBodies # needs custom libraries.json (and platform?) not setup here
+late_lowering/issue41436/issue41436: semiFuzzFailureOnForceRebuildBodies # needs custom libraries.json (and platform?) not setup here
+late_lowering/issue41922: semiFuzzFailureOnForceRebuildBodies # private field
+late_lowering/private_members: semiFuzzFailureOnForceRebuildBodies # parts not supported
+macros/inject_constructor: semiFuzzFailureOnForceRebuildBodies # Macro injection --- think it might introduce a class in a file?
+nnbd/injected_late_field_checks/main: semiFuzzFailureOnForceRebuildBodies # needs custom libraries.json (and platform?) not setup here
+nnbd/issue42504: semiFuzzFailureOnForceRebuildBodies # private class
+nnbd/issue43918: semiFuzzFailureOnForceRebuildBodies # private class
+nnbd/issue44595: semiFuzzFailureOnForceRebuildBodies # unnamed extension
+nnbd/nullable_extension: semiFuzzFailureOnForceRebuildBodies # unnamed extension
+nnbd/nullable_setter: semiFuzzFailureOnForceRebuildBodies # unnamed extension
+none/mixin_super: semiFuzzFailureOnForceRebuildBodies # has private name mixin
+
 constructor_tearoffs/call_instantiation: TypeCheckError
 constructor_tearoffs/lowering/invalid_redirect: VerificationError
 enhanced_enums/declared_hashcode: TypeCheckError
diff --git a/pkg/front_end/testcases/weak.status b/pkg/front_end/testcases/weak.status
index e28929c..def324c 100644
--- a/pkg/front_end/testcases/weak.status
+++ b/pkg/front_end/testcases/weak.status
@@ -4,6 +4,12 @@
 
 # Status file for the weak_suite.dart test suite.
 
+const_functions/const_functions_list: SemiFuzzCrash
+generic_metadata/typedef_generic_types_in_arguments_and_bounds: SemiFuzzCrash
+nnbd_mixed/mixed_mixin: SemiFuzzFailure
+no_such_method_forwarders/abstract_override_abstract_different_type: SemiFuzzFailure
+no_such_method_forwarders/abstract_override_with_different_signature: SemiFuzzFailure
+
 dart2js/flutter_issue94561/main: SemiFuzzFailure
 dart2js/flutter_issue94561/main.no_link: SemiFuzzFailure
 dart2js/late_fields: SemiFuzzFailure
@@ -21,6 +27,55 @@
 regress/utf_16_le_content.crash: SemiFuzzCrash
 static_field_lowering/opt_in: SemiFuzzFailure
 
+# These tests have "privacy issues" and isn't compatiable with splitting files (fuzzing):
+constructor_tearoffs/lowering/typedef_from: semiFuzzFailureOnForceRebuildBodies # parts not supported
+dart2js/mixin_default_values/main: semiFuzzFailureOnForceRebuildBodies # private method
+dartdevc/factory_patch/main: semiFuzzFailureOnForceRebuildBodies # needs custom libraries.json (and platform?) not setup here
+dartdevc/private_covariant: semiFuzzFailureOnForceRebuildBodies # private method in class
+extensions/internal_resolution: semiFuzzFailureOnForceRebuildBodies # unnamed extensions
+extensions/issue40816: semiFuzzFailureOnForceRebuildBodies # unnamed extension
+extensions/on_function_type: semiFuzzFailureOnForceRebuildBodies # unnamed extension
+extensions/unnamed_extensions: semiFuzzFailureOnForceRebuildBodies # unnamed extension
+general/bug33099: semiFuzzFailureOnForceRebuildBodies # private class
+general/closure: semiFuzzFailureOnForceRebuildBodies # private field
+general/constants/rudimentary_test_01: semiFuzzFailureOnForceRebuildBodies # private method
+general/constants/with_unevaluated_agnostic/rudimentary_test_01: semiFuzzFailureOnForceRebuildBodies # private method
+general/constructor_const_inference: semiFuzzFailureOnForceRebuildBodies # private class
+general/constructor_patch/main: semiFuzzFailureOnForceRebuildBodies # needs custom libraries.json (and platform?) not setup here
+general/issue31767: semiFuzzFailureOnForceRebuildBodies # private class, field
+general/issue45101/main: semiFuzzFailureOnForceRebuildBodies # needs custom libraries.json (and platform?) not setup here
+general/issue47036: semiFuzzFailureOnForceRebuildBodies # private class
+general/issue48548: semiFuzzFailureOnForceRebuildBodies # private field
+general/nested_lib_spec/main: semiFuzzFailureOnForceRebuildBodies # needs custom libraries.json (and platform?) not setup here
+general/part_as_entry_point: semiFuzzFailureOnForceRebuildBodies # parts not supported
+general/private_members: semiFuzzFailureOnForceRebuildBodies # parts not supported
+general/private_method_tearoff: semiFuzzFailureOnForceRebuildBodies # private method in class
+general/redirecting_factory_const_inference: semiFuzzFailureOnForceRebuildBodies # private class
+general/redirecting_factory_invocation_metadata: semiFuzzFailureOnForceRebuildBodies # parts not supported
+general/store_load: semiFuzzFailureOnForceRebuildBodies # private field in class
+general/top_level_accessors: semiFuzzFailureOnForceRebuildBodies # parts not supported
+general/typedef: semiFuzzFailureOnForceRebuildBodies # private typedef
+inference/downwards_inference_on_list_literals_infer_if_value_types_match_context: semiFuzzFailureOnForceRebuildBodies # private field
+late_lowering/injected_late_field_checks/main: semiFuzzFailureOnForceRebuildBodies # needs custom libraries.json (and platform?) not setup here
+
+late_lowering/issue41436/issue41436: semiFuzzFailureOnForceRebuildBodies # needs custom libraries.json (and platform?) not setup here
+late_lowering/issue41922: semiFuzzFailureOnForceRebuildBodies # private field
+late_lowering/private_members: semiFuzzFailureOnForceRebuildBodies # parts not supported
+macros/inject_constructor: semiFuzzFailureOnForceRebuildBodies # Macro injection --- think it might introduce a class in a file?
+nnbd_mixed/issue46518: semiFuzzFailureOnForceRebuildBodies # private method
+nnbd_mixed/no_null_shorting_explicit_extension: semiFuzzFailureOnForceRebuildBodies # private field in class
+nnbd_mixed/no_null_shorting_extension: semiFuzzFailureOnForceRebuildBodies # private field in class
+nnbd_mixed/nullable_extension_on_opt_out: semiFuzzFailureOnForceRebuildBodies # unnamed extension
+nnbd_mixed/object_bound_redirecting_factory/main: semiFuzzFailureOnForceRebuildBodies # private constructor
+nnbd/injected_late_field_checks/main: semiFuzzFailureOnForceRebuildBodies # needs custom libraries.json (and platform?) not setup here
+nnbd/issue42504: semiFuzzFailureOnForceRebuildBodies # private class
+nnbd/issue43918: semiFuzzFailureOnForceRebuildBodies # private class
+nnbd/issue44595: semiFuzzFailureOnForceRebuildBodies # unnamed extension
+nnbd/nullable_extension: semiFuzzFailureOnForceRebuildBodies # unnamed extension
+nnbd/nullable_setter: semiFuzzFailureOnForceRebuildBodies # unnamed extension
+none/mixin_super: semiFuzzFailureOnForceRebuildBodies # has private name mixin
+regress/issue_39682: semiFuzzFailureOnForceRebuildBodies # has private method
+
 constructor_tearoffs/call_instantiation: TypeCheckError
 constructor_tearoffs/lowering/invalid_redirect: VerificationError
 enhanced_enums/declared_hashcode: TypeCheckError
diff --git a/tools/VERSION b/tools/VERSION
index 2441773..d7ac1d5 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 18
 PATCH 0
-PRERELEASE 0
+PRERELEASE 1
 PRERELEASE_PATCH 0
\ No newline at end of file