Version 2.14.0-368.0.dev

Merge commit 'b05892efa124ed8325b2537e16aefb1c0e8a396b' into 'dev'
diff --git a/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart b/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
index 5be60d4..2ccb299 100644
--- a/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
@@ -1328,6 +1328,25 @@
         r"""Extension operations can't be used in constant expressions.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Null> codeConstEvalExternalConstructor =
+    messageConstEvalExternalConstructor;
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const MessageCode messageConstEvalExternalConstructor = const MessageCode(
+    "ConstEvalExternalConstructor",
+    message:
+        r"""External constructors can't be evaluated in constant expressions.""");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Null> codeConstEvalExternalFactory = messageConstEvalExternalFactory;
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const MessageCode messageConstEvalExternalFactory = const MessageCode(
+    "ConstEvalExternalFactory",
+    message:
+        r"""External factory constructors can't be evaluated in constant expressions.""");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeConstEvalFailedAssertion = messageConstEvalFailedAssertion;
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
diff --git a/pkg/front_end/lib/src/compute_platform_binaries_location.dart b/pkg/front_end/lib/src/compute_platform_binaries_location.dart
index 0ecacc07..96039c4 100644
--- a/pkg/front_end/lib/src/compute_platform_binaries_location.dart
+++ b/pkg/front_end/lib/src/compute_platform_binaries_location.dart
@@ -23,9 +23,17 @@
     case 'dartdevc':
       switch (nnbdMode) {
         case NnbdMode.Strong:
-          return 'ddc_platform_sound.dill';
+          // DDC is always compiled against the outline so we use it here by
+          // default.
+          return 'ddc_outline_sound.dill';
+        //TODO(johnniwinther): Support using the full dill.
+        //return 'ddc_platform_sound.dill';
         case NnbdMode.Weak:
-          return 'ddc_platform.dill';
+          // DDC is always compiled against the outline so we use it here by
+          // default.
+          return 'ddc_outline.dill';
+        //TODO(johnniwinther): Support using the full dill.
+        //return 'ddc_platform.dill';
         case NnbdMode.Agnostic:
           break;
       }
diff --git a/pkg/front_end/lib/src/fasta/builder/constructor_builder.dart b/pkg/front_end/lib/src/fasta/builder/constructor_builder.dart
index 98068cb..4d0f32a 100644
--- a/pkg/front_end/lib/src/fasta/builder/constructor_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/constructor_builder.dart
@@ -247,12 +247,19 @@
     }
   }
 
+  bool _hasBuiltOutlines = false;
+
   @override
   void buildOutlineExpressions(
       SourceLibraryBuilder library,
       CoreTypes coreTypes,
       List<DelayedActionPerformer> delayedActionPerformers,
       List<SynthesizedFunctionNode> synthesizedFunctionNodes) {
+    if (_hasBuiltOutlines) return;
+    if (isConst && isPatch) {
+      origin.buildOutlineExpressions(library, coreTypes,
+          delayedActionPerformers, synthesizedFunctionNodes);
+    }
     super.buildOutlineExpressions(
         library, coreTypes, delayedActionPerformers, synthesizedFunctionNodes);
 
@@ -267,6 +274,10 @@
       bodyBuilder.resolveRedirectingFactoryTargets();
     }
     beginInitializers = null;
+    if (isConst && isPatch) {
+      _finishPatch();
+    }
+    _hasBuiltOutlines = true;
   }
 
   @override
@@ -388,10 +399,7 @@
     return null;
   }
 
-  @override
-  int finishPatch() {
-    if (!isPatch) return 0;
-
+  void _finishPatch() {
     // TODO(ahe): restore file-offset once we track both origin and patch file
     // URIs. See https://github.com/dart-lang/sdk/issues/31579
     origin.constructor.fileUri = fileUri;
@@ -406,6 +414,12 @@
     origin.constructor.function.parent = origin.constructor;
     origin.constructor.initializers = _constructor.initializers;
     setParents(origin.constructor.initializers, origin.constructor);
+  }
+
+  @override
+  int finishPatch() {
+    if (!isPatch) return 0;
+    _finishPatch();
     return 1;
   }
 
@@ -438,7 +452,7 @@
     // compile), and so we also clear them.
     // Note: this method clears both initializers from the target Kernel node
     // and internal state associated with parsing initializers.
-    _constructor.initializers.length = 0;
+    _constructor.initializers = [];
     redirectingInitializer = null;
     superInitializer = null;
     hasMovedSuperInitializer = false;
diff --git a/pkg/front_end/lib/src/fasta/builder/factory_builder.dart b/pkg/front_end/lib/src/fasta/builder/factory_builder.dart
index 8b6c13e..22e54cb 100644
--- a/pkg/front_end/lib/src/fasta/builder/factory_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/factory_builder.dart
@@ -160,6 +160,20 @@
     return _procedureInternal;
   }
 
+  bool _hasBuiltOutlines = false;
+
+  @override
+  void buildOutlineExpressions(
+      SourceLibraryBuilder library,
+      CoreTypes coreTypes,
+      List<DelayedActionPerformer> delayedActionPerformers,
+      List<SynthesizedFunctionNode> synthesizedFunctionNodes) {
+    if (_hasBuiltOutlines) return;
+    super.buildOutlineExpressions(
+        library, coreTypes, delayedActionPerformers, synthesizedFunctionNodes);
+    _hasBuiltOutlines = true;
+  }
+
   @override
   VariableDeclaration? getTearOffParameter(int index) {
     if (_factoryTearOff != null) {
@@ -213,10 +227,7 @@
     }
   }
 
-  @override
-  int finishPatch() {
-    if (!isPatch) return 0;
-
+  void _finishPatch() {
     // TODO(ahe): restore file-offset once we track both origin and patch file
     // URIs. See https://github.com/dart-lang/sdk/issues/31579
     origin._procedure.fileUri = fileUri;
@@ -232,6 +243,12 @@
     origin._procedure.function.parent = origin._procedure;
     origin._procedure.isRedirectingFactory =
         _procedureInternal.isRedirectingFactory;
+  }
+
+  @override
+  int finishPatch() {
+    if (!isPatch) return 0;
+    _finishPatch();
     return 1;
   }
 }
@@ -347,16 +364,23 @@
     return _procedureInternal;
   }
 
+  bool _hasBuiltOutlines = false;
+
   @override
   void buildOutlineExpressions(
       SourceLibraryBuilder library,
       CoreTypes coreTypes,
       List<DelayedActionPerformer> delayedActionPerformers,
       List<SynthesizedFunctionNode> synthesizedFunctionNodes) {
+    if (_hasBuiltOutlines) return;
+    if (isConst && isPatch) {
+      origin.buildOutlineExpressions(library, coreTypes,
+          delayedActionPerformers, synthesizedFunctionNodes);
+    }
     super.buildOutlineExpressions(
         library, coreTypes, delayedActionPerformers, synthesizedFunctionNodes);
     RedirectingFactoryBody redirectingFactoryBody =
-        _procedure.function.body as RedirectingFactoryBody;
+        _procedureInternal.function.body as RedirectingFactoryBody;
     List<DartType>? typeArguments = redirectingFactoryBody.typeArguments;
     Member? target = redirectingFactoryBody.target;
     if (typeArguments != null && typeArguments.any((t) => t is UnknownType)) {
@@ -422,20 +446,19 @@
           typeArguments ?? [],
           _tearOffTypeParameters!));
     }
+    if (isConst && isPatch) {
+      _finishPatch();
+    }
+    _hasBuiltOutlines = true;
   }
 
-  @override
-  int finishPatch() {
-    if (!isPatch) return 0;
-
-    super.finishPatch();
+  void _finishPatch() {
+    super._finishPatch();
 
     SourceFactoryBuilder redirectingOrigin = origin;
     if (redirectingOrigin is RedirectingFactoryBuilder) {
       redirectingOrigin.typeArguments = typeArguments;
     }
-
-    return 1;
   }
 
   List<DartType>? getTypeArguments() {
diff --git a/pkg/front_end/lib/src/fasta/incremental_compiler.dart b/pkg/front_end/lib/src/fasta/incremental_compiler.dart
index cb1f2a1..48bbed7 100644
--- a/pkg/front_end/lib/src/fasta/incremental_compiler.dart
+++ b/pkg/front_end/lib/src/fasta/incremental_compiler.dart
@@ -1918,7 +1918,7 @@
         if (cls == null) return null;
       }
 
-      userCode!.loader.seenMessages.clear();
+      userCode!.loader.resetSeenMessages();
 
       for (TypeParameter typeParam in typeDefinitions) {
         if (!isLegalIdentifier(typeParam.name!)) {
diff --git a/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart b/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart
index 12ee6bb..d365898 100644
--- a/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart
@@ -41,6 +41,8 @@
         messageConstEvalCircularity,
         messageConstEvalContext,
         messageConstEvalExtension,
+        messageConstEvalExternalConstructor,
+        messageConstEvalExternalFactory,
         messageConstEvalFailedAssertion,
         messageConstEvalNotListOrSetInSpread,
         messageConstEvalNotMapInSpread,
@@ -1652,6 +1654,8 @@
           node,
           'Constructor "$node" has non-trivial body '
           '"${constructor.function.body.runtimeType}".');
+    } else if (constructor.isExternal) {
+      return createErrorConstant(node, messageConstEvalExternalConstructor);
     }
     return null;
   }
@@ -3012,30 +3016,33 @@
               isConst: true));
     }
     if (target.kind == ProcedureKind.Factory) {
-      if (target.isConst &&
-          target.enclosingLibrary == coreTypes.coreLibrary &&
-          positionals.length == 1 &&
-          (target.name.text == "fromEnvironment" ||
-              target.name.text == "hasEnvironment")) {
-        if (environmentDefines != null) {
-          // Evaluate environment constant.
-          Constant name = positionals.single;
-          if (name is StringConstant) {
-            if (target.name.text == "fromEnvironment") {
-              return _handleFromEnvironment(target, name, named);
-            } else {
-              return _handleHasEnvironment(name);
+      if (target.isConst) {
+        if (target.enclosingLibrary == coreTypes.coreLibrary &&
+            positionals.length == 1 &&
+            (target.name.text == "fromEnvironment" ||
+                target.name.text == "hasEnvironment")) {
+          if (environmentDefines != null) {
+            // Evaluate environment constant.
+            Constant name = positionals.single;
+            if (name is StringConstant) {
+              if (target.name.text == "fromEnvironment") {
+                return _handleFromEnvironment(target, name, named);
+              } else {
+                return _handleHasEnvironment(name);
+              }
+            } else if (name is NullConstant) {
+              return createErrorConstant(node, messageConstEvalNullValue);
             }
-          } else if (name is NullConstant) {
-            return createErrorConstant(node, messageConstEvalNullValue);
+          } else {
+            // Leave environment constant unevaluated.
+            return unevaluated(
+                node,
+                new StaticInvocation(target,
+                    unevaluatedArguments(positionals, named, arguments.types),
+                    isConst: true));
           }
-        } else {
-          // Leave environment constant unevaluated.
-          return unevaluated(
-              node,
-              new StaticInvocation(target,
-                  unevaluatedArguments(positionals, named, arguments.types),
-                  isConst: true));
+        } else if (target.isExternal) {
+          return createErrorConstant(node, messageConstEvalExternalFactory);
         }
       }
     } else if (target.name.text == 'identical') {
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_constants.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_constants.dart
index 6868aa7..d0033fa 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_constants.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_constants.dart
@@ -46,6 +46,17 @@
 
   @override
   void reportInvalidExpression(InvalidExpression node) {
+    // TODO(johnniwinther): Improve the precision of this assertion. Do we
+    // for instance allow warnings only to have been reported in previous
+    // compilations.
+    assert(
+        // Either we have already reported an error
+        loader.hasSeenError ||
+            // or we have reported an error in a previous compilation.
+            loader.builders.values.any((builder) =>
+                builder.library.problemsAsJson?.isNotEmpty ?? false),
+        "No error reported before seeing: "
+        "${node.message}");
     // Assumed to be already reported.
   }
 }
diff --git a/pkg/front_end/lib/src/fasta/loader.dart b/pkg/front_end/lib/src/fasta/loader.dart
index 31aea33..7dedab8 100644
--- a/pkg/front_end/lib/src/fasta/loader.dart
+++ b/pkg/front_end/lib/src/fasta/loader.dart
@@ -81,6 +81,15 @@
   final List<FormattedMessage> allComponentProblems = <FormattedMessage>[];
 
   final Set<String> seenMessages = new Set<String>();
+  bool _hasSeenError = false;
+
+  void resetSeenMessages() {
+    seenMessages.clear();
+    _hasSeenError = false;
+  }
+
+  /// Returns `true` if a compile time error has been reported.
+  bool get hasSeenError => _hasSeenError;
 
   LibraryBuilder? _coreLibrary;
   LibraryBuilder? typedDataLibrary;
@@ -362,6 +371,9 @@
 severity: $severity
 """;
     if (!seenMessages.add(trace)) return null;
+    if (message.code.severity == Severity.error) {
+      _hasSeenError = true;
+    }
     if (message.code.severity == Severity.context) {
       internalProblem(
           templateInternalProblemContextSeverity
diff --git a/pkg/front_end/messages.status b/pkg/front_end/messages.status
index b201a4c..ba2bc55 100644
--- a/pkg/front_end/messages.status
+++ b/pkg/front_end/messages.status
@@ -103,6 +103,10 @@
 ConstEvalDuplicateKey/example: Fail
 ConstEvalElementImplementsEqual/example: Fail
 ConstEvalExtension/example: Fail
+ConstEvalExternalConstructor/analyzerCode: Fail
+ConstEvalExternalConstructor/example: Fail
+ConstEvalExternalFactory/analyzerCode: Fail
+ConstEvalExternalFactory/example: Fail
 ConstEvalFailedAssertion/example: Fail
 ConstEvalFailedAssertionWithMessage/example: Fail
 ConstEvalFreeTypeParameter/analyzerCode: Fail
diff --git a/pkg/front_end/messages.yaml b/pkg/front_end/messages.yaml
index f0cb719..0873cba 100644
--- a/pkg/front_end/messages.yaml
+++ b/pkg/front_end/messages.yaml
@@ -219,6 +219,12 @@
   template: "Extension operations can't be used in constant expressions."
   analyzerCode: NOT_CONSTANT_EXPRESSION
 
+ConstEvalExternalConstructor:
+  template: "External constructors can't be evaluated in constant expressions."
+
+ConstEvalExternalFactory:
+  template: "External factory constructors can't be evaluated in constant expressions."
+
 ConstEvalUnevaluated:
   template: "Couldn't evaluate constant expression."
 
diff --git a/pkg/front_end/test/spell_checking_list_code.txt b/pkg/front_end/test/spell_checking_list_code.txt
index f8df10f..b0e58b2 100644
--- a/pkg/front_end/test/spell_checking_list_code.txt
+++ b/pkg/front_end/test/spell_checking_list_code.txt
@@ -167,6 +167,7 @@
 casts
 categorized
 ce
+ceil
 cfe
 ch
 channel
@@ -220,6 +221,7 @@
 combiner
 compared
 compares
+compilations
 completes
 complicating
 component's
diff --git a/pkg/front_end/test/spell_checking_list_tests.txt b/pkg/front_end/test/spell_checking_list_tests.txt
index ad13d98..bb193c9 100644
--- a/pkg/front_end/test/spell_checking_list_tests.txt
+++ b/pkg/front_end/test/spell_checking_list_tests.txt
@@ -702,6 +702,7 @@
 pack
 paging
 paint
+parallax
 parameterized
 party
 pause
diff --git a/pkg/front_end/testcases/dartdevc/symbol.dart b/pkg/front_end/testcases/dartdevc/symbol.dart
new file mode 100644
index 0000000..e899102
--- /dev/null
+++ b/pkg/front_end/testcases/dartdevc/symbol.dart
@@ -0,0 +1,5 @@
+// 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.
+
+main() => const Symbol('a');
\ No newline at end of file
diff --git a/pkg/front_end/testcases/dartdevc/symbol.dart.strong.expect b/pkg/front_end/testcases/dartdevc/symbol.dart.strong.expect
new file mode 100644
index 0000000..d827f5b
--- /dev/null
+++ b/pkg/front_end/testcases/dartdevc/symbol.dart.strong.expect
@@ -0,0 +1,10 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:_internal" as _in;
+
+static method main() → dynamic
+  return #C1;
+
+constants  {
+  #C1 = #a
+}
diff --git a/pkg/front_end/testcases/dartdevc/symbol.dart.strong.transformed.expect b/pkg/front_end/testcases/dartdevc/symbol.dart.strong.transformed.expect
new file mode 100644
index 0000000..d827f5b
--- /dev/null
+++ b/pkg/front_end/testcases/dartdevc/symbol.dart.strong.transformed.expect
@@ -0,0 +1,10 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:_internal" as _in;
+
+static method main() → dynamic
+  return #C1;
+
+constants  {
+  #C1 = #a
+}
diff --git a/pkg/front_end/testcases/dartdevc/symbol.dart.textual_outline.expect b/pkg/front_end/testcases/dartdevc/symbol.dart.textual_outline.expect
new file mode 100644
index 0000000..3aa6646
--- /dev/null
+++ b/pkg/front_end/testcases/dartdevc/symbol.dart.textual_outline.expect
@@ -0,0 +1 @@
+main() => const Symbol('a');
diff --git a/pkg/front_end/testcases/dartdevc/symbol.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/dartdevc/symbol.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..3aa6646
--- /dev/null
+++ b/pkg/front_end/testcases/dartdevc/symbol.dart.textual_outline_modelled.expect
@@ -0,0 +1 @@
+main() => const Symbol('a');
diff --git a/pkg/front_end/testcases/dartdevc/symbol.dart.weak.expect b/pkg/front_end/testcases/dartdevc/symbol.dart.weak.expect
new file mode 100644
index 0000000..d827f5b
--- /dev/null
+++ b/pkg/front_end/testcases/dartdevc/symbol.dart.weak.expect
@@ -0,0 +1,10 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:_internal" as _in;
+
+static method main() → dynamic
+  return #C1;
+
+constants  {
+  #C1 = #a
+}
diff --git a/pkg/front_end/testcases/dartdevc/symbol.dart.weak.outline.expect b/pkg/front_end/testcases/dartdevc/symbol.dart.weak.outline.expect
new file mode 100644
index 0000000..e2cba6b
--- /dev/null
+++ b/pkg/front_end/testcases/dartdevc/symbol.dart.weak.outline.expect
@@ -0,0 +1,5 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/dartdevc/symbol.dart.weak.transformed.expect b/pkg/front_end/testcases/dartdevc/symbol.dart.weak.transformed.expect
new file mode 100644
index 0000000..d827f5b
--- /dev/null
+++ b/pkg/front_end/testcases/dartdevc/symbol.dart.weak.transformed.expect
@@ -0,0 +1,10 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:_internal" as _in;
+
+static method main() → dynamic
+  return #C1;
+
+constants  {
+  #C1 = #a
+}
diff --git a/pkg/front_end/testcases/extension_types/simple_show_hide.dart b/pkg/front_end/testcases/extension_types/simple_show_hide.dart
new file mode 100644
index 0000000..e64df54
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/simple_show_hide.dart
@@ -0,0 +1,41 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+extension E1 on int show num {}
+
+test1(E1 e1) {
+  e1.ceil(); // Ok.
+  e2.floor(); // Ok.
+  e1.isEven; // Error.
+}
+
+extension E2 on int show num hide ceil {}
+
+test2(E2 e2) {
+  e2.ceil(); // Error.
+  e2.floor(); // Ok.
+  e2.isEven; // Error.
+}
+
+extension E3 on int hide isEven {}
+
+test3(E3 e3) {
+  e3.isOdd; // Ok.
+  e3.isEven; // Error.
+}
+
+extension type MyInt on int show num, isEven hide floor {
+  int get twice => 2 * this;
+}
+
+test() {
+  MyInt m = 42;
+  m.twice; // OK, in the extension type.
+  m.isEven; // OK, a shown instance member.
+  m.ceil(); // OK, a shown instance member.
+  m.toString(); // OK, an `Object` member.
+  m.floor(); // Error, hidden.
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/extension_types/simple_show_hide.dart.strong.expect b/pkg/front_end/testcases/extension_types/simple_show_hide.dart.strong.expect
new file mode 100644
index 0000000..d246aca
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/simple_show_hide.dart.strong.expect
@@ -0,0 +1,256 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:5:17: Error: A extension declaration must have a body, even if it is empty.
+// Try adding an empty body.
+// extension E1 on int show num {}
+//                 ^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:5:26: Error: A function declaration needs an explicit list of parameters.
+// Try adding a parameter list to the function declaration.
+// extension E1 on int show num {}
+//                          ^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:13:17: Error: A extension declaration must have a body, even if it is empty.
+// Try adding an empty body.
+// extension E2 on int show num hide ceil {}
+//                 ^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:13:26: Error: Expected ';' after this.
+// extension E2 on int show num hide ceil {}
+//                          ^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:13:26: Error: 'num' is already declared in this scope.
+// extension E2 on int show num hide ceil {}
+//                          ^^^
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:5:26: Context: Previous declaration of 'num'.
+// extension E1 on int show num {}
+//                          ^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:13:35: Error: A function declaration needs an explicit list of parameters.
+// Try adding a parameter list to the function declaration.
+// extension E2 on int show num hide ceil {}
+//                                   ^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:21:17: Error: A extension declaration must have a body, even if it is empty.
+// Try adding an empty body.
+// extension E3 on int hide isEven {}
+//                 ^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:21:26: Error: A function declaration needs an explicit list of parameters.
+// Try adding a parameter list to the function declaration.
+// extension E3 on int hide isEven {}
+//                          ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:28:25: Error: A extension declaration must have a body, even if it is empty.
+// Try adding an empty body.
+// extension type MyInt on int show num, isEven hide floor {
+//                         ^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:28:39: Error: Expected ';' after this.
+// extension type MyInt on int show num, isEven hide floor {
+//                                       ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:28:34: Error: 'num' is already declared in this scope.
+// extension type MyInt on int show num, isEven hide floor {
+//                                  ^^^
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:13:26: Context: Previous declaration of 'num'.
+// extension E2 on int show num hide ceil {}
+//                          ^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:28:39: Error: 'isEven' is already declared in this scope.
+// extension type MyInt on int show num, isEven hide floor {
+//                                       ^^^^^^
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:21:26: Context: Previous declaration of 'isEven'.
+// extension E3 on int hide isEven {}
+//                          ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:28:51: Error: A function declaration needs an explicit list of parameters.
+// Try adding a parameter list to the function declaration.
+// extension type MyInt on int show num, isEven hide floor {
+//                                                   ^^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:5:21: Error: Type 'show' not found.
+// extension E1 on int show num {}
+//                     ^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:13:21: Error: Type 'show' not found.
+// extension E2 on int show num hide ceil {}
+//                     ^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:13:30: Error: Type 'hide' not found.
+// extension E2 on int show num hide ceil {}
+//                              ^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:21:21: Error: Type 'hide' not found.
+// extension E3 on int hide isEven {}
+//                     ^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:28:29: Error: Type 'show' not found.
+// extension type MyInt on int show num, isEven hide floor {
+//                             ^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:28:46: Error: Type 'hide' not found.
+// extension type MyInt on int show num, isEven hide floor {
+//                                              ^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:9:3: Error: Getter not found: 'e2'.
+//   e2.floor(); // Ok.
+//   ^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:8:6: Error: The method 'ceil' isn't defined for the extension 'E1'.
+// Try correcting the name to the name of an existing method, or defining a method name 'ceil'.
+//   e1.ceil(); // Ok.
+//      ^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:10:6: Error: The getter 'isEven' isn't defined for the extension 'E1'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'isEven'.
+//   e1.isEven; // Error.
+//      ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:13:21: Error: 'show' isn't a type.
+// extension E2 on int show num hide ceil {}
+//                     ^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:16:6: Error: The method 'ceil' isn't defined for the extension 'E2'.
+// Try correcting the name to the name of an existing method, or defining a method name 'ceil'.
+//   e2.ceil(); // Error.
+//      ^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:17:6: Error: The method 'floor' isn't defined for the extension 'E2'.
+// Try correcting the name to the name of an existing method, or defining a method name 'floor'.
+//   e2.floor(); // Ok.
+//      ^^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:18:6: Error: The getter 'isEven' isn't defined for the extension 'E2'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'isEven'.
+//   e2.isEven; // Error.
+//      ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:24:6: Error: The getter 'isOdd' isn't defined for the extension 'E3'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'isOdd'.
+//   e3.isOdd; // Ok.
+//      ^^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:25:6: Error: The getter 'isEven' isn't defined for the extension 'E3'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'isEven'.
+//   e3.isEven; // Error.
+//      ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:28:29: Error: 'show' isn't a type.
+// extension type MyInt on int show num, isEven hide floor {
+//                             ^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:29:7: Error: Expected ';' after this.
+//   int get twice => 2 * this;
+//       ^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:29:17: Error: A function declaration needs an explicit list of parameters.
+// Try adding a parameter list to the function declaration.
+//   int get twice => 2 * this;
+//                 ^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:29:24: Error: Expected identifier, but got 'this'.
+//   int get twice => 2 * this;
+//                        ^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:34:5: Error: The getter 'twice' isn't defined for the extension 'MyInt'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'twice'.
+//   m.twice; // OK, in the extension type.
+//     ^^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:35:5: Error: The getter 'isEven' isn't defined for the extension 'MyInt'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'isEven'.
+//   m.isEven; // OK, a shown instance member.
+//     ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:36:5: Error: The method 'ceil' isn't defined for the extension 'MyInt'.
+// Try correcting the name to the name of an existing method, or defining a method name 'ceil'.
+//   m.ceil(); // OK, a shown instance member.
+//     ^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:38:5: Error: The method 'floor' isn't defined for the extension 'MyInt'.
+// Try correcting the name to the name of an existing method, or defining a method name 'floor'.
+//   m.floor(); // Error, hidden.
+//     ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+extension E1 on core::int {
+}
+extension E2 on core::int {
+}
+extension E3 on core::int {
+}
+extension type MyInt on core::int {
+}
+static method num() → invalid-type {}
+static method test1(self::E1 e1) → dynamic {
+  invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide.dart:8:6: Error: The method 'ceil' isn't defined for the extension 'E1'.
+Try correcting the name to the name of an existing method, or defining a method name 'ceil'.
+  e1.ceil(); // Ok.
+     ^^^^";
+  invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide.dart:9:3: Error: Getter not found: 'e2'.
+  e2.floor(); // Ok.
+  ^^"{dynamic}.floor();
+  invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide.dart:10:6: Error: The getter 'isEven' isn't defined for the extension 'E1'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'isEven'.
+  e1.isEven; // Error.
+     ^^^^^^";
+}
+static method ceil() → invalid-type {}
+static method test2(self::E2 e2) → dynamic {
+  invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide.dart:16:6: Error: The method 'ceil' isn't defined for the extension 'E2'.
+Try correcting the name to the name of an existing method, or defining a method name 'ceil'.
+  e2.ceil(); // Error.
+     ^^^^";
+  invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide.dart:17:6: Error: The method 'floor' isn't defined for the extension 'E2'.
+Try correcting the name to the name of an existing method, or defining a method name 'floor'.
+  e2.floor(); // Ok.
+     ^^^^^";
+  invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide.dart:18:6: Error: The getter 'isEven' isn't defined for the extension 'E2'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'isEven'.
+  e2.isEven; // Error.
+     ^^^^^^";
+}
+static method isEven() → invalid-type {}
+static method test3(self::E3 e3) → dynamic {
+  invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide.dart:24:6: Error: The getter 'isOdd' isn't defined for the extension 'E3'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'isOdd'.
+  e3.isOdd; // Ok.
+     ^^^^^";
+  invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide.dart:25:6: Error: The getter 'isEven' isn't defined for the extension 'E3'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'isEven'.
+  e3.isEven; // Error.
+     ^^^^^^";
+}
+static method floor() → invalid-type {
+  core::int get;
+  function twice() → core::num
+    return 2.{core::num::*}(invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide.dart:29:24: Error: Expected identifier, but got 'this'.
+  int get twice => 2 * this;
+                       ^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
+}
+static method test() → dynamic {
+  self::MyInt m = 42;
+  invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide.dart:34:5: Error: The getter 'twice' isn't defined for the extension 'MyInt'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'twice'.
+  m.twice; // OK, in the extension type.
+    ^^^^^";
+  invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide.dart:35:5: Error: The getter 'isEven' isn't defined for the extension 'MyInt'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'isEven'.
+  m.isEven; // OK, a shown instance member.
+    ^^^^^^";
+  invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide.dart:36:5: Error: The method 'ceil' isn't defined for the extension 'MyInt'.
+Try correcting the name to the name of an existing method, or defining a method name 'ceil'.
+  m.ceil(); // OK, a shown instance member.
+    ^^^^";
+  m.{core::Object::toString}(){() → core::String};
+  invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide.dart:38:5: Error: The method 'floor' isn't defined for the extension 'MyInt'.
+Try correcting the name to the name of an existing method, or defining a method name 'floor'.
+  m.floor(); // Error, hidden.
+    ^^^^^";
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extension_types/simple_show_hide.dart.textual_outline.expect b/pkg/front_end/testcases/extension_types/simple_show_hide.dart.textual_outline.expect
new file mode 100644
index 0000000..6296476
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/simple_show_hide.dart.textual_outline.expect
@@ -0,0 +1,15 @@
+extension E1 on int {}
+show num (){}
+test1(E1 e1) {}
+extension E2 on int {}
+show num ;
+hide ceil (){}
+test2(E2 e2) {}
+extension E3 on int {}
+hide isEven (){}
+test3(E3 e3) {}
+extension type MyInt on int {}
+show num, isEven ;
+hide floor (){}
+test() {}
+main() {}
diff --git a/pkg/front_end/testcases/extension_types/simple_show_hide.dart.weak.expect b/pkg/front_end/testcases/extension_types/simple_show_hide.dart.weak.expect
new file mode 100644
index 0000000..d246aca
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/simple_show_hide.dart.weak.expect
@@ -0,0 +1,256 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:5:17: Error: A extension declaration must have a body, even if it is empty.
+// Try adding an empty body.
+// extension E1 on int show num {}
+//                 ^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:5:26: Error: A function declaration needs an explicit list of parameters.
+// Try adding a parameter list to the function declaration.
+// extension E1 on int show num {}
+//                          ^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:13:17: Error: A extension declaration must have a body, even if it is empty.
+// Try adding an empty body.
+// extension E2 on int show num hide ceil {}
+//                 ^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:13:26: Error: Expected ';' after this.
+// extension E2 on int show num hide ceil {}
+//                          ^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:13:26: Error: 'num' is already declared in this scope.
+// extension E2 on int show num hide ceil {}
+//                          ^^^
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:5:26: Context: Previous declaration of 'num'.
+// extension E1 on int show num {}
+//                          ^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:13:35: Error: A function declaration needs an explicit list of parameters.
+// Try adding a parameter list to the function declaration.
+// extension E2 on int show num hide ceil {}
+//                                   ^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:21:17: Error: A extension declaration must have a body, even if it is empty.
+// Try adding an empty body.
+// extension E3 on int hide isEven {}
+//                 ^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:21:26: Error: A function declaration needs an explicit list of parameters.
+// Try adding a parameter list to the function declaration.
+// extension E3 on int hide isEven {}
+//                          ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:28:25: Error: A extension declaration must have a body, even if it is empty.
+// Try adding an empty body.
+// extension type MyInt on int show num, isEven hide floor {
+//                         ^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:28:39: Error: Expected ';' after this.
+// extension type MyInt on int show num, isEven hide floor {
+//                                       ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:28:34: Error: 'num' is already declared in this scope.
+// extension type MyInt on int show num, isEven hide floor {
+//                                  ^^^
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:13:26: Context: Previous declaration of 'num'.
+// extension E2 on int show num hide ceil {}
+//                          ^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:28:39: Error: 'isEven' is already declared in this scope.
+// extension type MyInt on int show num, isEven hide floor {
+//                                       ^^^^^^
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:21:26: Context: Previous declaration of 'isEven'.
+// extension E3 on int hide isEven {}
+//                          ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:28:51: Error: A function declaration needs an explicit list of parameters.
+// Try adding a parameter list to the function declaration.
+// extension type MyInt on int show num, isEven hide floor {
+//                                                   ^^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:5:21: Error: Type 'show' not found.
+// extension E1 on int show num {}
+//                     ^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:13:21: Error: Type 'show' not found.
+// extension E2 on int show num hide ceil {}
+//                     ^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:13:30: Error: Type 'hide' not found.
+// extension E2 on int show num hide ceil {}
+//                              ^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:21:21: Error: Type 'hide' not found.
+// extension E3 on int hide isEven {}
+//                     ^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:28:29: Error: Type 'show' not found.
+// extension type MyInt on int show num, isEven hide floor {
+//                             ^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:28:46: Error: Type 'hide' not found.
+// extension type MyInt on int show num, isEven hide floor {
+//                                              ^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:9:3: Error: Getter not found: 'e2'.
+//   e2.floor(); // Ok.
+//   ^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:8:6: Error: The method 'ceil' isn't defined for the extension 'E1'.
+// Try correcting the name to the name of an existing method, or defining a method name 'ceil'.
+//   e1.ceil(); // Ok.
+//      ^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:10:6: Error: The getter 'isEven' isn't defined for the extension 'E1'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'isEven'.
+//   e1.isEven; // Error.
+//      ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:13:21: Error: 'show' isn't a type.
+// extension E2 on int show num hide ceil {}
+//                     ^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:16:6: Error: The method 'ceil' isn't defined for the extension 'E2'.
+// Try correcting the name to the name of an existing method, or defining a method name 'ceil'.
+//   e2.ceil(); // Error.
+//      ^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:17:6: Error: The method 'floor' isn't defined for the extension 'E2'.
+// Try correcting the name to the name of an existing method, or defining a method name 'floor'.
+//   e2.floor(); // Ok.
+//      ^^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:18:6: Error: The getter 'isEven' isn't defined for the extension 'E2'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'isEven'.
+//   e2.isEven; // Error.
+//      ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:24:6: Error: The getter 'isOdd' isn't defined for the extension 'E3'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'isOdd'.
+//   e3.isOdd; // Ok.
+//      ^^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:25:6: Error: The getter 'isEven' isn't defined for the extension 'E3'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'isEven'.
+//   e3.isEven; // Error.
+//      ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:28:29: Error: 'show' isn't a type.
+// extension type MyInt on int show num, isEven hide floor {
+//                             ^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:29:7: Error: Expected ';' after this.
+//   int get twice => 2 * this;
+//       ^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:29:17: Error: A function declaration needs an explicit list of parameters.
+// Try adding a parameter list to the function declaration.
+//   int get twice => 2 * this;
+//                 ^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:29:24: Error: Expected identifier, but got 'this'.
+//   int get twice => 2 * this;
+//                        ^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:34:5: Error: The getter 'twice' isn't defined for the extension 'MyInt'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'twice'.
+//   m.twice; // OK, in the extension type.
+//     ^^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:35:5: Error: The getter 'isEven' isn't defined for the extension 'MyInt'.
+// Try correcting the name to the name of an existing getter, or defining a getter or field named 'isEven'.
+//   m.isEven; // OK, a shown instance member.
+//     ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:36:5: Error: The method 'ceil' isn't defined for the extension 'MyInt'.
+// Try correcting the name to the name of an existing method, or defining a method name 'ceil'.
+//   m.ceil(); // OK, a shown instance member.
+//     ^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:38:5: Error: The method 'floor' isn't defined for the extension 'MyInt'.
+// Try correcting the name to the name of an existing method, or defining a method name 'floor'.
+//   m.floor(); // Error, hidden.
+//     ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+extension E1 on core::int {
+}
+extension E2 on core::int {
+}
+extension E3 on core::int {
+}
+extension type MyInt on core::int {
+}
+static method num() → invalid-type {}
+static method test1(self::E1 e1) → dynamic {
+  invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide.dart:8:6: Error: The method 'ceil' isn't defined for the extension 'E1'.
+Try correcting the name to the name of an existing method, or defining a method name 'ceil'.
+  e1.ceil(); // Ok.
+     ^^^^";
+  invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide.dart:9:3: Error: Getter not found: 'e2'.
+  e2.floor(); // Ok.
+  ^^"{dynamic}.floor();
+  invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide.dart:10:6: Error: The getter 'isEven' isn't defined for the extension 'E1'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'isEven'.
+  e1.isEven; // Error.
+     ^^^^^^";
+}
+static method ceil() → invalid-type {}
+static method test2(self::E2 e2) → dynamic {
+  invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide.dart:16:6: Error: The method 'ceil' isn't defined for the extension 'E2'.
+Try correcting the name to the name of an existing method, or defining a method name 'ceil'.
+  e2.ceil(); // Error.
+     ^^^^";
+  invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide.dart:17:6: Error: The method 'floor' isn't defined for the extension 'E2'.
+Try correcting the name to the name of an existing method, or defining a method name 'floor'.
+  e2.floor(); // Ok.
+     ^^^^^";
+  invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide.dart:18:6: Error: The getter 'isEven' isn't defined for the extension 'E2'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'isEven'.
+  e2.isEven; // Error.
+     ^^^^^^";
+}
+static method isEven() → invalid-type {}
+static method test3(self::E3 e3) → dynamic {
+  invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide.dart:24:6: Error: The getter 'isOdd' isn't defined for the extension 'E3'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'isOdd'.
+  e3.isOdd; // Ok.
+     ^^^^^";
+  invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide.dart:25:6: Error: The getter 'isEven' isn't defined for the extension 'E3'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'isEven'.
+  e3.isEven; // Error.
+     ^^^^^^";
+}
+static method floor() → invalid-type {
+  core::int get;
+  function twice() → core::num
+    return 2.{core::num::*}(invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide.dart:29:24: Error: Expected identifier, but got 'this'.
+  int get twice => 2 * this;
+                       ^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} core::num){(core::num) → core::num};
+}
+static method test() → dynamic {
+  self::MyInt m = 42;
+  invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide.dart:34:5: Error: The getter 'twice' isn't defined for the extension 'MyInt'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'twice'.
+  m.twice; // OK, in the extension type.
+    ^^^^^";
+  invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide.dart:35:5: Error: The getter 'isEven' isn't defined for the extension 'MyInt'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'isEven'.
+  m.isEven; // OK, a shown instance member.
+    ^^^^^^";
+  invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide.dart:36:5: Error: The method 'ceil' isn't defined for the extension 'MyInt'.
+Try correcting the name to the name of an existing method, or defining a method name 'ceil'.
+  m.ceil(); // OK, a shown instance member.
+    ^^^^";
+  m.{core::Object::toString}(){() → core::String};
+  invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide.dart:38:5: Error: The method 'floor' isn't defined for the extension 'MyInt'.
+Try correcting the name to the name of an existing method, or defining a method name 'floor'.
+  m.floor(); // Error, hidden.
+    ^^^^^";
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extension_types/simple_show_hide.dart.weak.outline.expect b/pkg/front_end/testcases/extension_types/simple_show_hide.dart.weak.outline.expect
new file mode 100644
index 0000000..7a2b050
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/simple_show_hide.dart.weak.outline.expect
@@ -0,0 +1,126 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:5:17: Error: A extension declaration must have a body, even if it is empty.
+// Try adding an empty body.
+// extension E1 on int show num {}
+//                 ^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:5:26: Error: A function declaration needs an explicit list of parameters.
+// Try adding a parameter list to the function declaration.
+// extension E1 on int show num {}
+//                          ^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:13:17: Error: A extension declaration must have a body, even if it is empty.
+// Try adding an empty body.
+// extension E2 on int show num hide ceil {}
+//                 ^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:13:26: Error: Expected ';' after this.
+// extension E2 on int show num hide ceil {}
+//                          ^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:13:26: Error: 'num' is already declared in this scope.
+// extension E2 on int show num hide ceil {}
+//                          ^^^
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:5:26: Context: Previous declaration of 'num'.
+// extension E1 on int show num {}
+//                          ^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:13:35: Error: A function declaration needs an explicit list of parameters.
+// Try adding a parameter list to the function declaration.
+// extension E2 on int show num hide ceil {}
+//                                   ^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:21:17: Error: A extension declaration must have a body, even if it is empty.
+// Try adding an empty body.
+// extension E3 on int hide isEven {}
+//                 ^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:21:26: Error: A function declaration needs an explicit list of parameters.
+// Try adding a parameter list to the function declaration.
+// extension E3 on int hide isEven {}
+//                          ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:28:25: Error: A extension declaration must have a body, even if it is empty.
+// Try adding an empty body.
+// extension type MyInt on int show num, isEven hide floor {
+//                         ^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:28:39: Error: Expected ';' after this.
+// extension type MyInt on int show num, isEven hide floor {
+//                                       ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:28:34: Error: 'num' is already declared in this scope.
+// extension type MyInt on int show num, isEven hide floor {
+//                                  ^^^
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:13:26: Context: Previous declaration of 'num'.
+// extension E2 on int show num hide ceil {}
+//                          ^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:28:39: Error: 'isEven' is already declared in this scope.
+// extension type MyInt on int show num, isEven hide floor {
+//                                       ^^^^^^
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:21:26: Context: Previous declaration of 'isEven'.
+// extension E3 on int hide isEven {}
+//                          ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:28:51: Error: A function declaration needs an explicit list of parameters.
+// Try adding a parameter list to the function declaration.
+// extension type MyInt on int show num, isEven hide floor {
+//                                                   ^^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:5:21: Error: Type 'show' not found.
+// extension E1 on int show num {}
+//                     ^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:13:21: Error: Type 'show' not found.
+// extension E2 on int show num hide ceil {}
+//                     ^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:13:30: Error: Type 'hide' not found.
+// extension E2 on int show num hide ceil {}
+//                              ^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:21:21: Error: Type 'hide' not found.
+// extension E3 on int hide isEven {}
+//                     ^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:28:29: Error: Type 'show' not found.
+// extension type MyInt on int show num, isEven hide floor {
+//                             ^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide.dart:28:46: Error: Type 'hide' not found.
+// extension type MyInt on int show num, isEven hide floor {
+//                                              ^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+extension E1 on core::int {
+}
+extension E2 on core::int {
+}
+extension E3 on core::int {
+}
+extension type MyInt on core::int {
+}
+static method num() → invalid-type
+  ;
+static method test1(self::E1 e1) → dynamic
+  ;
+static method ceil() → invalid-type
+  ;
+static method test2(self::E2 e2) → dynamic
+  ;
+static method isEven() → invalid-type
+  ;
+static method test3(self::E3 e3) → dynamic
+  ;
+static method floor() → invalid-type
+  ;
+static method test() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart b/pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart
new file mode 100644
index 0000000..7f5ac0d
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart
@@ -0,0 +1,20 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+extension E1 on int show num {
+  int ceil() {} // Error.
+}
+
+extension E2 on int show num hide ceil {
+  int ceil() {} // Ok.
+  int floor() {} // Error.
+}
+
+extension E3 on int hide isEven {
+  // `on int hide isEven` means `on int show int hide isEven`.
+  bool get isOdd => throw 42; // Error.
+  bool get isEven => throw 42; // Ok.
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart.strong.expect b/pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart.strong.expect
new file mode 100644
index 0000000..6d68160
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart.strong.expect
@@ -0,0 +1,141 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:5:17: Error: A extension declaration must have a body, even if it is empty.
+// Try adding an empty body.
+// extension E1 on int show num {
+//                 ^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:5:26: Error: A function declaration needs an explicit list of parameters.
+// Try adding a parameter list to the function declaration.
+// extension E1 on int show num {
+//                          ^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:9:17: Error: A extension declaration must have a body, even if it is empty.
+// Try adding an empty body.
+// extension E2 on int show num hide ceil {
+//                 ^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:9:26: Error: Expected ';' after this.
+// extension E2 on int show num hide ceil {
+//                          ^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:9:26: Error: 'num' is already declared in this scope.
+// extension E2 on int show num hide ceil {
+//                          ^^^
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:5:26: Context: Previous declaration of 'num'.
+// extension E1 on int show num {
+//                          ^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:9:35: Error: A function declaration needs an explicit list of parameters.
+// Try adding a parameter list to the function declaration.
+// extension E2 on int show num hide ceil {
+//                                   ^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:14:17: Error: A extension declaration must have a body, even if it is empty.
+// Try adding an empty body.
+// extension E3 on int hide isEven {
+//                 ^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:14:26: Error: A function declaration needs an explicit list of parameters.
+// Try adding a parameter list to the function declaration.
+// extension E3 on int hide isEven {
+//                          ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:5:21: Error: Type 'show' not found.
+// extension E1 on int show num {
+//                     ^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:9:21: Error: Type 'show' not found.
+// extension E2 on int show num hide ceil {
+//                     ^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:9:30: Error: Type 'hide' not found.
+// extension E2 on int show num hide ceil {
+//                              ^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:14:21: Error: Type 'hide' not found.
+// extension E3 on int hide isEven {
+//                     ^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:6:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+//   int ceil() {} // Error.
+//   ^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:9:21: Error: 'show' isn't a type.
+// extension E2 on int show num hide ceil {
+//                     ^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:10:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+//   int ceil() {} // Ok.
+//   ^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:11:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+//   int floor() {} // Error.
+//   ^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:16:8: Error: Expected ';' after this.
+//   bool get isOdd => throw 42; // Error.
+//        ^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:16:18: Error: A function declaration needs an explicit list of parameters.
+// Try adding a parameter list to the function declaration.
+//   bool get isOdd => throw 42; // Error.
+//                  ^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:17:8: Error: 'get' is already declared in this scope.
+//   bool get isEven => throw 42; // Ok.
+//        ^^^
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:16:8: Context: Previous declaration of 'get'.
+//   bool get isOdd => throw 42; // Error.
+//        ^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:17:8: Error: Expected ';' after this.
+//   bool get isEven => throw 42; // Ok.
+//        ^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:17:19: Error: A function declaration needs an explicit list of parameters.
+// Try adding a parameter list to the function declaration.
+//   bool get isEven => throw 42; // Ok.
+//                   ^^
+//
+import self as self;
+import "dart:core" as core;
+
+extension E1 on core::int {
+}
+extension E2 on core::int {
+}
+extension E3 on core::int {
+}
+static method num() → invalid-type {
+  function ceil() → core::int {
+    return let final Never #t1 = invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:6:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+  int ceil() {} // Error.
+  ^" in null;
+  }
+}
+static method ceil() → invalid-type {
+  function ceil() → core::int {
+    return let final Never #t2 = invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:10:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+  int ceil() {} // Ok.
+  ^" in null;
+  }
+  function floor() → core::int {
+    return let final Never #t3 = invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:11:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+  int floor() {} // Error.
+  ^" in null;
+  }
+}
+static method isEven() → invalid-type {
+  core::bool get;
+  function isOdd() → Never
+    return throw 42;
+  core::bool get = invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:17:8: Error: 'get' is already declared in this scope.
+  bool get isEven => throw 42; // Ok.
+       ^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
+  function isEven() → Never
+    return throw 42;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart.strong.transformed.expect b/pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart.strong.transformed.expect
new file mode 100644
index 0000000..9fe722e
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart.strong.transformed.expect
@@ -0,0 +1,141 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:5:17: Error: A extension declaration must have a body, even if it is empty.
+// Try adding an empty body.
+// extension E1 on int show num {
+//                 ^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:5:26: Error: A function declaration needs an explicit list of parameters.
+// Try adding a parameter list to the function declaration.
+// extension E1 on int show num {
+//                          ^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:9:17: Error: A extension declaration must have a body, even if it is empty.
+// Try adding an empty body.
+// extension E2 on int show num hide ceil {
+//                 ^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:9:26: Error: Expected ';' after this.
+// extension E2 on int show num hide ceil {
+//                          ^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:9:26: Error: 'num' is already declared in this scope.
+// extension E2 on int show num hide ceil {
+//                          ^^^
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:5:26: Context: Previous declaration of 'num'.
+// extension E1 on int show num {
+//                          ^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:9:35: Error: A function declaration needs an explicit list of parameters.
+// Try adding a parameter list to the function declaration.
+// extension E2 on int show num hide ceil {
+//                                   ^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:14:17: Error: A extension declaration must have a body, even if it is empty.
+// Try adding an empty body.
+// extension E3 on int hide isEven {
+//                 ^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:14:26: Error: A function declaration needs an explicit list of parameters.
+// Try adding a parameter list to the function declaration.
+// extension E3 on int hide isEven {
+//                          ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:5:21: Error: Type 'show' not found.
+// extension E1 on int show num {
+//                     ^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:9:21: Error: Type 'show' not found.
+// extension E2 on int show num hide ceil {
+//                     ^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:9:30: Error: Type 'hide' not found.
+// extension E2 on int show num hide ceil {
+//                              ^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:14:21: Error: Type 'hide' not found.
+// extension E3 on int hide isEven {
+//                     ^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:6:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+//   int ceil() {} // Error.
+//   ^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:9:21: Error: 'show' isn't a type.
+// extension E2 on int show num hide ceil {
+//                     ^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:10:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+//   int ceil() {} // Ok.
+//   ^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:11:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+//   int floor() {} // Error.
+//   ^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:16:8: Error: Expected ';' after this.
+//   bool get isOdd => throw 42; // Error.
+//        ^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:16:18: Error: A function declaration needs an explicit list of parameters.
+// Try adding a parameter list to the function declaration.
+//   bool get isOdd => throw 42; // Error.
+//                  ^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:17:8: Error: 'get' is already declared in this scope.
+//   bool get isEven => throw 42; // Ok.
+//        ^^^
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:16:8: Context: Previous declaration of 'get'.
+//   bool get isOdd => throw 42; // Error.
+//        ^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:17:8: Error: Expected ';' after this.
+//   bool get isEven => throw 42; // Ok.
+//        ^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:17:19: Error: A function declaration needs an explicit list of parameters.
+// Try adding a parameter list to the function declaration.
+//   bool get isEven => throw 42; // Ok.
+//                   ^^
+//
+import self as self;
+import "dart:core" as core;
+
+extension E1 on core::int {
+}
+extension E2 on core::int {
+}
+extension E3 on core::int {
+}
+static method num() → invalid-type {
+  function ceil() → core::int {
+    return let final Never #t1 = invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:6:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+  int ceil() {} // Error.
+  ^" in null;
+  }
+}
+static method ceil() → invalid-type {
+  function ceil() → core::int {
+    return let final Never #t2 = invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:10:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+  int ceil() {} // Ok.
+  ^" in null;
+  }
+  function floor() → core::int {
+    return let final Never #t3 = invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:11:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+  int floor() {} // Error.
+  ^" in null;
+  }
+}
+static method isEven() → invalid-type {
+  core::bool get;
+  function isOdd() → Never
+    return throw 42;
+  core::bool get = invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:17:8: Error: 'get' is already declared in this scope.
+  bool get isEven => throw 42; // Ok.
+       ^^^";
+  function isEven() → Never
+    return throw 42;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart.textual_outline.expect b/pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart.textual_outline.expect
new file mode 100644
index 0000000..b92215c
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart.textual_outline.expect
@@ -0,0 +1,13 @@
+extension E1 on int {}
+
+show num() {}
+
+extension E2 on int {}
+
+show num;
+hide ceil() {}
+
+extension E3 on int {}
+
+hide isEven() {}
+main() {}
diff --git a/pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..4d9e489
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart.textual_outline_modelled.expect
@@ -0,0 +1,11 @@
+extension E1 on int {}
+
+extension E2 on int {}
+
+extension E3 on int {}
+
+hide ceil() {}
+hide isEven() {}
+main() {}
+show num() {}
+show num;
diff --git a/pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart.weak.expect b/pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart.weak.expect
new file mode 100644
index 0000000..6d68160
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart.weak.expect
@@ -0,0 +1,141 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:5:17: Error: A extension declaration must have a body, even if it is empty.
+// Try adding an empty body.
+// extension E1 on int show num {
+//                 ^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:5:26: Error: A function declaration needs an explicit list of parameters.
+// Try adding a parameter list to the function declaration.
+// extension E1 on int show num {
+//                          ^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:9:17: Error: A extension declaration must have a body, even if it is empty.
+// Try adding an empty body.
+// extension E2 on int show num hide ceil {
+//                 ^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:9:26: Error: Expected ';' after this.
+// extension E2 on int show num hide ceil {
+//                          ^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:9:26: Error: 'num' is already declared in this scope.
+// extension E2 on int show num hide ceil {
+//                          ^^^
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:5:26: Context: Previous declaration of 'num'.
+// extension E1 on int show num {
+//                          ^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:9:35: Error: A function declaration needs an explicit list of parameters.
+// Try adding a parameter list to the function declaration.
+// extension E2 on int show num hide ceil {
+//                                   ^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:14:17: Error: A extension declaration must have a body, even if it is empty.
+// Try adding an empty body.
+// extension E3 on int hide isEven {
+//                 ^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:14:26: Error: A function declaration needs an explicit list of parameters.
+// Try adding a parameter list to the function declaration.
+// extension E3 on int hide isEven {
+//                          ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:5:21: Error: Type 'show' not found.
+// extension E1 on int show num {
+//                     ^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:9:21: Error: Type 'show' not found.
+// extension E2 on int show num hide ceil {
+//                     ^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:9:30: Error: Type 'hide' not found.
+// extension E2 on int show num hide ceil {
+//                              ^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:14:21: Error: Type 'hide' not found.
+// extension E3 on int hide isEven {
+//                     ^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:6:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+//   int ceil() {} // Error.
+//   ^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:9:21: Error: 'show' isn't a type.
+// extension E2 on int show num hide ceil {
+//                     ^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:10:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+//   int ceil() {} // Ok.
+//   ^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:11:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+//   int floor() {} // Error.
+//   ^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:16:8: Error: Expected ';' after this.
+//   bool get isOdd => throw 42; // Error.
+//        ^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:16:18: Error: A function declaration needs an explicit list of parameters.
+// Try adding a parameter list to the function declaration.
+//   bool get isOdd => throw 42; // Error.
+//                  ^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:17:8: Error: 'get' is already declared in this scope.
+//   bool get isEven => throw 42; // Ok.
+//        ^^^
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:16:8: Context: Previous declaration of 'get'.
+//   bool get isOdd => throw 42; // Error.
+//        ^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:17:8: Error: Expected ';' after this.
+//   bool get isEven => throw 42; // Ok.
+//        ^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:17:19: Error: A function declaration needs an explicit list of parameters.
+// Try adding a parameter list to the function declaration.
+//   bool get isEven => throw 42; // Ok.
+//                   ^^
+//
+import self as self;
+import "dart:core" as core;
+
+extension E1 on core::int {
+}
+extension E2 on core::int {
+}
+extension E3 on core::int {
+}
+static method num() → invalid-type {
+  function ceil() → core::int {
+    return let final Never #t1 = invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:6:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+  int ceil() {} // Error.
+  ^" in null;
+  }
+}
+static method ceil() → invalid-type {
+  function ceil() → core::int {
+    return let final Never #t2 = invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:10:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+  int ceil() {} // Ok.
+  ^" in null;
+  }
+  function floor() → core::int {
+    return let final Never #t3 = invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:11:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+  int floor() {} // Error.
+  ^" in null;
+  }
+}
+static method isEven() → invalid-type {
+  core::bool get;
+  function isOdd() → Never
+    return throw 42;
+  core::bool get = invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:17:8: Error: 'get' is already declared in this scope.
+  bool get isEven => throw 42; // Ok.
+       ^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
+  function isEven() → Never
+    return throw 42;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart.weak.outline.expect b/pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart.weak.outline.expect
new file mode 100644
index 0000000..5c68071
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart.weak.outline.expect
@@ -0,0 +1,78 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:5:17: Error: A extension declaration must have a body, even if it is empty.
+// Try adding an empty body.
+// extension E1 on int show num {
+//                 ^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:5:26: Error: A function declaration needs an explicit list of parameters.
+// Try adding a parameter list to the function declaration.
+// extension E1 on int show num {
+//                          ^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:9:17: Error: A extension declaration must have a body, even if it is empty.
+// Try adding an empty body.
+// extension E2 on int show num hide ceil {
+//                 ^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:9:26: Error: Expected ';' after this.
+// extension E2 on int show num hide ceil {
+//                          ^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:9:26: Error: 'num' is already declared in this scope.
+// extension E2 on int show num hide ceil {
+//                          ^^^
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:5:26: Context: Previous declaration of 'num'.
+// extension E1 on int show num {
+//                          ^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:9:35: Error: A function declaration needs an explicit list of parameters.
+// Try adding a parameter list to the function declaration.
+// extension E2 on int show num hide ceil {
+//                                   ^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:14:17: Error: A extension declaration must have a body, even if it is empty.
+// Try adding an empty body.
+// extension E3 on int hide isEven {
+//                 ^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:14:26: Error: A function declaration needs an explicit list of parameters.
+// Try adding a parameter list to the function declaration.
+// extension E3 on int hide isEven {
+//                          ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:5:21: Error: Type 'show' not found.
+// extension E1 on int show num {
+//                     ^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:9:21: Error: Type 'show' not found.
+// extension E2 on int show num hide ceil {
+//                     ^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:9:30: Error: Type 'hide' not found.
+// extension E2 on int show num hide ceil {
+//                              ^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:14:21: Error: Type 'hide' not found.
+// extension E3 on int hide isEven {
+//                     ^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+extension E1 on core::int {
+}
+extension E2 on core::int {
+}
+extension E3 on core::int {
+}
+static method num() → invalid-type
+  ;
+static method ceil() → invalid-type
+  ;
+static method isEven() → invalid-type
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart.weak.transformed.expect b/pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart.weak.transformed.expect
new file mode 100644
index 0000000..9fe722e
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart.weak.transformed.expect
@@ -0,0 +1,141 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:5:17: Error: A extension declaration must have a body, even if it is empty.
+// Try adding an empty body.
+// extension E1 on int show num {
+//                 ^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:5:26: Error: A function declaration needs an explicit list of parameters.
+// Try adding a parameter list to the function declaration.
+// extension E1 on int show num {
+//                          ^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:9:17: Error: A extension declaration must have a body, even if it is empty.
+// Try adding an empty body.
+// extension E2 on int show num hide ceil {
+//                 ^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:9:26: Error: Expected ';' after this.
+// extension E2 on int show num hide ceil {
+//                          ^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:9:26: Error: 'num' is already declared in this scope.
+// extension E2 on int show num hide ceil {
+//                          ^^^
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:5:26: Context: Previous declaration of 'num'.
+// extension E1 on int show num {
+//                          ^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:9:35: Error: A function declaration needs an explicit list of parameters.
+// Try adding a parameter list to the function declaration.
+// extension E2 on int show num hide ceil {
+//                                   ^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:14:17: Error: A extension declaration must have a body, even if it is empty.
+// Try adding an empty body.
+// extension E3 on int hide isEven {
+//                 ^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:14:26: Error: A function declaration needs an explicit list of parameters.
+// Try adding a parameter list to the function declaration.
+// extension E3 on int hide isEven {
+//                          ^^^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:5:21: Error: Type 'show' not found.
+// extension E1 on int show num {
+//                     ^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:9:21: Error: Type 'show' not found.
+// extension E2 on int show num hide ceil {
+//                     ^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:9:30: Error: Type 'hide' not found.
+// extension E2 on int show num hide ceil {
+//                              ^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:14:21: Error: Type 'hide' not found.
+// extension E3 on int hide isEven {
+//                     ^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:6:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+//   int ceil() {} // Error.
+//   ^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:9:21: Error: 'show' isn't a type.
+// extension E2 on int show num hide ceil {
+//                     ^^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:10:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+//   int ceil() {} // Ok.
+//   ^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:11:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+//   int floor() {} // Error.
+//   ^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:16:8: Error: Expected ';' after this.
+//   bool get isOdd => throw 42; // Error.
+//        ^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:16:18: Error: A function declaration needs an explicit list of parameters.
+// Try adding a parameter list to the function declaration.
+//   bool get isOdd => throw 42; // Error.
+//                  ^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:17:8: Error: 'get' is already declared in this scope.
+//   bool get isEven => throw 42; // Ok.
+//        ^^^
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:16:8: Context: Previous declaration of 'get'.
+//   bool get isOdd => throw 42; // Error.
+//        ^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:17:8: Error: Expected ';' after this.
+//   bool get isEven => throw 42; // Ok.
+//        ^^^
+//
+// pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:17:19: Error: A function declaration needs an explicit list of parameters.
+// Try adding a parameter list to the function declaration.
+//   bool get isEven => throw 42; // Ok.
+//                   ^^
+//
+import self as self;
+import "dart:core" as core;
+
+extension E1 on core::int {
+}
+extension E2 on core::int {
+}
+extension E3 on core::int {
+}
+static method num() → invalid-type {
+  function ceil() → core::int {
+    return let final Never #t1 = invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:6:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+  int ceil() {} // Error.
+  ^" in null;
+  }
+}
+static method ceil() → invalid-type {
+  function ceil() → core::int {
+    return let final Never #t2 = invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:10:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+  int ceil() {} // Ok.
+  ^" in null;
+  }
+  function floor() → core::int {
+    return let final Never #t3 = invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:11:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+  int floor() {} // Error.
+  ^" in null;
+  }
+}
+static method isEven() → invalid-type {
+  core::bool get;
+  function isOdd() → Never
+    return throw 42;
+  core::bool get = invalid-expression "pkg/front_end/testcases/extension_types/simple_show_hide_conflicts.dart:17:8: Error: 'get' is already declared in this scope.
+  bool get isEven => throw 42; // Ok.
+       ^^^";
+  function isEven() → Never
+    return throw 42;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/constants/js_semantics/issue46123.dart b/pkg/front_end/testcases/general/constants/js_semantics/issue46123.dart
new file mode 100644
index 0000000..0210c32
--- /dev/null
+++ b/pkg/front_end/testcases/general/constants/js_semantics/issue46123.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.
+
+import 'package:js/js.dart';
+
+@JS()
+@anonymous
+class ParallaxOptions {
+  external const factory ParallaxOptions();
+}
+
+test() => const ParallaxOptions();
+
+main() {}
diff --git a/pkg/front_end/testcases/general/constants/js_semantics/issue46123.dart.textual_outline.expect b/pkg/front_end/testcases/general/constants/js_semantics/issue46123.dart.textual_outline.expect
new file mode 100644
index 0000000..8b3f432
--- /dev/null
+++ b/pkg/front_end/testcases/general/constants/js_semantics/issue46123.dart.textual_outline.expect
@@ -0,0 +1,10 @@
+import 'package:js/js.dart';
+
+@JS()
+@anonymous
+class ParallaxOptions {
+  external const factory ParallaxOptions();
+}
+
+test() => const ParallaxOptions();
+main() {}
diff --git a/pkg/front_end/testcases/general/constants/js_semantics/issue46123.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/constants/js_semantics/issue46123.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..bef2d3d
--- /dev/null
+++ b/pkg/front_end/testcases/general/constants/js_semantics/issue46123.dart.textual_outline_modelled.expect
@@ -0,0 +1,10 @@
+import 'package:js/js.dart';
+
+@JS()
+@anonymous
+class ParallaxOptions {
+  external const factory ParallaxOptions();
+}
+
+main() {}
+test() => const ParallaxOptions();
diff --git a/pkg/front_end/testcases/general/constants/js_semantics/issue46123.dart.weak.expect b/pkg/front_end/testcases/general/constants/js_semantics/issue46123.dart.weak.expect
new file mode 100644
index 0000000..c1c307d
--- /dev/null
+++ b/pkg/front_end/testcases/general/constants/js_semantics/issue46123.dart.weak.expect
@@ -0,0 +1,37 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/constants/js_semantics/issue46123.dart:13:17: Error: Constant evaluation error:
+// test() => const ParallaxOptions();
+//                 ^
+// pkg/front_end/testcases/general/constants/js_semantics/issue46123.dart:13:17: Context: External factory constructors can't be evaluated in constant expressions.
+// test() => const ParallaxOptions();
+//                 ^
+//
+import self as self;
+import "package:js/js.dart" as js;
+import "dart:core" as core;
+
+import "package:js/js.dart";
+
+@#C2
+@#C3
+class ParallaxOptions extends core::Object {
+  external static factory •() → self::ParallaxOptions;
+}
+static method test() → dynamic
+  return invalid-expression "External factory constructors can't be evaluated in constant expressions.";
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+  #C2 = js::JS {name:#C1}
+  #C3 = js::_Anonymous {}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///issue46123.dart:
+- JS. (from org-dartlang-testcase-sdk:///pkg/js/lib/js.dart:21:9)
+- Object. (from org-dartlang-sdk:///lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/general/constants/js_semantics/issue46123.dart.weak.outline.expect b/pkg/front_end/testcases/general/constants/js_semantics/issue46123.dart.weak.outline.expect
new file mode 100644
index 0000000..d5602f8
--- /dev/null
+++ b/pkg/front_end/testcases/general/constants/js_semantics/issue46123.dart.weak.outline.expect
@@ -0,0 +1,22 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "package:js/js.dart" as js;
+import "dart:core" as core;
+
+import "package:js/js.dart";
+
+@js::JS::•()
+@js::anonymous
+class ParallaxOptions extends core::Object {
+  external static factory •() → self::ParallaxOptions;
+}
+static method test() → dynamic
+  ;
+static method main() → dynamic
+  ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///issue46123.dart:7:2 -> InstanceConstant(const JS{JS.name: null})
+Evaluated: StaticGet @ org-dartlang-testcase:///issue46123.dart:8:2 -> InstanceConstant(const _Anonymous{})
+Extra constant evaluation: evaluated: 2, effectively constant: 2
diff --git a/pkg/front_end/testcases/general/constants/js_semantics/issue46123.dart.weak.transformed.expect b/pkg/front_end/testcases/general/constants/js_semantics/issue46123.dart.weak.transformed.expect
new file mode 100644
index 0000000..c1c307d
--- /dev/null
+++ b/pkg/front_end/testcases/general/constants/js_semantics/issue46123.dart.weak.transformed.expect
@@ -0,0 +1,37 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/constants/js_semantics/issue46123.dart:13:17: Error: Constant evaluation error:
+// test() => const ParallaxOptions();
+//                 ^
+// pkg/front_end/testcases/general/constants/js_semantics/issue46123.dart:13:17: Context: External factory constructors can't be evaluated in constant expressions.
+// test() => const ParallaxOptions();
+//                 ^
+//
+import self as self;
+import "package:js/js.dart" as js;
+import "dart:core" as core;
+
+import "package:js/js.dart";
+
+@#C2
+@#C3
+class ParallaxOptions extends core::Object {
+  external static factory •() → self::ParallaxOptions;
+}
+static method test() → dynamic
+  return invalid-expression "External factory constructors can't be evaluated in constant expressions.";
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+  #C2 = js::JS {name:#C1}
+  #C3 = js::_Anonymous {}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///issue46123.dart:
+- JS. (from org-dartlang-testcase-sdk:///pkg/js/lib/js.dart:21:9)
+- Object. (from org-dartlang-sdk:///lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/general/constants/js_semantics/issue46123b.dart b/pkg/front_end/testcases/general/constants/js_semantics/issue46123b.dart
new file mode 100644
index 0000000..ecc1c05
--- /dev/null
+++ b/pkg/front_end/testcases/general/constants/js_semantics/issue46123b.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.
+
+import 'package:js/js.dart';
+
+@JS()
+@anonymous
+class ParallaxOptions {
+  external const ParallaxOptions();
+}
+
+test() => const ParallaxOptions();
+
+main() {}
diff --git a/pkg/front_end/testcases/general/constants/js_semantics/issue46123b.dart.textual_outline.expect b/pkg/front_end/testcases/general/constants/js_semantics/issue46123b.dart.textual_outline.expect
new file mode 100644
index 0000000..2d26ea3
--- /dev/null
+++ b/pkg/front_end/testcases/general/constants/js_semantics/issue46123b.dart.textual_outline.expect
@@ -0,0 +1,10 @@
+import 'package:js/js.dart';
+
+@JS()
+@anonymous
+class ParallaxOptions {
+  external const ParallaxOptions();
+}
+
+test() => const ParallaxOptions();
+main() {}
diff --git a/pkg/front_end/testcases/general/constants/js_semantics/issue46123b.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/constants/js_semantics/issue46123b.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..0c3a93a
--- /dev/null
+++ b/pkg/front_end/testcases/general/constants/js_semantics/issue46123b.dart.textual_outline_modelled.expect
@@ -0,0 +1,10 @@
+import 'package:js/js.dart';
+
+@JS()
+@anonymous
+class ParallaxOptions {
+  external const ParallaxOptions();
+}
+
+main() {}
+test() => const ParallaxOptions();
diff --git a/pkg/front_end/testcases/general/constants/js_semantics/issue46123b.dart.weak.expect b/pkg/front_end/testcases/general/constants/js_semantics/issue46123b.dart.weak.expect
new file mode 100644
index 0000000..29f09a1
--- /dev/null
+++ b/pkg/front_end/testcases/general/constants/js_semantics/issue46123b.dart.weak.expect
@@ -0,0 +1,39 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/constants/js_semantics/issue46123b.dart:13:17: Error: Constant evaluation error:
+// test() => const ParallaxOptions();
+//                 ^
+// pkg/front_end/testcases/general/constants/js_semantics/issue46123b.dart:13:17: Context: External constructors can't be evaluated in constant expressions.
+// test() => const ParallaxOptions();
+//                 ^
+//
+import self as self;
+import "package:js/js.dart" as js;
+import "dart:core" as core;
+
+import "package:js/js.dart";
+
+@#C2
+@#C3
+class ParallaxOptions extends core::Object /*hasConstConstructor*/  {
+  external const constructor •() → self::ParallaxOptions
+    : super core::Object::•()
+    ;
+}
+static method test() → dynamic
+  return invalid-expression "External constructors can't be evaluated in constant expressions.";
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+  #C2 = js::JS {name:#C1}
+  #C3 = js::_Anonymous {}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///issue46123b.dart:
+- JS. (from org-dartlang-testcase-sdk:///pkg/js/lib/js.dart:21:9)
+- Object. (from org-dartlang-sdk:///lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/general/constants/js_semantics/issue46123b.dart.weak.outline.expect b/pkg/front_end/testcases/general/constants/js_semantics/issue46123b.dart.weak.outline.expect
new file mode 100644
index 0000000..78273bc
--- /dev/null
+++ b/pkg/front_end/testcases/general/constants/js_semantics/issue46123b.dart.weak.outline.expect
@@ -0,0 +1,24 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "package:js/js.dart" as js;
+import "dart:core" as core;
+
+import "package:js/js.dart";
+
+@js::JS::•()
+@js::anonymous
+class ParallaxOptions extends core::Object /*hasConstConstructor*/  {
+  external const constructor •() → self::ParallaxOptions
+    : super core::Object::•()
+    ;
+}
+static method test() → dynamic
+  ;
+static method main() → dynamic
+  ;
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///issue46123b.dart:7:2 -> InstanceConstant(const JS{JS.name: null})
+Evaluated: StaticGet @ org-dartlang-testcase:///issue46123b.dart:8:2 -> InstanceConstant(const _Anonymous{})
+Extra constant evaluation: evaluated: 2, effectively constant: 2
diff --git a/pkg/front_end/testcases/general/constants/js_semantics/issue46123b.dart.weak.transformed.expect b/pkg/front_end/testcases/general/constants/js_semantics/issue46123b.dart.weak.transformed.expect
new file mode 100644
index 0000000..29f09a1
--- /dev/null
+++ b/pkg/front_end/testcases/general/constants/js_semantics/issue46123b.dart.weak.transformed.expect
@@ -0,0 +1,39 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/constants/js_semantics/issue46123b.dart:13:17: Error: Constant evaluation error:
+// test() => const ParallaxOptions();
+//                 ^
+// pkg/front_end/testcases/general/constants/js_semantics/issue46123b.dart:13:17: Context: External constructors can't be evaluated in constant expressions.
+// test() => const ParallaxOptions();
+//                 ^
+//
+import self as self;
+import "package:js/js.dart" as js;
+import "dart:core" as core;
+
+import "package:js/js.dart";
+
+@#C2
+@#C3
+class ParallaxOptions extends core::Object /*hasConstConstructor*/  {
+  external const constructor •() → self::ParallaxOptions
+    : super core::Object::•()
+    ;
+}
+static method test() → dynamic
+  return invalid-expression "External constructors can't be evaluated in constant expressions.";
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+  #C2 = js::JS {name:#C1}
+  #C3 = js::_Anonymous {}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///issue46123b.dart:
+- JS. (from org-dartlang-testcase-sdk:///pkg/js/lib/js.dart:21:9)
+- Object. (from org-dartlang-sdk:///lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/general/constructor_patch/libraries.json b/pkg/front_end/testcases/general/constructor_patch/libraries.json
new file mode 100644
index 0000000..154c73c
--- /dev/null
+++ b/pkg/front_end/testcases/general/constructor_patch/libraries.json
@@ -0,0 +1,12 @@
+{
+  "none": {
+    "libraries": {
+      "test": {
+        "patches": [
+          "patch_lib.dart"
+        ],
+        "uri": "origin_lib.dart"
+      }
+    }
+  }
+}
diff --git a/pkg/front_end/testcases/general/constructor_patch/main.dart b/pkg/front_end/testcases/general/constructor_patch/main.dart
new file mode 100644
index 0000000..dd2a110
--- /dev/null
+++ b/pkg/front_end/testcases/general/constructor_patch/main.dart
@@ -0,0 +1,10 @@
+// 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.
+
+import 'dart:test';
+
+main() {
+  new Class.generative();
+  const Class.constGenerative();
+}
diff --git a/pkg/front_end/testcases/general/constructor_patch/main.dart.textual_outline.expect b/pkg/front_end/testcases/general/constructor_patch/main.dart.textual_outline.expect
new file mode 100644
index 0000000..3c9c90e
--- /dev/null
+++ b/pkg/front_end/testcases/general/constructor_patch/main.dart.textual_outline.expect
@@ -0,0 +1,3 @@
+import 'dart:test';
+
+main() {}
diff --git a/pkg/front_end/testcases/general/constructor_patch/main.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/constructor_patch/main.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..3c9c90e
--- /dev/null
+++ b/pkg/front_end/testcases/general/constructor_patch/main.dart.textual_outline_modelled.expect
@@ -0,0 +1,3 @@
+import 'dart:test';
+
+main() {}
diff --git a/pkg/front_end/testcases/general/constructor_patch/main.dart.weak.expect b/pkg/front_end/testcases/general/constructor_patch/main.dart.weak.expect
new file mode 100644
index 0000000..40f37f3
--- /dev/null
+++ b/pkg/front_end/testcases/general/constructor_patch/main.dart.weak.expect
@@ -0,0 +1,42 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:test" as test;
+
+import "dart:test";
+
+static method main() → dynamic {
+  new test::Class::generative();
+  #C2;
+}
+
+library /*isNonNullableByDefault*/;
+import self as test;
+import "dart:_internal" as _in;
+import "dart:core" as core;
+
+import "dart:_internal";
+
+@#C3
+class Class extends core::Object /*hasConstConstructor*/  {
+  final field core::bool defaultValue /* from org-dartlang-testcase:///patch_lib.dart */;
+  @#C3
+  constructor generative({core::bool defaultValue = #C1}) → test::Class
+    : test::Class::defaultValue = defaultValue, super core::Object::•()
+    ;
+  @#C3
+  const constructor constGenerative({core::bool defaultValue = #C1}) → test::Class
+    : test::Class::defaultValue = defaultValue, super core::Object::•()
+    ;
+}
+
+constants  {
+  #C1 = true
+  #C2 = test::Class {defaultValue:#C1}
+  #C3 = _in::_Patch {}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///main.dart:
+- Class.constGenerative (from org-dartlang-testcase:///patch_lib.dart:16:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/general/constructor_patch/main.dart.weak.outline.expect b/pkg/front_end/testcases/general/constructor_patch/main.dart.weak.outline.expect
new file mode 100644
index 0000000..d5e5658
--- /dev/null
+++ b/pkg/front_end/testcases/general/constructor_patch/main.dart.weak.outline.expect
@@ -0,0 +1,33 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+
+import "dart:test";
+
+static method main() → dynamic
+  ;
+
+library /*isNonNullableByDefault*/;
+import self as self2;
+import "dart:_internal" as _in;
+import "dart:core" as core;
+
+import "dart:_internal";
+
+@_in::patch
+class Class extends core::Object /*hasConstConstructor*/  {
+  final field core::bool defaultValue /* from org-dartlang-testcase:///patch_lib.dart */;
+  @_in::patch
+  external constructor generative({core::bool defaultValue}) → self2::Class
+    ;
+  @_in::patch
+  const constructor constGenerative({core::bool defaultValue = true}) → self2::Class
+    : self2::Class::defaultValue = defaultValue, super core::Object::•()
+    ;
+}
+
+
+Extra constant evaluation status:
+Evaluated: StaticGet @ org-dartlang-testcase:///origin_lib.dart:6:49 -> InstanceConstant(const _Patch{})
+Evaluated: StaticGet @ org-dartlang-testcase:///origin_lib.dart:7:44 -> InstanceConstant(const _Patch{})
+Evaluated: StaticGet @ org-dartlang-testcase:///patch_lib.dart:16:9 -> InstanceConstant(const _Patch{})
+Extra constant evaluation: evaluated: 4, effectively constant: 3
diff --git a/pkg/front_end/testcases/general/constructor_patch/main.dart.weak.transformed.expect b/pkg/front_end/testcases/general/constructor_patch/main.dart.weak.transformed.expect
new file mode 100644
index 0000000..40f37f3
--- /dev/null
+++ b/pkg/front_end/testcases/general/constructor_patch/main.dart.weak.transformed.expect
@@ -0,0 +1,42 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:test" as test;
+
+import "dart:test";
+
+static method main() → dynamic {
+  new test::Class::generative();
+  #C2;
+}
+
+library /*isNonNullableByDefault*/;
+import self as test;
+import "dart:_internal" as _in;
+import "dart:core" as core;
+
+import "dart:_internal";
+
+@#C3
+class Class extends core::Object /*hasConstConstructor*/  {
+  final field core::bool defaultValue /* from org-dartlang-testcase:///patch_lib.dart */;
+  @#C3
+  constructor generative({core::bool defaultValue = #C1}) → test::Class
+    : test::Class::defaultValue = defaultValue, super core::Object::•()
+    ;
+  @#C3
+  const constructor constGenerative({core::bool defaultValue = #C1}) → test::Class
+    : test::Class::defaultValue = defaultValue, super core::Object::•()
+    ;
+}
+
+constants  {
+  #C1 = true
+  #C2 = test::Class {defaultValue:#C1}
+  #C3 = _in::_Patch {}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///main.dart:
+- Class.constGenerative (from org-dartlang-testcase:///patch_lib.dart:16:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/general/constructor_patch/origin_lib.dart b/pkg/front_end/testcases/general/constructor_patch/origin_lib.dart
new file mode 100644
index 0000000..2906fbf
--- /dev/null
+++ b/pkg/front_end/testcases/general/constructor_patch/origin_lib.dart
@@ -0,0 +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.
+
+class Class {
+  external Class.generative({bool defaultValue: true});
+  external const Class.constGenerative({bool defaultValue: true});
+}
diff --git a/pkg/front_end/testcases/general/constructor_patch/patch_lib.dart b/pkg/front_end/testcases/general/constructor_patch/patch_lib.dart
new file mode 100644
index 0000000..0c4899c
--- /dev/null
+++ b/pkg/front_end/testcases/general/constructor_patch/patch_lib.dart
@@ -0,0 +1,17 @@
+// Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// ignore: import_internal_library
+import 'dart:_internal';
+
+@patch
+class Class {
+  final bool defaultValue;
+
+  @patch
+  Class.generative({this.defaultValue: true});
+
+  @patch
+  const Class.constGenerative({this.defaultValue: true});
+}
diff --git a/pkg/front_end/testcases/general/factory_patch/main.dart.weak.expect b/pkg/front_end/testcases/general/factory_patch/main.dart.weak.expect
index f739cd9..3cddf53 100644
--- a/pkg/front_end/testcases/general/factory_patch/main.dart.weak.expect
+++ b/pkg/front_end/testcases/general/factory_patch/main.dart.weak.expect
@@ -9,6 +9,14 @@
 }
 
 library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/factory_patch/patch_lib.dart:22:52: Error: Can't have a default value here because any default values of 'Class._internal' would be used instead.
+// Try removing the default value.
+//   const factory Class.redirect({bool defaultValue: true}) = Class._internal;
+//                                                    ^
+//
 import self as test;
 import "dart:_internal" as _in;
 import "dart:core" as core;
@@ -18,6 +26,7 @@
 @#C1
 class Class extends core::Object {
   final field core::bool defaultValue /* from org-dartlang-testcase:///patch_lib.dart */;
+  static final field dynamic _redirecting# = <dynamic>[test::Class::redirect]/*isLegacy*/;
   const constructor _internal({core::bool defaultValue = #C2}) → test::Class
     : test::Class::defaultValue = defaultValue, super core::Object::•()
     ;
@@ -27,6 +36,9 @@
   @#C1
   static factory /* from org-dartlang-testcase:///patch_lib.dart */ constFact({core::bool defaultValue = #C3}) → test::Class
     return throw "unsupported";
+  @#C1
+  static factory /* from org-dartlang-testcase:///patch_lib.dart */ redirect({core::bool defaultValue = #C3}) → test::Class
+    let dynamic #redirecting_factory = test::Class::_internal in invalid-expression;
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/factory_patch/main.dart.weak.outline.expect b/pkg/front_end/testcases/general/factory_patch/main.dart.weak.outline.expect
index 25c2ffa..62a00f1 100644
--- a/pkg/front_end/testcases/general/factory_patch/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/factory_patch/main.dart.weak.outline.expect
@@ -16,6 +16,7 @@
 @_in::patch
 class Class extends core::Object {
   final field core::bool defaultValue /* from org-dartlang-testcase:///patch_lib.dart */;
+  static final field dynamic _redirecting# = <dynamic>[self2::Class::redirect]/*isLegacy*/;
   const constructor _internal({core::bool defaultValue = false}) → self2::Class
     : self2::Class::defaultValue = defaultValue, super core::Object::•()
     ;
@@ -23,6 +24,9 @@
   external static factory fact({core::bool defaultValue}) → self2::Class;
   @_in::patch
   external static factory constFact({core::bool defaultValue = true}) → self2::Class;
+  @_in::patch
+  static factory /* from org-dartlang-testcase:///patch_lib.dart */ redirect({core::bool defaultValue = true}) → self2::Class
+    let dynamic #redirecting_factory = self2::Class::_internal in invalid-expression;
 }
 
 
@@ -30,4 +34,5 @@
 Evaluated: StaticGet @ org-dartlang-testcase:///origin_lib.dart:6:49 -> InstanceConstant(const _Patch{})
 Evaluated: StaticGet @ org-dartlang-testcase:///origin_lib.dart:8:27 -> InstanceConstant(const _Patch{})
 Evaluated: StaticGet @ (unknown position in org-dartlang-testcase:///origin_lib.dart) -> InstanceConstant(const _Patch{})
-Extra constant evaluation: evaluated: 4, effectively constant: 3
+Evaluated: StaticGet @ org-dartlang-testcase:///patch_lib.dart:22:17 -> InstanceConstant(const _Patch{})
+Extra constant evaluation: evaluated: 9, effectively constant: 4
diff --git a/pkg/front_end/testcases/general/factory_patch/main.dart.weak.transformed.expect b/pkg/front_end/testcases/general/factory_patch/main.dart.weak.transformed.expect
index f739cd9..3cddf53 100644
--- a/pkg/front_end/testcases/general/factory_patch/main.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/factory_patch/main.dart.weak.transformed.expect
@@ -9,6 +9,14 @@
 }
 
 library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/factory_patch/patch_lib.dart:22:52: Error: Can't have a default value here because any default values of 'Class._internal' would be used instead.
+// Try removing the default value.
+//   const factory Class.redirect({bool defaultValue: true}) = Class._internal;
+//                                                    ^
+//
 import self as test;
 import "dart:_internal" as _in;
 import "dart:core" as core;
@@ -18,6 +26,7 @@
 @#C1
 class Class extends core::Object {
   final field core::bool defaultValue /* from org-dartlang-testcase:///patch_lib.dart */;
+  static final field dynamic _redirecting# = <dynamic>[test::Class::redirect]/*isLegacy*/;
   const constructor _internal({core::bool defaultValue = #C2}) → test::Class
     : test::Class::defaultValue = defaultValue, super core::Object::•()
     ;
@@ -27,6 +36,9 @@
   @#C1
   static factory /* from org-dartlang-testcase:///patch_lib.dart */ constFact({core::bool defaultValue = #C3}) → test::Class
     return throw "unsupported";
+  @#C1
+  static factory /* from org-dartlang-testcase:///patch_lib.dart */ redirect({core::bool defaultValue = #C3}) → test::Class
+    let dynamic #redirecting_factory = test::Class::_internal in invalid-expression;
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/general/factory_patch/origin_lib.dart b/pkg/front_end/testcases/general/factory_patch/origin_lib.dart
index e7895f2..300b31e 100644
--- a/pkg/front_end/testcases/general/factory_patch/origin_lib.dart
+++ b/pkg/front_end/testcases/general/factory_patch/origin_lib.dart
@@ -5,5 +5,5 @@
 class Class {
   external factory Class.fact({bool defaultValue: true});
   external const factory Class.constFact({bool defaultValue: true});
-  //external const factory Class.redirect({bool defaultValue: true});
+  external const factory Class.redirect({bool defaultValue: true});
 }
diff --git a/pkg/front_end/testcases/general/factory_patch/patch_lib.dart b/pkg/front_end/testcases/general/factory_patch/patch_lib.dart
index cfc2278..e1fe3fd 100644
--- a/pkg/front_end/testcases/general/factory_patch/patch_lib.dart
+++ b/pkg/front_end/testcases/general/factory_patch/patch_lib.dart
@@ -18,7 +18,6 @@
   @patch
   factory Class.constFact({bool defaultValue: true}) => throw 'unsupported';
 
-  /*@patch
-  const factory Class.redirect({bool defaultValue: true}) =
-      this._internal(defaultValue: defaultValue);*/
+  @patch
+  const factory Class.redirect({bool defaultValue: true}) = Class._internal;
 }
diff --git a/pkg/front_end/testcases/general/issue45101/main.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue45101/main.dart.weak.outline.expect
index c56c375..68f366e 100644
--- a/pkg/front_end/testcases/general/issue45101/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue45101/main.dart.weak.outline.expect
@@ -34,7 +34,7 @@
 class Array<T extends core::Object* = dynamic> extends core::Object {
   static final field dynamic _redirecting# = <dynamic>[self2::Array::•];
   @_in::patch
-  external static factory •<T extends core::Object* = dynamic>(core::int* foo) → self2::Array<self2::Array::•::T*>*
+  static factory /* from org-dartlang-testcase:///patch_lib.dart */ •<T extends core::Object* = dynamic>(core::int* foo) → self2::Array<self2::Array::•::T*>*
     let dynamic #redirecting_factory = self2::_ArraySize::• in let self2::Array::•::T* #typeArg0 = null in invalid-expression;
   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
@@ -52,5 +52,5 @@
 Extra constant evaluation status:
 Evaluated: StaticGet @ org-dartlang-testcase:///origin_lib.dart:10:1 -> InstanceConstant(const _Patch{})
 Evaluated: ConstructorInvocation @ (unknown position in org-dartlang-testcase:///origin_lib.dart) -> InstanceConstant(const pragma{pragma.name: "vm:entry-point", pragma.options: null})
-Evaluated: StaticGet @ (unknown position in org-dartlang-testcase:///origin_lib.dart) -> InstanceConstant(const _Patch{})
+Evaluated: StaticGet @ org-dartlang-testcase:///patch_lib.dart:14:17 -> InstanceConstant(const _Patch{})
 Extra constant evaluation: evaluated: 9, effectively constant: 3
diff --git a/pkg/front_end/testcases/outline.status b/pkg/front_end/testcases/outline.status
index 4f83215..a59e9fd 100644
--- a/pkg/front_end/testcases/outline.status
+++ b/pkg/front_end/testcases/outline.status
@@ -9,6 +9,7 @@
 extension_types/simple_method_resolution: ExpectationFileMismatchSerialized
 extension_types/simple_operator_resolution: ExpectationFileMismatchSerialized
 extension_types/simple_setter_resolution: ExpectationFileMismatchSerialized
+extension_types/simple_show_hide: ExpectationFileMismatchSerialized # Expected.
 general/abstract_members: TypeCheckError
 general/bug30695: TypeCheckError
 general/covariant_field: TypeCheckError
diff --git a/pkg/front_end/testcases/strong.status b/pkg/front_end/testcases/strong.status
index 130bcfb..7c958ce 100644
--- a/pkg/front_end/testcases/strong.status
+++ b/pkg/front_end/testcases/strong.status
@@ -21,6 +21,7 @@
 extension_types/simple_method_resolution: ExpectationFileMismatchSerialized # Expected.
 extension_types/simple_operator_resolution: ExpectationFileMismatchSerialized # Expected.
 extension_types/simple_setter_resolution: ExpectationFileMismatchSerialized # Expected.
+extension_types/simple_show_hide: ExpectationFileMismatchSerialized # Expected.
 late_lowering/covariant_late_field: TypeCheckError
 nnbd/covariant_late_field: TypeCheckError
 nnbd/getter_vs_setter_type: TypeCheckError
diff --git a/pkg/front_end/testcases/text_serialization.status b/pkg/front_end/testcases/text_serialization.status
index bf8ca1a..9f5f24a 100644
--- a/pkg/front_end/testcases/text_serialization.status
+++ b/pkg/front_end/testcases/text_serialization.status
@@ -19,6 +19,7 @@
 extension_types/simple_method_resolution: ExpectationFileMismatchSerialized # Expected.
 extension_types/simple_operator_resolution: ExpectationFileMismatchSerialized # Expected.
 extension_types/simple_setter_resolution: ExpectationFileMismatchSerialized # Expected.
+extension_types/simple_show_hide: ExpectationFileMismatchSerialized # Expected.
 extensions/extension_setter_error: TypeCheckError
 extensions/instance_access_of_static: RuntimeError
 extensions/invalid_explicit_access: RuntimeError
diff --git a/pkg/front_end/testcases/textual_outline.status b/pkg/front_end/testcases/textual_outline.status
index 2029725..ed0e7e4 100644
--- a/pkg/front_end/testcases/textual_outline.status
+++ b/pkg/front_end/testcases/textual_outline.status
@@ -52,6 +52,7 @@
 extension_types/simple_method_resolution: FormatterCrash
 extension_types/simple_operator_resolution: FormatterCrash
 extension_types/simple_setter_resolution: FormatterCrash
+extension_types/simple_show_hide: FormatterCrash
 extensions/extension_constructor: FormatterCrash
 extensions/extension_field_with_type_parameter_usage: FormatterCrash
 extensions/issue38600: FormatterCrash
diff --git a/pkg/front_end/testcases/weak.status b/pkg/front_end/testcases/weak.status
index f6c24b7..803d18f 100644
--- a/pkg/front_end/testcases/weak.status
+++ b/pkg/front_end/testcases/weak.status
@@ -24,6 +24,7 @@
 extension_types/simple_method_resolution: ExpectationFileMismatchSerialized # Expected.
 extension_types/simple_operator_resolution: ExpectationFileMismatchSerialized # Expected.
 extension_types/simple_setter_resolution: ExpectationFileMismatchSerialized # Expected.
+extension_types/simple_show_hide: ExpectationFileMismatchSerialized # Expected.
 extensions/extension_setter_error: TypeCheckError
 extensions/instance_access_of_static: RuntimeError
 extensions/invalid_explicit_access: RuntimeError
diff --git a/pkg/front_end/tool/dart_doctest_impl.dart b/pkg/front_end/tool/dart_doctest_impl.dart
index 3051c00e..38e9a55 100644
--- a/pkg/front_end/tool/dart_doctest_impl.dart
+++ b/pkg/front_end/tool/dart_doctest_impl.dart
@@ -789,7 +789,7 @@
       LibraryBuilder libraryBuilder = userCode!.loader
           .read(libraryUri, -1, accessor: userCode!.loader.first);
 
-      userCode!.loader.seenMessages.clear();
+      userCode!.loader.resetSeenMessages();
 
       _dartDocTestLibraryBuilder = libraryBuilder;
       _dartDocTestCode = dartDocTestCode;
diff --git a/tools/VERSION b/tools/VERSION
index 7e3201e..79fac53 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 14
 PATCH 0
-PRERELEASE 367
+PRERELEASE 368
 PRERELEASE_PATCH 0
\ No newline at end of file