diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
index e8ab694..e2be4ca 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
@@ -335,6 +335,7 @@
       computeCoreTypes();
       loader.buildClassHierarchy(myClasses, objectClassBuilder);
       loader.computeHierarchy();
+      loader.computeShowHideElements();
       loader.installTypedefTearOffs();
       loader.performTopLevelInference(myClasses);
       loader.checkSupertypes(myClasses);
diff --git a/pkg/front_end/lib/src/fasta/source/outline_builder.dart b/pkg/front_end/lib/src/fasta/source/outline_builder.dart
index 1666eb8..e7f8197 100644
--- a/pkg/front_end/lib/src/fasta/source/outline_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/outline_builder.dart
@@ -909,16 +909,32 @@
       ValueKinds.MetadataListOrNull
     ]));
     debugEvent("endExtensionDeclaration");
-    pop() as List<TypeBuilder>?; // Type elements of the 'hide' clause.
-    pop() as List<String>?; // Getter elements of the 'hide' clause.
-    pop() as List<String>?; // Member or type elements of the 'hide' clause.
-    pop() as List<String>?; // Setter elements of the 'hide' clause.
-    pop() as List<Operator>?; // Operator elements of the 'hide' clause.
-    pop() as List<TypeBuilder>?; // Type elements of the 'show' clause.
-    pop() as List<String>?; // Getter elements of the 'show' clause.
-    pop() as List<String>?; // Member or type elements of the 'show' clause.
-    pop() as List<String>?; // Setter elements of the 'show' clause.
-    pop() as List<Operator>?; // Operator elements of the 'show' clause.
+
+    List<TypeBuilder>? hiddenSupertypes = pop() as List<TypeBuilder>?;
+    List<String>? hiddenGetters = pop() as List<String>?;
+    List<String>? hiddenMembersOrTypes = pop() as List<String>?;
+    List<String>? hiddenSetters = pop() as List<String>?;
+    List<Operator>? hiddenOperators = pop() as List<Operator>?;
+
+    List<TypeBuilder>? shownSupertypes = pop() as List<TypeBuilder>?;
+    List<String>? shownGetters = pop() as List<String>?;
+    List<String>? shownMembersOrTypes = pop() as List<String>?;
+    List<String>? shownSetters = pop() as List<String>?;
+    List<Operator>? shownOperators = pop() as List<Operator>?;
+
+    ExtensionTypeShowHideClauseBuilder extensionTypeShowHideClauseBuilder =
+        new ExtensionTypeShowHideClauseBuilder(
+            shownSupertypes: shownSupertypes ?? const <TypeBuilder>[],
+            shownGetters: shownGetters ?? const <String>[],
+            shownSetters: shownSetters ?? const <String>[],
+            shownMembersOrTypes: shownMembersOrTypes ?? const <String>[],
+            shownOperators: shownOperators ?? const <Operator>[],
+            hiddenSupertypes: hiddenSupertypes ?? const <TypeBuilder>[],
+            hiddenGetters: hiddenGetters ?? const <String>[],
+            hiddenSetters: hiddenSetters ?? const <String>[],
+            hiddenMembersOrTypes: hiddenMembersOrTypes ?? const <String>[],
+            hiddenOperators: hiddenOperators ?? const <Operator>[]);
+
     if (showKeyword != null && !libraryBuilder.enableExtensionTypesInLibrary) {
       addProblem(
           templateExperimentNotEnabled.withArguments('extension-types',
@@ -962,6 +978,7 @@
         name,
         typeVariables,
         onType as TypeBuilder,
+        extensionTypeShowHideClauseBuilder,
         isExtensionTypeDeclaration,
         startOffset,
         nameOffset,
diff --git a/pkg/front_end/lib/src/fasta/source/source_extension_builder.dart b/pkg/front_end/lib/src/fasta/source/source_extension_builder.dart
index 180e20c..763ce00 100644
--- a/pkg/front_end/lib/src/fasta/source/source_extension_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_extension_builder.dart
@@ -28,6 +28,8 @@
 
 import '../kernel/kernel_helper.dart';
 
+import '../operator.dart';
+
 import '../problems.dart';
 
 import '../scope.dart';
@@ -50,12 +52,15 @@
   @override
   final TypeBuilder onType;
 
+  final ExtensionTypeShowHideClauseBuilder extensionTypeShowHideClauseBuilder;
+
   SourceExtensionBuilder(
       List<MetadataBuilder>? metadata,
       int modifiers,
       String name,
       this.typeParameters,
       this.onType,
+      this.extensionTypeShowHideClauseBuilder,
       Scope scope,
       SourceLibraryBuilder parent,
       bool isExtensionTypeDeclaration,
@@ -94,6 +99,8 @@
       SourceLibraryBuilder libraryBuilder, LibraryBuilder coreLibrary,
       {required bool addMembersToLibrary}) {
     _extension.onType = onType.build(libraryBuilder);
+    extensionTypeShowHideClauseBuilder.buildAndStoreTypes(
+        _extension, libraryBuilder);
 
     SourceLibraryBuilder.checkMemberConflicts(library, scope,
         checkForInstanceVsStaticConflict: true,
@@ -296,3 +303,45 @@
     scope.forEach(build);
   }
 }
+
+class ExtensionTypeShowHideClauseBuilder {
+  final List<TypeBuilder> shownSupertypes;
+  final List<String> shownGetters;
+  final List<String> shownSetters;
+  final List<String> shownMembersOrTypes;
+  final List<Operator> shownOperators;
+
+  final List<TypeBuilder> hiddenSupertypes;
+  final List<String> hiddenGetters;
+  final List<String> hiddenSetters;
+  final List<String> hiddenMembersOrTypes;
+  final List<Operator> hiddenOperators;
+
+  ExtensionTypeShowHideClauseBuilder(
+      {required this.shownSupertypes,
+      required this.shownGetters,
+      required this.shownSetters,
+      required this.shownMembersOrTypes,
+      required this.shownOperators,
+      required this.hiddenSupertypes,
+      required this.hiddenGetters,
+      required this.hiddenSetters,
+      required this.hiddenMembersOrTypes,
+      required this.hiddenOperators});
+
+  void buildAndStoreTypes(Extension extension, LibraryBuilder libraryBuilder) {
+    List<Supertype> builtShownSupertypes = shownSupertypes
+        .map(
+            (t) => t.buildSupertype(libraryBuilder, t.charOffset!, t.fileUri!)!)
+        .toList();
+    List<Supertype> builtHiddenSupertypes = hiddenSupertypes
+        .map(
+            (t) => t.buildSupertype(libraryBuilder, t.charOffset!, t.fileUri!)!)
+        .toList();
+    ExtensionTypeShowHideClause showHideClause =
+        extension.showHideClause ?? new ExtensionTypeShowHideClause();
+    showHideClause.shownSupertypes.addAll(builtShownSupertypes);
+    showHideClause.hiddenSupertypes.addAll(builtHiddenSupertypes);
+    extension.showHideClause ??= showHideClause;
+  }
+}
diff --git a/pkg/front_end/lib/src/fasta/source/source_library_builder.dart b/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
index 76d8d26..ddbe0bb 100644
--- a/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
@@ -81,6 +81,8 @@
 
 import '../import.dart' show Import;
 
+import '../kernel/class_hierarchy_builder.dart';
+
 import '../kernel/internal_ast.dart';
 
 import '../kernel/kernel_builder.dart'
@@ -116,6 +118,8 @@
 
 import '../names.dart' show indexSetName;
 
+import '../operator.dart';
+
 import '../problems.dart' show unexpected, unhandled;
 
 import '../scope.dart';
@@ -124,7 +128,7 @@
 
 import 'name_scheme.dart';
 import 'source_class_builder.dart' show SourceClassBuilder;
-import 'source_extension_builder.dart' show SourceExtensionBuilder;
+import 'source_extension_builder.dart';
 import 'source_loader.dart' show SourceLoader;
 import 'source_type_alias_builder.dart';
 
@@ -892,7 +896,7 @@
       // name is unique. Only the first of duplicate extensions is accessible
       // by name or by resolution and the remaining are dropped for the output.
       currentTypeParameterScopeBuilder.extensions!
-          .add(declaration as ExtensionBuilder);
+          .add(declaration as SourceExtensionBuilder);
     }
     if (declaration is PrefixBuilder) {
       _prefixBuilders ??= <PrefixBuilder>[];
@@ -1845,6 +1849,7 @@
       String extensionName,
       List<TypeVariableBuilder>? typeVariables,
       TypeBuilder type,
+      ExtensionTypeShowHideClauseBuilder extensionTypeShowHideClauseBuilder,
       bool isExtensionTypeDeclaration,
       int startOffset,
       int nameOffset,
@@ -1877,6 +1882,7 @@
         extensionName,
         typeVariables,
         type,
+        extensionTypeShowHideClauseBuilder,
         classScope,
         this,
         isExtensionTypeDeclaration,
@@ -4154,6 +4160,213 @@
     checkUncheckedTypedefTypes(typeEnvironment);
   }
 
+  void computeShowHideElements(ClassHierarchyBuilder hierarchy) {
+    assert(currentTypeParameterScopeBuilder.kind ==
+        TypeParameterScopeKind.library);
+    for (SourceExtensionBuilder extensionBuilder
+        in currentTypeParameterScopeBuilder.extensions!) {
+      DartType onType = extensionBuilder.extension.onType;
+      if (onType is InterfaceType) {
+        ExtensionTypeShowHideClause showHideClause =
+            extensionBuilder.extension.showHideClause ??
+                new ExtensionTypeShowHideClause();
+
+        // TODO(dmitryas): Handle private names.
+        List<Supertype> supertypes =
+            hierarchy.getNodeFromClass(onType.classNode).superclasses;
+        Map<String, Supertype> supertypesByName = <String, Supertype>{};
+        for (Supertype supertype in supertypes) {
+          // TODO(dmitryas): Should only non-generic supertypes be allowed?
+          supertypesByName[supertype.classNode.name] = supertype;
+        }
+
+        // Handling elements of the 'show' clause.
+        for (String memberOrTypeName in extensionBuilder
+            .extensionTypeShowHideClauseBuilder.shownMembersOrTypes) {
+          Member? getableMember = hierarchy.getInterfaceMember(
+              onType.classNode, new Name(memberOrTypeName));
+          if (getableMember != null) {
+            if (getableMember is Field) {
+              showHideClause.shownGetters.add(getableMember.getterReference);
+            } else if (getableMember.hasGetter) {
+              showHideClause.shownGetters.add(getableMember.reference);
+            }
+          }
+          if (getableMember is Procedure &&
+              getableMember.kind == ProcedureKind.Method) {
+            showHideClause.shownMethods.add(getableMember.reference);
+          }
+          Member? setableMember = hierarchy.getInterfaceMember(
+              onType.classNode, new Name(memberOrTypeName),
+              setter: true);
+          if (setableMember != null) {
+            if (setableMember is Field) {
+              if (setableMember.setterReference != null) {
+                showHideClause.shownSetters.add(setableMember.setterReference!);
+              } else {
+                // TODO(dmitryas): Report an error.
+              }
+            } else if (setableMember.hasSetter) {
+              showHideClause.shownSetters.add(setableMember.reference);
+            } else {
+              // TODO(dmitryas): Report an error.
+            }
+          }
+          if (getableMember == null && setableMember == null) {
+            if (supertypesByName.containsKey(memberOrTypeName)) {
+              showHideClause.shownSupertypes
+                  .add(supertypesByName[memberOrTypeName]!);
+            } else {
+              // TODO(dmitryas): Report an error.
+            }
+          }
+        }
+        for (String getterName in extensionBuilder
+            .extensionTypeShowHideClauseBuilder.shownGetters) {
+          Member? member = hierarchy.getInterfaceMember(
+              onType.classNode, new Name(getterName));
+          if (member != null) {
+            if (member is Field) {
+              showHideClause.shownGetters.add(member.getterReference);
+            } else if (member.hasGetter) {
+              showHideClause.shownGetters.add(member.reference);
+            } else {
+              // TODO(dmitryas): Handle the erroneous case.
+            }
+          } else {
+            // TODO(dmitryas): Handle the erroneous case.
+          }
+        }
+        for (String setterName in extensionBuilder
+            .extensionTypeShowHideClauseBuilder.shownSetters) {
+          Member? member = hierarchy.getInterfaceMember(
+              onType.classNode, new Name(setterName),
+              setter: true);
+          if (member != null) {
+            if (member is Field) {
+              if (member.setterReference != null) {
+                showHideClause.shownSetters.add(member.setterReference!);
+              } else {
+                // TODO(dmitryas): Report an error.
+              }
+            } else if (member.hasSetter) {
+              showHideClause.shownSetters.add(member.reference);
+            } else {
+              // TODO(dmitryas): Report an error.
+            }
+          } else {
+            // TODO(dmitryas): Search for a non-setter and report an error.
+          }
+        }
+        for (Operator operator in extensionBuilder
+            .extensionTypeShowHideClauseBuilder.shownOperators) {
+          Member? member = hierarchy.getInterfaceMember(
+              onType.classNode, new Name(operatorToString(operator)));
+          if (member != null) {
+            showHideClause.shownOperators.add(member.reference);
+          } else {
+            // TODO(dmitryas): Handle the erroneous case.
+          }
+        }
+
+        // TODO(dmitryas): Add a helper function to share logic between
+        // handling the 'show' and 'hide' parts.
+
+        // Handling elements of the 'hide' clause.
+        for (String memberOrTypeName in extensionBuilder
+            .extensionTypeShowHideClauseBuilder.hiddenMembersOrTypes) {
+          Member? getableMember = hierarchy.getInterfaceMember(
+              onType.classNode, new Name(memberOrTypeName));
+          if (getableMember != null) {
+            if (getableMember is Field) {
+              showHideClause.hiddenGetters.add(getableMember.getterReference);
+            } else if (getableMember.hasGetter) {
+              showHideClause.hiddenGetters.add(getableMember.reference);
+            }
+          }
+          if (getableMember is Procedure &&
+              getableMember.kind == ProcedureKind.Method) {
+            showHideClause.hiddenMethods.add(getableMember.reference);
+          }
+          Member? setableMember = hierarchy.getInterfaceMember(
+              onType.classNode, new Name(memberOrTypeName),
+              setter: true);
+          if (setableMember != null) {
+            if (setableMember is Field) {
+              if (setableMember.setterReference != null) {
+                showHideClause.hiddenSetters
+                    .add(setableMember.setterReference!);
+              } else {
+                // TODO(dmitryas): Report an error.
+              }
+            } else if (setableMember.hasSetter) {
+              showHideClause.hiddenSetters.add(setableMember.reference);
+            } else {
+              // TODO(dmitryas): Report an error.
+            }
+          }
+          if (getableMember == null && setableMember == null) {
+            if (supertypesByName.containsKey(memberOrTypeName)) {
+              showHideClause.hiddenSupertypes
+                  .add(supertypesByName[memberOrTypeName]!);
+            } else {
+              // TODO(dmitryas): Report an error.
+            }
+          }
+        }
+        for (String getterName in extensionBuilder
+            .extensionTypeShowHideClauseBuilder.hiddenGetters) {
+          Member? member = hierarchy.getInterfaceMember(
+              onType.classNode, new Name(getterName));
+          if (member != null) {
+            if (member is Field) {
+              showHideClause.hiddenGetters.add(member.getterReference);
+            } else if (member.hasGetter) {
+              showHideClause.hiddenGetters.add(member.reference);
+            } else {
+              // TODO(dmitryas): Handle the erroneous case.
+            }
+          } else {
+            // TODO(dmitryas): Handle the erroneous case.
+          }
+        }
+        for (String setterName in extensionBuilder
+            .extensionTypeShowHideClauseBuilder.hiddenSetters) {
+          Member? member = hierarchy.getInterfaceMember(
+              onType.classNode, new Name(setterName),
+              setter: true);
+          if (member != null) {
+            if (member is Field) {
+              if (member.setterReference != null) {
+                showHideClause.hiddenSetters.add(member.setterReference!);
+              } else {
+                // TODO(dmitryas): Report an error.
+              }
+            } else if (member.hasSetter) {
+              showHideClause.hiddenSetters.add(member.reference);
+            } else {
+              // TODO(dmitryas): Report an error.
+            }
+          } else {
+            // TODO(dmitryas): Search for a non-setter and report an error.
+          }
+        }
+        for (Operator operator in extensionBuilder
+            .extensionTypeShowHideClauseBuilder.hiddenOperators) {
+          Member? member = hierarchy.getInterfaceMember(
+              onType.classNode, new Name(operatorToString(operator)));
+          if (member != null) {
+            showHideClause.hiddenOperators.add(member.reference);
+          } else {
+            // TODO(dmitryas): Handle the erroneous case.
+          }
+        }
+
+        extensionBuilder.extension.showHideClause ??= showHideClause;
+      }
+    }
+  }
+
   void registerImplicitlyTypedField(FieldBuilder fieldBuilder) {
     (_implicitlyTypedFields ??= <FieldBuilder>[]).add(fieldBuilder);
   }
@@ -4279,7 +4492,7 @@
 
   final Map<String, MemberBuilder>? setters;
 
-  final Set<ExtensionBuilder>? extensions;
+  final Set<SourceExtensionBuilder>? extensions;
 
   final List<UnresolvedType> types = <UnresolvedType>[];
 
@@ -4320,7 +4533,7 @@
             <String, Builder>{},
             <String, MemberBuilder>{},
             null, // No support for constructors in library scopes.
-            <ExtensionBuilder>{},
+            <SourceExtensionBuilder>{},
             "<library>",
             -1,
             null);
diff --git a/pkg/front_end/lib/src/fasta/source/source_loader.dart b/pkg/front_end/lib/src/fasta/source/source_loader.dart
index 35bf322..fc624e3 100644
--- a/pkg/front_end/lib/src/fasta/source/source_loader.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_loader.dart
@@ -1098,6 +1098,16 @@
     ticker.logMs("Computed class hierarchy");
   }
 
+  void computeShowHideElements() {
+    for (LibraryBuilder libraryBuilder in builders.values) {
+      if (libraryBuilder.loader == this &&
+          libraryBuilder is SourceLibraryBuilder) {
+        libraryBuilder.computeShowHideElements(_builderHierarchy!);
+      }
+    }
+    ticker.logMs("Computed show and hide elements");
+  }
+
   void handleAmbiguousSupertypes(Class cls, Supertype a, Supertype b) {
     addProblem(
         templateAmbiguousSupertypes.withArguments(cls.name, a.asInterfaceType,
diff --git a/pkg/front_end/test/spell_checking_list_code.txt b/pkg/front_end/test/spell_checking_list_code.txt
index fe6e872..1197e88 100644
--- a/pkg/front_end/test/spell_checking_list_code.txt
+++ b/pkg/front_end/test/spell_checking_list_code.txt
@@ -501,6 +501,7 @@
 gen
 generation
 getable
+getable
 getables
 gets
 getter1a
@@ -959,6 +960,7 @@
 quick
 quiver
 quoted
+qux
 r
 r'$creation
 r'\f
@@ -1110,6 +1112,7 @@
 service
 session
 setable
+setable
 setables
 setaf
 sh
diff --git a/pkg/front_end/testcases/extension_types/basic_show.dart.strong.expect b/pkg/front_end/testcases/extension_types/basic_show.dart.strong.expect
index 2777045..35387e0 100644
--- a/pkg/front_end/testcases/extension_types/basic_show.dart.strong.expect
+++ b/pkg/front_end/testcases/extension_types/basic_show.dart.strong.expect
@@ -30,15 +30,15 @@
 import self as self;
 import "dart:core" as core;
 
-extension E1 on core::int {
+extension E1 on core::int show-types core::num {
 }
 extension E2 on core::int {
 }
 extension E3 on core::int {
 }
-extension E4 on core::int {
+extension E4 on core::int show-types core::num {
 }
-extension E5 on core::int {
+extension E5 on core::int show-types core::num {
 }
 extension E6 on core::int {
 }
diff --git a/pkg/front_end/testcases/extension_types/basic_show.dart.strong.transformed.expect b/pkg/front_end/testcases/extension_types/basic_show.dart.strong.transformed.expect
index 2777045..35387e0 100644
--- a/pkg/front_end/testcases/extension_types/basic_show.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extension_types/basic_show.dart.strong.transformed.expect
@@ -30,15 +30,15 @@
 import self as self;
 import "dart:core" as core;
 
-extension E1 on core::int {
+extension E1 on core::int show-types core::num {
 }
 extension E2 on core::int {
 }
 extension E3 on core::int {
 }
-extension E4 on core::int {
+extension E4 on core::int show-types core::num {
 }
-extension E5 on core::int {
+extension E5 on core::int show-types core::num {
 }
 extension E6 on core::int {
 }
diff --git a/pkg/front_end/testcases/extension_types/basic_show.dart.weak.expect b/pkg/front_end/testcases/extension_types/basic_show.dart.weak.expect
index 2777045..35387e0 100644
--- a/pkg/front_end/testcases/extension_types/basic_show.dart.weak.expect
+++ b/pkg/front_end/testcases/extension_types/basic_show.dart.weak.expect
@@ -30,15 +30,15 @@
 import self as self;
 import "dart:core" as core;
 
-extension E1 on core::int {
+extension E1 on core::int show-types core::num {
 }
 extension E2 on core::int {
 }
 extension E3 on core::int {
 }
-extension E4 on core::int {
+extension E4 on core::int show-types core::num {
 }
-extension E5 on core::int {
+extension E5 on core::int show-types core::num {
 }
 extension E6 on core::int {
 }
diff --git a/pkg/front_end/testcases/extension_types/basic_show.dart.weak.outline.expect b/pkg/front_end/testcases/extension_types/basic_show.dart.weak.outline.expect
index cabf277..c6612b3 100644
--- a/pkg/front_end/testcases/extension_types/basic_show.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extension_types/basic_show.dart.weak.outline.expect
@@ -30,15 +30,15 @@
 import self as self;
 import "dart:core" as core;
 
-extension E1 on core::int {
+extension E1 on core::int show-types core::num {
 }
 extension E2 on core::int {
 }
 extension E3 on core::int {
 }
-extension E4 on core::int {
+extension E4 on core::int show-types core::num {
 }
-extension E5 on core::int {
+extension E5 on core::int show-types core::num {
 }
 extension E6 on core::int {
 }
diff --git a/pkg/front_end/testcases/extension_types/basic_show.dart.weak.transformed.expect b/pkg/front_end/testcases/extension_types/basic_show.dart.weak.transformed.expect
index 2777045..35387e0 100644
--- a/pkg/front_end/testcases/extension_types/basic_show.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extension_types/basic_show.dart.weak.transformed.expect
@@ -30,15 +30,15 @@
 import self as self;
 import "dart:core" as core;
 
-extension E1 on core::int {
+extension E1 on core::int show-types core::num {
 }
 extension E2 on core::int {
 }
 extension E3 on core::int {
 }
-extension E4 on core::int {
+extension E4 on core::int show-types core::num {
 }
-extension E5 on core::int {
+extension E5 on core::int show-types core::num {
 }
 extension E6 on core::int {
 }
diff --git a/pkg/front_end/testcases/extension_types/keyword_in_show_hide_element.dart.strong.expect b/pkg/front_end/testcases/extension_types/keyword_in_show_hide_element.dart.strong.expect
index 02b44ca..6111f5a 100644
--- a/pkg/front_end/testcases/extension_types/keyword_in_show_hide_element.dart.strong.expect
+++ b/pkg/front_end/testcases/extension_types/keyword_in_show_hide_element.dart.strong.expect
@@ -9,8 +9,8 @@
   method mixin() → void {}
   method as() → void {}
 }
-extension type E1 on self::A {
+extension type E1 on self::A show-methods self::A::as, self::A::mixin show-getters self::A::as, self::A::mixin {
 }
-extension type E2 on self::A {
+extension type E2 on self::A hide-methods self::A::as, self::A::mixin hide-getters self::A::as, self::A::mixin {
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extension_types/keyword_in_show_hide_element.dart.strong.transformed.expect b/pkg/front_end/testcases/extension_types/keyword_in_show_hide_element.dart.strong.transformed.expect
index 02b44ca..6111f5a 100644
--- a/pkg/front_end/testcases/extension_types/keyword_in_show_hide_element.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extension_types/keyword_in_show_hide_element.dart.strong.transformed.expect
@@ -9,8 +9,8 @@
   method mixin() → void {}
   method as() → void {}
 }
-extension type E1 on self::A {
+extension type E1 on self::A show-methods self::A::as, self::A::mixin show-getters self::A::as, self::A::mixin {
 }
-extension type E2 on self::A {
+extension type E2 on self::A hide-methods self::A::as, self::A::mixin hide-getters self::A::as, self::A::mixin {
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extension_types/keyword_in_show_hide_element.dart.weak.expect b/pkg/front_end/testcases/extension_types/keyword_in_show_hide_element.dart.weak.expect
index 02b44ca..6111f5a 100644
--- a/pkg/front_end/testcases/extension_types/keyword_in_show_hide_element.dart.weak.expect
+++ b/pkg/front_end/testcases/extension_types/keyword_in_show_hide_element.dart.weak.expect
@@ -9,8 +9,8 @@
   method mixin() → void {}
   method as() → void {}
 }
-extension type E1 on self::A {
+extension type E1 on self::A show-methods self::A::as, self::A::mixin show-getters self::A::as, self::A::mixin {
 }
-extension type E2 on self::A {
+extension type E2 on self::A hide-methods self::A::as, self::A::mixin hide-getters self::A::as, self::A::mixin {
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extension_types/keyword_in_show_hide_element.dart.weak.outline.expect b/pkg/front_end/testcases/extension_types/keyword_in_show_hide_element.dart.weak.outline.expect
index 4149c70..a2e4d10 100644
--- a/pkg/front_end/testcases/extension_types/keyword_in_show_hide_element.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extension_types/keyword_in_show_hide_element.dart.weak.outline.expect
@@ -10,9 +10,9 @@
   method as() → void
     ;
 }
-extension type E1 on self::A {
+extension type E1 on self::A show-methods self::A::as, self::A::mixin show-getters self::A::as, self::A::mixin {
 }
-extension type E2 on self::A {
+extension type E2 on self::A hide-methods self::A::as, self::A::mixin hide-getters self::A::as, self::A::mixin {
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/extension_types/keyword_in_show_hide_element.dart.weak.transformed.expect b/pkg/front_end/testcases/extension_types/keyword_in_show_hide_element.dart.weak.transformed.expect
index 02b44ca..6111f5a 100644
--- a/pkg/front_end/testcases/extension_types/keyword_in_show_hide_element.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extension_types/keyword_in_show_hide_element.dart.weak.transformed.expect
@@ -9,8 +9,8 @@
   method mixin() → void {}
   method as() → void {}
 }
-extension type E1 on self::A {
+extension type E1 on self::A show-methods self::A::as, self::A::mixin show-getters self::A::as, self::A::mixin {
 }
-extension type E2 on self::A {
+extension type E2 on self::A hide-methods self::A::as, self::A::mixin hide-getters self::A::as, self::A::mixin {
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extension_types/show_hide_all_kinds.dart b/pkg/front_end/testcases/extension_types/show_hide_all_kinds.dart
new file mode 100644
index 0000000..d26636c
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/show_hide_all_kinds.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.
+
+class A<X> {}
+class B<X> extends A<X> {}
+class C extends B<int> {}
+
+extension type E on C show B<int> hide A<int> {}
+
+class A2 {}
+class B2 extends A2 {}
+class C2 extends B2 {}
+
+extension type E2 on C2 show B2 hide A2 {}
+
+class A3 {
+  void foo() {}
+  int? field;
+  String? field2;
+  int get getter => 42;
+  void set setter(int value) {}
+  void set setter2(int value) {}
+  void set setter3(int value) {}
+  A3 operator +(A3 other) => other;
+  A3 operator *(A3 other) => this;
+}
+
+class B3 extends A3 {
+  void bar() {}
+}
+
+class C3 extends B3 {
+  void baz() {}
+}
+
+extension type E3 on C3
+  show B3, baz, field, setter, set field2, operator +
+  hide foo, get field, getter, setter2, set setter3, operator * {}
+
+main() {}
diff --git a/pkg/front_end/testcases/extension_types/show_hide_all_kinds.dart.strong.expect b/pkg/front_end/testcases/extension_types/show_hide_all_kinds.dart.strong.expect
new file mode 100644
index 0000000..ba0e4db
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/show_hide_all_kinds.dart.strong.expect
@@ -0,0 +1,70 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X%>
+    : super core::Object::•()
+    ;
+}
+class B<X extends core::Object? = dynamic> extends self::A<self::B::X%> {
+  synthetic constructor •() → self::B<self::B::X%>
+    : super self::A::•()
+    ;
+}
+class C extends self::B<core::int> {
+  synthetic constructor •() → self::C
+    : super self::B::•()
+    ;
+}
+class A2 extends core::Object {
+  synthetic constructor •() → self::A2
+    : super core::Object::•()
+    ;
+}
+class B2 extends self::A2 {
+  synthetic constructor •() → self::B2
+    : super self::A2::•()
+    ;
+}
+class C2 extends self::B2 {
+  synthetic constructor •() → self::C2
+    : super self::B2::•()
+    ;
+}
+class A3 extends core::Object {
+  field core::int? field = null;
+  field core::String? field2 = null;
+  synthetic constructor •() → self::A3
+    : super core::Object::•()
+    ;
+  method foo() → void {}
+  get getter() → core::int
+    return 42;
+  set setter(core::int value) → void {}
+  set setter2(core::int value) → void {}
+  set setter3(core::int value) → void {}
+  operator +(self::A3 other) → self::A3
+    return other;
+  operator *(self::A3 other) → self::A3
+    return this;
+}
+class B3 extends self::A3 {
+  synthetic constructor •() → self::B3
+    : super self::A3::•()
+    ;
+  method bar() → void {}
+}
+class C3 extends self::B3 {
+  synthetic constructor •() → self::C3
+    : super self::B3::•()
+    ;
+  method baz() → void {}
+}
+extension type E on self::C show-types self::B<core::int> hide-types self::A<core::int> {
+}
+extension type E2 on self::C2 show-types self::B2 hide-types self::A2 {
+}
+extension type E3 on self::C3 show-types self::B3 show-methods self::C3::baz show-getters self::A3::field, self::C3::baz show-setters self::A3::setter, self::A3::field, self::A3::field2 show-operators self::A3::+ hide-methods self::A3::foo hide-getters self::A3::getter, self::A3::foo, self::A3::field hide-setters self::A3::setter2, self::A3::setter3 hide-operators self::A3::* {
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extension_types/show_hide_all_kinds.dart.strong.transformed.expect b/pkg/front_end/testcases/extension_types/show_hide_all_kinds.dart.strong.transformed.expect
new file mode 100644
index 0000000..ba0e4db
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/show_hide_all_kinds.dart.strong.transformed.expect
@@ -0,0 +1,70 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X%>
+    : super core::Object::•()
+    ;
+}
+class B<X extends core::Object? = dynamic> extends self::A<self::B::X%> {
+  synthetic constructor •() → self::B<self::B::X%>
+    : super self::A::•()
+    ;
+}
+class C extends self::B<core::int> {
+  synthetic constructor •() → self::C
+    : super self::B::•()
+    ;
+}
+class A2 extends core::Object {
+  synthetic constructor •() → self::A2
+    : super core::Object::•()
+    ;
+}
+class B2 extends self::A2 {
+  synthetic constructor •() → self::B2
+    : super self::A2::•()
+    ;
+}
+class C2 extends self::B2 {
+  synthetic constructor •() → self::C2
+    : super self::B2::•()
+    ;
+}
+class A3 extends core::Object {
+  field core::int? field = null;
+  field core::String? field2 = null;
+  synthetic constructor •() → self::A3
+    : super core::Object::•()
+    ;
+  method foo() → void {}
+  get getter() → core::int
+    return 42;
+  set setter(core::int value) → void {}
+  set setter2(core::int value) → void {}
+  set setter3(core::int value) → void {}
+  operator +(self::A3 other) → self::A3
+    return other;
+  operator *(self::A3 other) → self::A3
+    return this;
+}
+class B3 extends self::A3 {
+  synthetic constructor •() → self::B3
+    : super self::A3::•()
+    ;
+  method bar() → void {}
+}
+class C3 extends self::B3 {
+  synthetic constructor •() → self::C3
+    : super self::B3::•()
+    ;
+  method baz() → void {}
+}
+extension type E on self::C show-types self::B<core::int> hide-types self::A<core::int> {
+}
+extension type E2 on self::C2 show-types self::B2 hide-types self::A2 {
+}
+extension type E3 on self::C3 show-types self::B3 show-methods self::C3::baz show-getters self::A3::field, self::C3::baz show-setters self::A3::setter, self::A3::field, self::A3::field2 show-operators self::A3::+ hide-methods self::A3::foo hide-getters self::A3::getter, self::A3::foo, self::A3::field hide-setters self::A3::setter2, self::A3::setter3 hide-operators self::A3::* {
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extension_types/show_hide_all_kinds.dart.textual_outline.expect b/pkg/front_end/testcases/extension_types/show_hide_all_kinds.dart.textual_outline.expect
new file mode 100644
index 0000000..0287eb2
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/show_hide_all_kinds.dart.textual_outline.expect
@@ -0,0 +1,27 @@
+class A<X> {}
+class B<X> extends A<X> {}
+class C extends B<int> {}
+extension type E on C show B<int> hide A<int> {}
+class A2 {}
+class B2 extends A2 {}
+class C2 extends B2 {}
+extension type E2 on C2 show B2 hide A2 {}
+class A3 {
+  void foo() {}
+  int? field;
+  String? field2;
+  int get getter => 42;
+  void set setter(int value) {}
+  void set setter2(int value) {}
+  void set setter3(int value) {}
+  A3 operator +(A3 other) => other;
+  A3 operator *(A3 other) => this;
+}
+class B3 extends A3 {
+  void bar() {}
+}
+class C3 extends B3 {
+  void baz() {}
+}
+extension type E3 on C3 show B3, baz, field, setter, set field2, operator + hide foo, get field, getter, setter2, set setter3, operator * {}
+main() {}
diff --git a/pkg/front_end/testcases/extension_types/show_hide_all_kinds.dart.weak.expect b/pkg/front_end/testcases/extension_types/show_hide_all_kinds.dart.weak.expect
new file mode 100644
index 0000000..ba0e4db
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/show_hide_all_kinds.dart.weak.expect
@@ -0,0 +1,70 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X%>
+    : super core::Object::•()
+    ;
+}
+class B<X extends core::Object? = dynamic> extends self::A<self::B::X%> {
+  synthetic constructor •() → self::B<self::B::X%>
+    : super self::A::•()
+    ;
+}
+class C extends self::B<core::int> {
+  synthetic constructor •() → self::C
+    : super self::B::•()
+    ;
+}
+class A2 extends core::Object {
+  synthetic constructor •() → self::A2
+    : super core::Object::•()
+    ;
+}
+class B2 extends self::A2 {
+  synthetic constructor •() → self::B2
+    : super self::A2::•()
+    ;
+}
+class C2 extends self::B2 {
+  synthetic constructor •() → self::C2
+    : super self::B2::•()
+    ;
+}
+class A3 extends core::Object {
+  field core::int? field = null;
+  field core::String? field2 = null;
+  synthetic constructor •() → self::A3
+    : super core::Object::•()
+    ;
+  method foo() → void {}
+  get getter() → core::int
+    return 42;
+  set setter(core::int value) → void {}
+  set setter2(core::int value) → void {}
+  set setter3(core::int value) → void {}
+  operator +(self::A3 other) → self::A3
+    return other;
+  operator *(self::A3 other) → self::A3
+    return this;
+}
+class B3 extends self::A3 {
+  synthetic constructor •() → self::B3
+    : super self::A3::•()
+    ;
+  method bar() → void {}
+}
+class C3 extends self::B3 {
+  synthetic constructor •() → self::C3
+    : super self::B3::•()
+    ;
+  method baz() → void {}
+}
+extension type E on self::C show-types self::B<core::int> hide-types self::A<core::int> {
+}
+extension type E2 on self::C2 show-types self::B2 hide-types self::A2 {
+}
+extension type E3 on self::C3 show-types self::B3 show-methods self::C3::baz show-getters self::A3::field, self::C3::baz show-setters self::A3::setter, self::A3::field, self::A3::field2 show-operators self::A3::+ hide-methods self::A3::foo hide-getters self::A3::getter, self::A3::foo, self::A3::field hide-setters self::A3::setter2, self::A3::setter3 hide-operators self::A3::* {
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extension_types/show_hide_all_kinds.dart.weak.outline.expect b/pkg/front_end/testcases/extension_types/show_hide_all_kinds.dart.weak.outline.expect
new file mode 100644
index 0000000..4ddfe41
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/show_hide_all_kinds.dart.weak.outline.expect
@@ -0,0 +1,68 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X%>
+    ;
+}
+class B<X extends core::Object? = dynamic> extends self::A<self::B::X%> {
+  synthetic constructor •() → self::B<self::B::X%>
+    ;
+}
+class C extends self::B<core::int> {
+  synthetic constructor •() → self::C
+    ;
+}
+class A2 extends core::Object {
+  synthetic constructor •() → self::A2
+    ;
+}
+class B2 extends self::A2 {
+  synthetic constructor •() → self::B2
+    ;
+}
+class C2 extends self::B2 {
+  synthetic constructor •() → self::C2
+    ;
+}
+class A3 extends core::Object {
+  field core::int? field;
+  field core::String? field2;
+  synthetic constructor •() → self::A3
+    ;
+  method foo() → void
+    ;
+  get getter() → core::int
+    ;
+  set setter(core::int value) → void
+    ;
+  set setter2(core::int value) → void
+    ;
+  set setter3(core::int value) → void
+    ;
+  operator +(self::A3 other) → self::A3
+    ;
+  operator *(self::A3 other) → self::A3
+    ;
+}
+class B3 extends self::A3 {
+  synthetic constructor •() → self::B3
+    ;
+  method bar() → void
+    ;
+}
+class C3 extends self::B3 {
+  synthetic constructor •() → self::C3
+    ;
+  method baz() → void
+    ;
+}
+extension type E on self::C show-types self::B<core::int> hide-types self::A<core::int> {
+}
+extension type E2 on self::C2 show-types self::B2 hide-types self::A2 {
+}
+extension type E3 on self::C3 show-types self::B3 show-methods self::C3::baz show-getters self::A3::field, self::C3::baz show-setters self::A3::setter, self::A3::field, self::A3::field2 show-operators self::A3::+ hide-methods self::A3::foo hide-getters self::A3::getter, self::A3::foo, self::A3::field hide-setters self::A3::setter2, self::A3::setter3 hide-operators self::A3::* {
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/extension_types/show_hide_all_kinds.dart.weak.transformed.expect b/pkg/front_end/testcases/extension_types/show_hide_all_kinds.dart.weak.transformed.expect
new file mode 100644
index 0000000..ba0e4db
--- /dev/null
+++ b/pkg/front_end/testcases/extension_types/show_hide_all_kinds.dart.weak.transformed.expect
@@ -0,0 +1,70 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A<X extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::X%>
+    : super core::Object::•()
+    ;
+}
+class B<X extends core::Object? = dynamic> extends self::A<self::B::X%> {
+  synthetic constructor •() → self::B<self::B::X%>
+    : super self::A::•()
+    ;
+}
+class C extends self::B<core::int> {
+  synthetic constructor •() → self::C
+    : super self::B::•()
+    ;
+}
+class A2 extends core::Object {
+  synthetic constructor •() → self::A2
+    : super core::Object::•()
+    ;
+}
+class B2 extends self::A2 {
+  synthetic constructor •() → self::B2
+    : super self::A2::•()
+    ;
+}
+class C2 extends self::B2 {
+  synthetic constructor •() → self::C2
+    : super self::B2::•()
+    ;
+}
+class A3 extends core::Object {
+  field core::int? field = null;
+  field core::String? field2 = null;
+  synthetic constructor •() → self::A3
+    : super core::Object::•()
+    ;
+  method foo() → void {}
+  get getter() → core::int
+    return 42;
+  set setter(core::int value) → void {}
+  set setter2(core::int value) → void {}
+  set setter3(core::int value) → void {}
+  operator +(self::A3 other) → self::A3
+    return other;
+  operator *(self::A3 other) → self::A3
+    return this;
+}
+class B3 extends self::A3 {
+  synthetic constructor •() → self::B3
+    : super self::A3::•()
+    ;
+  method bar() → void {}
+}
+class C3 extends self::B3 {
+  synthetic constructor •() → self::C3
+    : super self::B3::•()
+    ;
+  method baz() → void {}
+}
+extension type E on self::C show-types self::B<core::int> hide-types self::A<core::int> {
+}
+extension type E2 on self::C2 show-types self::B2 hide-types self::A2 {
+}
+extension type E3 on self::C3 show-types self::B3 show-methods self::C3::baz show-getters self::A3::field, self::C3::baz show-setters self::A3::setter, self::A3::field, self::A3::field2 show-operators self::A3::+ hide-methods self::A3::foo hide-getters self::A3::getter, self::A3::foo, self::A3::field hide-setters self::A3::setter2, self::A3::setter3 hide-operators self::A3::* {
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extension_types/simple_show_and_hide.dart.strong.expect b/pkg/front_end/testcases/extension_types/simple_show_and_hide.dart.strong.expect
index a545388..a785e78 100644
--- a/pkg/front_end/testcases/extension_types/simple_show_and_hide.dart.strong.expect
+++ b/pkg/front_end/testcases/extension_types/simple_show_and_hide.dart.strong.expect
@@ -45,6 +45,6 @@
   operator +(self::D other) → self::D
     return throw 42;
 }
-extension type E on self::D {
+extension type E on self::D show-types self::I2<core::int, core::int, core::int>, self::C show-methods self::D::methodD show-getters self::D::methodD, self::D::getterD show-setters self::D::setterD show-operators self::D::+ hide-types self::I1<core::int, core::int>, self::A hide-methods self::B::methodB2, self::B::methodB hide-getters self::B::methodB2, self::B::methodB, self::B::getterB hide-setters self::B::setterB hide-operators self::B::* {
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extension_types/simple_show_and_hide.dart.strong.transformed.expect b/pkg/front_end/testcases/extension_types/simple_show_and_hide.dart.strong.transformed.expect
index a545388..a785e78 100644
--- a/pkg/front_end/testcases/extension_types/simple_show_and_hide.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extension_types/simple_show_and_hide.dart.strong.transformed.expect
@@ -45,6 +45,6 @@
   operator +(self::D other) → self::D
     return throw 42;
 }
-extension type E on self::D {
+extension type E on self::D show-types self::I2<core::int, core::int, core::int>, self::C show-methods self::D::methodD show-getters self::D::methodD, self::D::getterD show-setters self::D::setterD show-operators self::D::+ hide-types self::I1<core::int, core::int>, self::A hide-methods self::B::methodB2, self::B::methodB hide-getters self::B::methodB2, self::B::methodB, self::B::getterB hide-setters self::B::setterB hide-operators self::B::* {
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extension_types/simple_show_and_hide.dart.weak.expect b/pkg/front_end/testcases/extension_types/simple_show_and_hide.dart.weak.expect
index a545388..a785e78 100644
--- a/pkg/front_end/testcases/extension_types/simple_show_and_hide.dart.weak.expect
+++ b/pkg/front_end/testcases/extension_types/simple_show_and_hide.dart.weak.expect
@@ -45,6 +45,6 @@
   operator +(self::D other) → self::D
     return throw 42;
 }
-extension type E on self::D {
+extension type E on self::D show-types self::I2<core::int, core::int, core::int>, self::C show-methods self::D::methodD show-getters self::D::methodD, self::D::getterD show-setters self::D::setterD show-operators self::D::+ hide-types self::I1<core::int, core::int>, self::A hide-methods self::B::methodB2, self::B::methodB hide-getters self::B::methodB2, self::B::methodB, self::B::getterB hide-setters self::B::setterB hide-operators self::B::* {
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extension_types/simple_show_and_hide.dart.weak.outline.expect b/pkg/front_end/testcases/extension_types/simple_show_and_hide.dart.weak.outline.expect
index 37477da..2ab900d 100644
--- a/pkg/front_end/testcases/extension_types/simple_show_and_hide.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extension_types/simple_show_and_hide.dart.weak.outline.expect
@@ -44,7 +44,7 @@
   operator +(self::D other) → self::D
     ;
 }
-extension type E on self::D {
+extension type E on self::D show-types self::I2<core::int, core::int, core::int>, self::C show-methods self::D::methodD show-getters self::D::methodD, self::D::getterD show-setters self::D::setterD show-operators self::D::+ hide-types self::I1<core::int, core::int>, self::A hide-methods self::B::methodB2, self::B::methodB hide-getters self::B::methodB2, self::B::methodB, self::B::getterB hide-setters self::B::setterB hide-operators self::B::* {
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/extension_types/simple_show_and_hide.dart.weak.transformed.expect b/pkg/front_end/testcases/extension_types/simple_show_and_hide.dart.weak.transformed.expect
index a545388..a785e78 100644
--- a/pkg/front_end/testcases/extension_types/simple_show_and_hide.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extension_types/simple_show_and_hide.dart.weak.transformed.expect
@@ -45,6 +45,6 @@
   operator +(self::D other) → self::D
     return throw 42;
 }
-extension type E on self::D {
+extension type E on self::D show-types self::I2<core::int, core::int, core::int>, self::C show-methods self::D::methodD show-getters self::D::methodD, self::D::getterD show-setters self::D::setterD show-operators self::D::+ hide-types self::I1<core::int, core::int>, self::A hide-methods self::B::methodB2, self::B::methodB hide-getters self::B::methodB2, self::B::methodB, self::B::getterB hide-setters self::B::setterB hide-operators self::B::* {
 }
 static method main() → dynamic {}
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
index 534644b..18f6904 100644
--- 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
@@ -59,13 +59,13 @@
 import self as self;
 import "dart:core" as core;
 
-extension E1 on core::int {
+extension E1 on core::int show-types core::num {
 }
-extension E2 on core::int {
+extension E2 on core::int show-types core::num hide-methods core::int::ceil hide-getters core::int::ceil {
 }
-extension E3 on core::int {
+extension E3 on core::int hide-getters core::int::isEven {
 }
-extension type MyInt on core::int {
+extension type MyInt on core::int show-types core::num show-getters core::int::isEven hide-methods core::int::floor hide-getters core::int::floor {
   get twice = self::MyInt|get#twice;
 }
 static method test1(self::E1 e1) → dynamic {
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
index 534644b..18f6904 100644
--- 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
@@ -59,13 +59,13 @@
 import self as self;
 import "dart:core" as core;
 
-extension E1 on core::int {
+extension E1 on core::int show-types core::num {
 }
-extension E2 on core::int {
+extension E2 on core::int show-types core::num hide-methods core::int::ceil hide-getters core::int::ceil {
 }
-extension E3 on core::int {
+extension E3 on core::int hide-getters core::int::isEven {
 }
-extension type MyInt on core::int {
+extension type MyInt on core::int show-types core::num show-getters core::int::isEven hide-methods core::int::floor hide-getters core::int::floor {
   get twice = self::MyInt|get#twice;
 }
 static method test1(self::E1 e1) → 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
index 6962dcb..1cd63b0 100644
--- 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
@@ -2,13 +2,13 @@
 import self as self;
 import "dart:core" as core;
 
-extension E1 on core::int {
+extension E1 on core::int show-types core::num {
 }
-extension E2 on core::int {
+extension E2 on core::int show-types core::num hide-methods core::int::ceil hide-getters core::int::ceil {
 }
-extension E3 on core::int {
+extension E3 on core::int hide-getters core::int::isEven {
 }
-extension type MyInt on core::int {
+extension type MyInt on core::int show-types core::num show-getters core::int::isEven hide-methods core::int::floor hide-getters core::int::floor {
   get twice = self::MyInt|get#twice;
 }
 static method test1(self::E1 e1) → dynamic
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
index 8129aa4..70175c9 100644
--- 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
@@ -17,17 +17,17 @@
 import self as self;
 import "dart:core" as core;
 
-extension E1 on core::int {
+extension E1 on core::int show-types core::num {
   method ceil = self::E1|ceil;
   tearoff ceil = self::E1|get#ceil;
 }
-extension E2 on core::int {
+extension E2 on core::int show-types core::num hide-methods core::int::ceil hide-getters core::int::ceil {
   method ceil = self::E2|ceil;
   tearoff ceil = self::E2|get#ceil;
   method floor = self::E2|floor;
   tearoff floor = self::E2|get#floor;
 }
-extension E3 on core::int {
+extension E3 on core::int hide-getters core::int::isEven {
   get isOdd = self::E3|get#isOdd;
   get isEven = self::E3|get#isEven;
 }
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
index 8129aa4..70175c9 100644
--- 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
@@ -17,17 +17,17 @@
 import self as self;
 import "dart:core" as core;
 
-extension E1 on core::int {
+extension E1 on core::int show-types core::num {
   method ceil = self::E1|ceil;
   tearoff ceil = self::E1|get#ceil;
 }
-extension E2 on core::int {
+extension E2 on core::int show-types core::num hide-methods core::int::ceil hide-getters core::int::ceil {
   method ceil = self::E2|ceil;
   tearoff ceil = self::E2|get#ceil;
   method floor = self::E2|floor;
   tearoff floor = self::E2|get#floor;
 }
-extension E3 on core::int {
+extension E3 on core::int hide-getters core::int::isEven {
   get isOdd = self::E3|get#isOdd;
   get isEven = self::E3|get#isEven;
 }
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
index 8129aa4..70175c9 100644
--- 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
@@ -17,17 +17,17 @@
 import self as self;
 import "dart:core" as core;
 
-extension E1 on core::int {
+extension E1 on core::int show-types core::num {
   method ceil = self::E1|ceil;
   tearoff ceil = self::E1|get#ceil;
 }
-extension E2 on core::int {
+extension E2 on core::int show-types core::num hide-methods core::int::ceil hide-getters core::int::ceil {
   method ceil = self::E2|ceil;
   tearoff ceil = self::E2|get#ceil;
   method floor = self::E2|floor;
   tearoff floor = self::E2|get#floor;
 }
-extension E3 on core::int {
+extension E3 on core::int hide-getters core::int::isEven {
   get isOdd = self::E3|get#isOdd;
   get isEven = self::E3|get#isEven;
 }
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
index db64d10..afb2d37 100644
--- 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
@@ -2,17 +2,17 @@
 import self as self;
 import "dart:core" as core;
 
-extension E1 on core::int {
+extension E1 on core::int show-types core::num {
   method ceil = self::E1|ceil;
   tearoff ceil = self::E1|get#ceil;
 }
-extension E2 on core::int {
+extension E2 on core::int show-types core::num hide-methods core::int::ceil hide-getters core::int::ceil {
   method ceil = self::E2|ceil;
   tearoff ceil = self::E2|get#ceil;
   method floor = self::E2|floor;
   tearoff floor = self::E2|get#floor;
 }
-extension E3 on core::int {
+extension E3 on core::int hide-getters core::int::isEven {
   get isOdd = self::E3|get#isOdd;
   get isEven = self::E3|get#isEven;
 }
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
index 8129aa4..70175c9 100644
--- 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
@@ -17,17 +17,17 @@
 import self as self;
 import "dart:core" as core;
 
-extension E1 on core::int {
+extension E1 on core::int show-types core::num {
   method ceil = self::E1|ceil;
   tearoff ceil = self::E1|get#ceil;
 }
-extension E2 on core::int {
+extension E2 on core::int show-types core::num hide-methods core::int::ceil hide-getters core::int::ceil {
   method ceil = self::E2|ceil;
   tearoff ceil = self::E2|get#ceil;
   method floor = self::E2|floor;
   tearoff floor = self::E2|get#floor;
 }
-extension E3 on core::int {
+extension E3 on core::int hide-getters core::int::isEven {
   get isOdd = self::E3|get#isOdd;
   get isEven = self::E3|get#isEven;
 }
diff --git a/pkg/front_end/testcases/extension_types/various_hide_elements.dart.strong.expect b/pkg/front_end/testcases/extension_types/various_hide_elements.dart.strong.expect
index 69ddb3b..65db982 100644
--- a/pkg/front_end/testcases/extension_types/various_hide_elements.dart.strong.expect
+++ b/pkg/front_end/testcases/extension_types/various_hide_elements.dart.strong.expect
@@ -27,20 +27,20 @@
   set bar(core::int value) → void {}
   method baz() → void {}
 }
-extension type E0 on core::int {
+extension type E0 on core::int hide-operators core::num::* {
 }
-extension type E1 on core::int {
+extension type E1 on core::int hide-getters core::int::isEven {
 }
-extension type E2<T extends core::Object? = dynamic> on core::List<T%> {
+extension type E2<T extends core::Object? = dynamic> on core::List<T%> hide-setters core::List::length {
 }
-extension type E3 on core::int {
+extension type E3 on core::int hide-types core::num {
 }
-extension type E4 on core::List<core::int> {
+extension type E4 on core::List<core::int> hide-types core::Iterable<core::int> {
 }
-extension type E5 on core::List<dynamic> {
+extension type E5 on core::List<dynamic> hide-types core::Iterable<dynamic> {
 }
-extension type E6 on core::List<core::int> {
+extension type E6 on core::List<core::int> hide-types core::Iterable<core::int> {
 }
-extension type E on self::C {
+extension type E on self::C hide-types self::B<core::int> hide-methods self::C::baz hide-getters self::C::baz, self::B::foo hide-setters self::C::bar hide-operators self::B::* {
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extension_types/various_hide_elements.dart.strong.transformed.expect b/pkg/front_end/testcases/extension_types/various_hide_elements.dart.strong.transformed.expect
index 69ddb3b..65db982 100644
--- a/pkg/front_end/testcases/extension_types/various_hide_elements.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extension_types/various_hide_elements.dart.strong.transformed.expect
@@ -27,20 +27,20 @@
   set bar(core::int value) → void {}
   method baz() → void {}
 }
-extension type E0 on core::int {
+extension type E0 on core::int hide-operators core::num::* {
 }
-extension type E1 on core::int {
+extension type E1 on core::int hide-getters core::int::isEven {
 }
-extension type E2<T extends core::Object? = dynamic> on core::List<T%> {
+extension type E2<T extends core::Object? = dynamic> on core::List<T%> hide-setters core::List::length {
 }
-extension type E3 on core::int {
+extension type E3 on core::int hide-types core::num {
 }
-extension type E4 on core::List<core::int> {
+extension type E4 on core::List<core::int> hide-types core::Iterable<core::int> {
 }
-extension type E5 on core::List<dynamic> {
+extension type E5 on core::List<dynamic> hide-types core::Iterable<dynamic> {
 }
-extension type E6 on core::List<core::int> {
+extension type E6 on core::List<core::int> hide-types core::Iterable<core::int> {
 }
-extension type E on self::C {
+extension type E on self::C hide-types self::B<core::int> hide-methods self::C::baz hide-getters self::C::baz, self::B::foo hide-setters self::C::bar hide-operators self::B::* {
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extension_types/various_hide_elements.dart.weak.expect b/pkg/front_end/testcases/extension_types/various_hide_elements.dart.weak.expect
index 69ddb3b..65db982 100644
--- a/pkg/front_end/testcases/extension_types/various_hide_elements.dart.weak.expect
+++ b/pkg/front_end/testcases/extension_types/various_hide_elements.dart.weak.expect
@@ -27,20 +27,20 @@
   set bar(core::int value) → void {}
   method baz() → void {}
 }
-extension type E0 on core::int {
+extension type E0 on core::int hide-operators core::num::* {
 }
-extension type E1 on core::int {
+extension type E1 on core::int hide-getters core::int::isEven {
 }
-extension type E2<T extends core::Object? = dynamic> on core::List<T%> {
+extension type E2<T extends core::Object? = dynamic> on core::List<T%> hide-setters core::List::length {
 }
-extension type E3 on core::int {
+extension type E3 on core::int hide-types core::num {
 }
-extension type E4 on core::List<core::int> {
+extension type E4 on core::List<core::int> hide-types core::Iterable<core::int> {
 }
-extension type E5 on core::List<dynamic> {
+extension type E5 on core::List<dynamic> hide-types core::Iterable<dynamic> {
 }
-extension type E6 on core::List<core::int> {
+extension type E6 on core::List<core::int> hide-types core::Iterable<core::int> {
 }
-extension type E on self::C {
+extension type E on self::C hide-types self::B<core::int> hide-methods self::C::baz hide-getters self::C::baz, self::B::foo hide-setters self::C::bar hide-operators self::B::* {
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extension_types/various_hide_elements.dart.weak.outline.expect b/pkg/front_end/testcases/extension_types/various_hide_elements.dart.weak.outline.expect
index 4a47ac5..cf94cf8 100644
--- a/pkg/front_end/testcases/extension_types/various_hide_elements.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extension_types/various_hide_elements.dart.weak.outline.expect
@@ -26,21 +26,21 @@
   method baz() → void
     ;
 }
-extension type E0 on core::int {
+extension type E0 on core::int hide-operators core::num::* {
 }
-extension type E1 on core::int {
+extension type E1 on core::int hide-getters core::int::isEven {
 }
-extension type E2<T extends core::Object? = dynamic> on core::List<T%> {
+extension type E2<T extends core::Object? = dynamic> on core::List<T%> hide-setters core::List::length {
 }
-extension type E3 on core::int {
+extension type E3 on core::int hide-types core::num {
 }
-extension type E4 on core::List<core::int> {
+extension type E4 on core::List<core::int> hide-types core::Iterable<core::int> {
 }
-extension type E5 on core::List<dynamic> {
+extension type E5 on core::List<dynamic> hide-types core::Iterable<dynamic> {
 }
-extension type E6 on core::List<core::int> {
+extension type E6 on core::List<core::int> hide-types core::Iterable<core::int> {
 }
-extension type E on self::C {
+extension type E on self::C hide-types self::B<core::int> hide-methods self::C::baz hide-getters self::C::baz, self::B::foo hide-setters self::C::bar hide-operators self::B::* {
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/extension_types/various_hide_elements.dart.weak.transformed.expect b/pkg/front_end/testcases/extension_types/various_hide_elements.dart.weak.transformed.expect
index 69ddb3b..65db982 100644
--- a/pkg/front_end/testcases/extension_types/various_hide_elements.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extension_types/various_hide_elements.dart.weak.transformed.expect
@@ -27,20 +27,20 @@
   set bar(core::int value) → void {}
   method baz() → void {}
 }
-extension type E0 on core::int {
+extension type E0 on core::int hide-operators core::num::* {
 }
-extension type E1 on core::int {
+extension type E1 on core::int hide-getters core::int::isEven {
 }
-extension type E2<T extends core::Object? = dynamic> on core::List<T%> {
+extension type E2<T extends core::Object? = dynamic> on core::List<T%> hide-setters core::List::length {
 }
-extension type E3 on core::int {
+extension type E3 on core::int hide-types core::num {
 }
-extension type E4 on core::List<core::int> {
+extension type E4 on core::List<core::int> hide-types core::Iterable<core::int> {
 }
-extension type E5 on core::List<dynamic> {
+extension type E5 on core::List<dynamic> hide-types core::Iterable<dynamic> {
 }
-extension type E6 on core::List<core::int> {
+extension type E6 on core::List<core::int> hide-types core::Iterable<core::int> {
 }
-extension type E on self::C {
+extension type E on self::C hide-types self::B<core::int> hide-methods self::C::baz hide-getters self::C::baz, self::B::foo hide-setters self::C::bar hide-operators self::B::* {
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extension_types/various_show_elements.dart.strong.expect b/pkg/front_end/testcases/extension_types/various_show_elements.dart.strong.expect
index 69ddb3b..0aae661 100644
--- a/pkg/front_end/testcases/extension_types/various_show_elements.dart.strong.expect
+++ b/pkg/front_end/testcases/extension_types/various_show_elements.dart.strong.expect
@@ -27,20 +27,20 @@
   set bar(core::int value) → void {}
   method baz() → void {}
 }
-extension type E0 on core::int {
+extension type E0 on core::int show-operators core::num::* {
 }
-extension type E1 on core::int {
+extension type E1 on core::int show-getters core::int::isEven {
 }
-extension type E2<T extends core::Object? = dynamic> on core::List<T%> {
+extension type E2<T extends core::Object? = dynamic> on core::List<T%> show-setters core::List::length {
 }
-extension type E3 on core::int {
+extension type E3 on core::int show-types core::num {
 }
-extension type E4 on core::List<core::int> {
+extension type E4 on core::List<core::int> show-types core::Iterable<core::int> {
 }
-extension type E5 on core::List<dynamic> {
+extension type E5 on core::List<dynamic> show-types core::Iterable<dynamic> {
 }
-extension type E6 on core::List<core::int> {
+extension type E6 on core::List<core::int> show-types core::Iterable<core::int> {
 }
-extension type E on self::C {
+extension type E on self::C show-types self::B<core::int> show-methods self::C::baz show-getters self::C::baz, self::B::foo show-setters self::C::bar show-operators self::B::* {
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extension_types/various_show_elements.dart.strong.transformed.expect b/pkg/front_end/testcases/extension_types/various_show_elements.dart.strong.transformed.expect
index 69ddb3b..0aae661 100644
--- a/pkg/front_end/testcases/extension_types/various_show_elements.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extension_types/various_show_elements.dart.strong.transformed.expect
@@ -27,20 +27,20 @@
   set bar(core::int value) → void {}
   method baz() → void {}
 }
-extension type E0 on core::int {
+extension type E0 on core::int show-operators core::num::* {
 }
-extension type E1 on core::int {
+extension type E1 on core::int show-getters core::int::isEven {
 }
-extension type E2<T extends core::Object? = dynamic> on core::List<T%> {
+extension type E2<T extends core::Object? = dynamic> on core::List<T%> show-setters core::List::length {
 }
-extension type E3 on core::int {
+extension type E3 on core::int show-types core::num {
 }
-extension type E4 on core::List<core::int> {
+extension type E4 on core::List<core::int> show-types core::Iterable<core::int> {
 }
-extension type E5 on core::List<dynamic> {
+extension type E5 on core::List<dynamic> show-types core::Iterable<dynamic> {
 }
-extension type E6 on core::List<core::int> {
+extension type E6 on core::List<core::int> show-types core::Iterable<core::int> {
 }
-extension type E on self::C {
+extension type E on self::C show-types self::B<core::int> show-methods self::C::baz show-getters self::C::baz, self::B::foo show-setters self::C::bar show-operators self::B::* {
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extension_types/various_show_elements.dart.weak.expect b/pkg/front_end/testcases/extension_types/various_show_elements.dart.weak.expect
index 69ddb3b..0aae661 100644
--- a/pkg/front_end/testcases/extension_types/various_show_elements.dart.weak.expect
+++ b/pkg/front_end/testcases/extension_types/various_show_elements.dart.weak.expect
@@ -27,20 +27,20 @@
   set bar(core::int value) → void {}
   method baz() → void {}
 }
-extension type E0 on core::int {
+extension type E0 on core::int show-operators core::num::* {
 }
-extension type E1 on core::int {
+extension type E1 on core::int show-getters core::int::isEven {
 }
-extension type E2<T extends core::Object? = dynamic> on core::List<T%> {
+extension type E2<T extends core::Object? = dynamic> on core::List<T%> show-setters core::List::length {
 }
-extension type E3 on core::int {
+extension type E3 on core::int show-types core::num {
 }
-extension type E4 on core::List<core::int> {
+extension type E4 on core::List<core::int> show-types core::Iterable<core::int> {
 }
-extension type E5 on core::List<dynamic> {
+extension type E5 on core::List<dynamic> show-types core::Iterable<dynamic> {
 }
-extension type E6 on core::List<core::int> {
+extension type E6 on core::List<core::int> show-types core::Iterable<core::int> {
 }
-extension type E on self::C {
+extension type E on self::C show-types self::B<core::int> show-methods self::C::baz show-getters self::C::baz, self::B::foo show-setters self::C::bar show-operators self::B::* {
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extension_types/various_show_elements.dart.weak.outline.expect b/pkg/front_end/testcases/extension_types/various_show_elements.dart.weak.outline.expect
index 4a47ac5..4272c5c 100644
--- a/pkg/front_end/testcases/extension_types/various_show_elements.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extension_types/various_show_elements.dart.weak.outline.expect
@@ -26,21 +26,21 @@
   method baz() → void
     ;
 }
-extension type E0 on core::int {
+extension type E0 on core::int show-operators core::num::* {
 }
-extension type E1 on core::int {
+extension type E1 on core::int show-getters core::int::isEven {
 }
-extension type E2<T extends core::Object? = dynamic> on core::List<T%> {
+extension type E2<T extends core::Object? = dynamic> on core::List<T%> show-setters core::List::length {
 }
-extension type E3 on core::int {
+extension type E3 on core::int show-types core::num {
 }
-extension type E4 on core::List<core::int> {
+extension type E4 on core::List<core::int> show-types core::Iterable<core::int> {
 }
-extension type E5 on core::List<dynamic> {
+extension type E5 on core::List<dynamic> show-types core::Iterable<dynamic> {
 }
-extension type E6 on core::List<core::int> {
+extension type E6 on core::List<core::int> show-types core::Iterable<core::int> {
 }
-extension type E on self::C {
+extension type E on self::C show-types self::B<core::int> show-methods self::C::baz show-getters self::C::baz, self::B::foo show-setters self::C::bar show-operators self::B::* {
 }
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/extension_types/various_show_elements.dart.weak.transformed.expect b/pkg/front_end/testcases/extension_types/various_show_elements.dart.weak.transformed.expect
index 69ddb3b..0aae661 100644
--- a/pkg/front_end/testcases/extension_types/various_show_elements.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/extension_types/various_show_elements.dart.weak.transformed.expect
@@ -27,20 +27,20 @@
   set bar(core::int value) → void {}
   method baz() → void {}
 }
-extension type E0 on core::int {
+extension type E0 on core::int show-operators core::num::* {
 }
-extension type E1 on core::int {
+extension type E1 on core::int show-getters core::int::isEven {
 }
-extension type E2<T extends core::Object? = dynamic> on core::List<T%> {
+extension type E2<T extends core::Object? = dynamic> on core::List<T%> show-setters core::List::length {
 }
-extension type E3 on core::int {
+extension type E3 on core::int show-types core::num {
 }
-extension type E4 on core::List<core::int> {
+extension type E4 on core::List<core::int> show-types core::Iterable<core::int> {
 }
-extension type E5 on core::List<dynamic> {
+extension type E5 on core::List<dynamic> show-types core::Iterable<dynamic> {
 }
-extension type E6 on core::List<core::int> {
+extension type E6 on core::List<core::int> show-types core::Iterable<core::int> {
 }
-extension type E on self::C {
+extension type E on self::C show-types self::B<core::int> show-methods self::C::baz show-getters self::C::baz, self::B::foo show-setters self::C::bar show-operators self::B::* {
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/textual_outline.status b/pkg/front_end/testcases/textual_outline.status
index 1ca96b2..ba00a26 100644
--- a/pkg/front_end/testcases/textual_outline.status
+++ b/pkg/front_end/testcases/textual_outline.status
@@ -29,6 +29,7 @@
 dart2js/late_statics: FormatterCrash
 extension_types/basic_show: FormatterCrash
 extension_types/keyword_in_show_hide_element: FormatterCrash
+extension_types/show_hide_all_kinds: FormatterCrash
 extension_types/simple_getter_resolution: FormatterCrash
 extension_types/simple_method_resolution: FormatterCrash
 extension_types/simple_operator_resolution: FormatterCrash
diff --git a/pkg/kernel/binary.md b/pkg/kernel/binary.md
index 06ba968..76d102d 100644
--- a/pkg/kernel/binary.md
+++ b/pkg/kernel/binary.md
@@ -147,7 +147,7 @@
 
 type ComponentFile {
   UInt32 magic = 0x90ABCDEF;
-  UInt32 formatVersion = 70;
+  UInt32 formatVersion = 71;
   Byte[10] shortSdkHash;
   List<String> problemsAsJson; // Described in problems.md.
   Library[] libraries;
@@ -346,6 +346,16 @@
   Byte flags (isExtensionTypeDeclaration);
   List<TypeParameter> typeParameters;
   DartType onType;
+  List<DartType> shownSupertypes;
+  List<CanonicalNameReference> shownMembers;
+  List<CanonicalNameReference> shownGetters;
+  List<CanonicalNameReference> shownSetters;
+  List<CanonicalNameReference> shownOperators;
+  List<DartType> hiddenSupertypes;
+  List<CanonicalNameReference> hiddenMembers;
+  List<CanonicalNameReference> hiddenGetters;
+  List<CanonicalNameReference> hiddenSetters;
+  List<CanonicalNameReference> hiddenOperators;
   List<ExtensionMemberDescriptor> members;
 }
 
diff --git a/pkg/kernel/lib/ast.dart b/pkg/kernel/lib/ast.dart
index 9a4165c..b2a0317 100644
--- a/pkg/kernel/lib/ast.dart
+++ b/pkg/kernel/lib/ast.dart
@@ -1529,8 +1529,16 @@
   ///   class A {}
   ///   extension B on A {}
   ///
+  /// The 'on clause' appears also in the experimental feature 'extension
+  /// types' as a part of an extension type declaration, for example:
+  ///
+  ///   class A {}
+  ///   extension type B on A {}
   late DartType onType;
 
+  /// The 'show' and 'hide' clauses of an extension type declaration.
+  ExtensionTypeShowHideClause? showHideClause;
+
   /// The members declared by the extension.
   ///
   /// The members are converted into top-level members and only accessible
@@ -1598,6 +1606,10 @@
   void visitChildren(Visitor v) {
     visitList(typeParameters, v);
     onType.accept(v);
+    if (showHideClause != null) {
+      visitList(showHideClause!.shownSupertypes, v);
+      visitList(showHideClause!.hiddenSupertypes, v);
+    }
   }
 
   @override
@@ -1608,6 +1620,10 @@
     if (onType != null) {
       onType = v.visitDartType(onType);
     }
+    if (showHideClause != null) {
+      v.transformSupertypeList(showHideClause!.shownSupertypes);
+      v.transformSupertypeList(showHideClause!.hiddenSupertypes);
+    }
   }
 
   @override
@@ -1618,6 +1634,10 @@
     if (onType != null) {
       onType = v.visitDartType(onType, cannotRemoveSentinel);
     }
+    if (showHideClause != null) {
+      v.transformSupertypeList(showHideClause!.shownSupertypes);
+      v.transformSupertypeList(showHideClause!.hiddenSupertypes);
+    }
   }
 
   @override
@@ -1705,6 +1725,117 @@
   }
 }
 
+/// Elements of the 'show' and 'hide' clauses of an extension type declaration.
+class ExtensionTypeShowHideClause {
+  /// The types in the 'show clause' of the extension type declaration.
+  ///
+  /// For instance A, B in:
+  ///
+  ///   class A {}
+  ///   class B {}
+  ///   class C extends B implements A {}
+  ///   extension type E on C show B, A {}
+  final List<Supertype> shownSupertypes = <Supertype>[];
+
+  /// The methods in the 'show clause' of the extension type declaration.
+  ///
+  /// For instance foo in
+  ///
+  ///   class A {
+  ///     void foo() {}
+  ///   }
+  ///   extension type E on A show foo {}
+  final List<Reference> shownMethods = <Reference>[];
+
+  /// The getters in the 'show clause' of the extension type declaration.
+  ///
+  /// For instance foo, bar, baz in
+  ///
+  ///   class A {
+  ///     void foo() {}
+  ///     int? bar;
+  ///     int get baz => 42;
+  ///   }
+  ///   extension type E on A show get foo, get bar, get baz {}
+  final List<Reference> shownGetters = <Reference>[];
+
+  /// The setters in the 'show clause' of the extension type declaration.
+  ///
+  /// For instance foo, bar in
+  ///
+  ///   class A {
+  ///     int? foo;
+  ///     void set bar(int value) {}
+  ///   }
+  ///   extension type E on A show set foo, set bar {}
+  final List<Reference> shownSetters = <Reference>[];
+
+  /// The operators in the 'show clause' of the extension type declaration.
+  ///
+  /// For instance +, * in
+  ///
+  ///   class A {
+  ///     A operator+(A other) => other;
+  ///     A operator*(A other) => this;
+  ///   }
+  ///   extension type E on A show operator +, operator * {}
+  final List<Reference> shownOperators = <Reference>[];
+
+  /// The types in the 'hide clause' of the extension type declaration.
+  ///
+  /// For instance A, B in:
+  ///
+  ///   class A {}
+  ///   class B {}
+  ///   class C extends B implements A {}
+  ///   extension E on C hide A, B {}
+  final List<Supertype> hiddenSupertypes = <Supertype>[];
+
+  /// The methods in the 'hide clause' of the extension type declaration.
+  ///
+  /// For instance foo in
+  ///
+  ///   class A {
+  ///     void foo() {}
+  ///   }
+  ///   extension type E on A hide foo {}
+  final List<Reference> hiddenMethods = <Reference>[];
+
+  /// The getters in the 'hide clause' of the extension type declaration.
+  ///
+  /// For instance foo, bar, baz in
+  ///
+  ///   class A {
+  ///     void foo() {}
+  ///     int? bar;
+  ///     int get baz => 42;
+  ///   }
+  ///   extension type E on A hide get foo, get bar, get baz {}
+  final List<Reference> hiddenGetters = <Reference>[];
+
+  /// The setters in the 'hide clause' of the extension type declaration.
+  ///
+  /// For instance foo, bar in
+  ///
+  ///   class A {
+  ///     int? foo;
+  ///     void set bar(int value) {}
+  ///   }
+  ///   extension type E on A hide set foo, set bar {}
+  final List<Reference> hiddenSetters = <Reference>[];
+
+  /// The operators in the 'hide clause' of the extension type declaration.
+  ///
+  /// For instance +, * in
+  ///
+  ///   class A {
+  ///     A operator+(A other) => other;
+  ///     A operator*(A other) => this;
+  ///   }
+  ///   extension type E on A hide operator +, operator * {}
+  final List<Reference> hiddenOperators = <Reference>[];
+}
+
 // ------------------------------------------------------------------------
 //                            MEMBERS
 // ------------------------------------------------------------------------
@@ -14054,6 +14185,11 @@
 /// polymorphism. See https://dart-review.googlesource.com/c/sdk/+/185828.
 final List<String> emptyListOfString = List.filled(0, '', growable: false);
 
+/// Almost const <Reference>[], but not const in an attempt to avoid
+/// polymorphism. See https://dart-review.googlesource.com/c/sdk/+/185828.
+final List<Reference> emptyListOfReference =
+    List.filled(0, Reference(), growable: false);
+
 /// Almost const <Typedef>[], but not const in an attempt to avoid
 /// polymorphism. See https://dart-review.googlesource.com/c/sdk/+/185828.
 final List<Typedef> emptyListOfTypedef =
diff --git a/pkg/kernel/lib/binary/ast_from_binary.dart b/pkg/kernel/lib/binary/ast_from_binary.dart
index d53d7de..14eb7b8 100644
--- a/pkg/kernel/lib/binary/ast_from_binary.dart
+++ b/pkg/kernel/lib/binary/ast_from_binary.dart
@@ -529,6 +529,16 @@
         growable: useGrowableLists);
   }
 
+  List<Reference> readNonNullReferenceList() {
+    int length = readUInt30();
+    if (!useGrowableLists && length == 0) {
+      return emptyListOfReference;
+    }
+    return new List<Reference>.generate(
+        length, (_) => readNonNullMemberReference(),
+        growable: useGrowableLists);
+  }
+
   String? readStringOrNullIfEmpty() {
     String string = readStringReference();
     return string.isEmpty ? null : string;
@@ -1448,11 +1458,32 @@
 
     readAndPushTypeParameterList(node.typeParameters, node);
     DartType onType = readDartType();
+    List<Supertype> shownSupertypes = readSupertypeList();
+    List<Reference> shownMembers = readNonNullReferenceList();
+    List<Reference> shownGetters = readNonNullReferenceList();
+    List<Reference> shownSetters = readNonNullReferenceList();
+    List<Reference> shownOperators = readNonNullReferenceList();
+    List<Supertype> hiddenSupertypes = readSupertypeList();
+    List<Reference> hiddenMembers = readNonNullReferenceList();
+    List<Reference> hiddenGetters = readNonNullReferenceList();
+    List<Reference> hiddenSetters = readNonNullReferenceList();
+    List<Reference> hiddenOperators = readNonNullReferenceList();
     typeParameterStack.length = 0;
 
     node.name = name;
     node.fileUri = fileUri;
     node.onType = onType;
+    node.showHideClause = new ExtensionTypeShowHideClause()
+      ..shownSupertypes.addAll(shownSupertypes)
+      ..shownMethods.addAll(shownMembers)
+      ..shownGetters.addAll(shownGetters)
+      ..shownSetters.addAll(shownSetters)
+      ..shownOperators.addAll(shownOperators)
+      ..hiddenSupertypes.addAll(hiddenSupertypes)
+      ..hiddenMethods.addAll(hiddenMembers)
+      ..hiddenGetters.addAll(hiddenGetters)
+      ..hiddenSetters.addAll(hiddenSetters)
+      ..hiddenOperators.addAll(hiddenOperators);
 
     node.members = _readExtensionMemberDescriptorList();
 
diff --git a/pkg/kernel/lib/binary/ast_to_binary.dart b/pkg/kernel/lib/binary/ast_to_binary.dart
index a295640..31281ff 100644
--- a/pkg/kernel/lib/binary/ast_to_binary.dart
+++ b/pkg/kernel/lib/binary/ast_to_binary.dart
@@ -2451,6 +2451,18 @@
     enterScope(typeParameters: node.typeParameters);
     writeNodeList(node.typeParameters);
     writeDartType(node.onType);
+    ExtensionTypeShowHideClause showHideClause =
+        node.showHideClause ?? new ExtensionTypeShowHideClause();
+    writeNodeList(showHideClause.shownSupertypes);
+    writeList(showHideClause.shownMethods, writeNonNullReference);
+    writeList(showHideClause.shownGetters, writeNonNullReference);
+    writeList(showHideClause.shownSetters, writeNonNullReference);
+    writeList(showHideClause.shownOperators, writeNonNullReference);
+    writeNodeList(showHideClause.hiddenSupertypes);
+    writeList(showHideClause.hiddenMethods, writeNonNullReference);
+    writeList(showHideClause.hiddenGetters, writeNonNullReference);
+    writeList(showHideClause.hiddenSetters, writeNonNullReference);
+    writeList(showHideClause.hiddenOperators, writeNonNullReference);
     leaveScope(typeParameters: node.typeParameters);
 
     final int len = node.members.length;
diff --git a/pkg/kernel/lib/binary/tag.dart b/pkg/kernel/lib/binary/tag.dart
index f9a62ce..2fe1841 100644
--- a/pkg/kernel/lib/binary/tag.dart
+++ b/pkg/kernel/lib/binary/tag.dart
@@ -176,7 +176,7 @@
   /// Internal version of kernel binary format.
   /// Bump it when making incompatible changes in kernel binaries.
   /// Keep in sync with runtime/vm/kernel_binary.h, pkg/kernel/binary.md.
-  static const int BinaryFormatVersion = 70;
+  static const int BinaryFormatVersion = 71;
 }
 
 abstract class ConstantTag {
diff --git a/pkg/kernel/lib/src/equivalence.dart b/pkg/kernel/lib/src/equivalence.dart
index a8edddb..b307532 100644
--- a/pkg/kernel/lib/src/equivalence.dart
+++ b/pkg/kernel/lib/src/equivalence.dart
@@ -1516,6 +1516,49 @@
     return result;
   }
 
+  bool checkExtensionTypeShowHideClause(EquivalenceVisitor visitor,
+      ExtensionTypeShowHideClause? node, Object? other) {
+    if (identical(node, other)) return true;
+    if (node is! ExtensionTypeShowHideClause) return false;
+    if (other is! ExtensionTypeShowHideClause) return false;
+    bool result = true;
+    if (!checkExtensionTypeShowHideClause_shownSupertypes(
+        visitor, node, other)) {
+      result = visitor.resultOnInequivalence;
+    }
+    if (!checkExtensionTypeShowHideClause_shownMethods(visitor, node, other)) {
+      result = visitor.resultOnInequivalence;
+    }
+    if (!checkExtensionTypeShowHideClause_shownGetters(visitor, node, other)) {
+      result = visitor.resultOnInequivalence;
+    }
+    if (!checkExtensionTypeShowHideClause_shownSetters(visitor, node, other)) {
+      result = visitor.resultOnInequivalence;
+    }
+    if (!checkExtensionTypeShowHideClause_shownOperators(
+        visitor, node, other)) {
+      result = visitor.resultOnInequivalence;
+    }
+    if (!checkExtensionTypeShowHideClause_hiddenSupertypes(
+        visitor, node, other)) {
+      result = visitor.resultOnInequivalence;
+    }
+    if (!checkExtensionTypeShowHideClause_hiddenMethods(visitor, node, other)) {
+      result = visitor.resultOnInequivalence;
+    }
+    if (!checkExtensionTypeShowHideClause_hiddenGetters(visitor, node, other)) {
+      result = visitor.resultOnInequivalence;
+    }
+    if (!checkExtensionTypeShowHideClause_hiddenSetters(visitor, node, other)) {
+      result = visitor.resultOnInequivalence;
+    }
+    if (!checkExtensionTypeShowHideClause_hiddenOperators(
+        visitor, node, other)) {
+      result = visitor.resultOnInequivalence;
+    }
+    return result;
+  }
+
   bool checkExtensionMemberDescriptor(EquivalenceVisitor visitor,
       ExtensionMemberDescriptor? node, Object? other) {
     if (identical(node, other)) return true;
@@ -1559,6 +1602,9 @@
     if (!checkExtension_onType(visitor, node, other)) {
       result = visitor.resultOnInequivalence;
     }
+    if (!checkExtension_showHideClause(visitor, node, other)) {
+      result = visitor.resultOnInequivalence;
+    }
     if (!checkExtension_members(visitor, node, other)) {
       result = visitor.resultOnInequivalence;
     }
@@ -4723,6 +4769,87 @@
     return visitor.checkNodes(node.onType, other.onType, 'onType');
   }
 
+  bool checkExtensionTypeShowHideClause_shownSupertypes(
+      EquivalenceVisitor visitor,
+      ExtensionTypeShowHideClause node,
+      ExtensionTypeShowHideClause other) {
+    return visitor.checkLists(node.shownSupertypes, other.shownSupertypes,
+        visitor.checkNodes, 'shownSupertypes');
+  }
+
+  bool checkExtensionTypeShowHideClause_shownMethods(EquivalenceVisitor visitor,
+      ExtensionTypeShowHideClause node, ExtensionTypeShowHideClause other) {
+    return visitor.checkLists(node.shownMethods, other.shownMethods,
+        visitor.checkReferences, 'shownMethods');
+  }
+
+  bool checkExtensionTypeShowHideClause_shownGetters(EquivalenceVisitor visitor,
+      ExtensionTypeShowHideClause node, ExtensionTypeShowHideClause other) {
+    return visitor.checkLists(node.shownGetters, other.shownGetters,
+        visitor.checkReferences, 'shownGetters');
+  }
+
+  bool checkExtensionTypeShowHideClause_shownSetters(EquivalenceVisitor visitor,
+      ExtensionTypeShowHideClause node, ExtensionTypeShowHideClause other) {
+    return visitor.checkLists(node.shownSetters, other.shownSetters,
+        visitor.checkReferences, 'shownSetters');
+  }
+
+  bool checkExtensionTypeShowHideClause_shownOperators(
+      EquivalenceVisitor visitor,
+      ExtensionTypeShowHideClause node,
+      ExtensionTypeShowHideClause other) {
+    return visitor.checkLists(node.shownOperators, other.shownOperators,
+        visitor.checkReferences, 'shownOperators');
+  }
+
+  bool checkExtensionTypeShowHideClause_hiddenSupertypes(
+      EquivalenceVisitor visitor,
+      ExtensionTypeShowHideClause node,
+      ExtensionTypeShowHideClause other) {
+    return visitor.checkLists(node.hiddenSupertypes, other.hiddenSupertypes,
+        visitor.checkNodes, 'hiddenSupertypes');
+  }
+
+  bool checkExtensionTypeShowHideClause_hiddenMethods(
+      EquivalenceVisitor visitor,
+      ExtensionTypeShowHideClause node,
+      ExtensionTypeShowHideClause other) {
+    return visitor.checkLists(node.hiddenMethods, other.hiddenMethods,
+        visitor.checkReferences, 'hiddenMethods');
+  }
+
+  bool checkExtensionTypeShowHideClause_hiddenGetters(
+      EquivalenceVisitor visitor,
+      ExtensionTypeShowHideClause node,
+      ExtensionTypeShowHideClause other) {
+    return visitor.checkLists(node.hiddenGetters, other.hiddenGetters,
+        visitor.checkReferences, 'hiddenGetters');
+  }
+
+  bool checkExtensionTypeShowHideClause_hiddenSetters(
+      EquivalenceVisitor visitor,
+      ExtensionTypeShowHideClause node,
+      ExtensionTypeShowHideClause other) {
+    return visitor.checkLists(node.hiddenSetters, other.hiddenSetters,
+        visitor.checkReferences, 'hiddenSetters');
+  }
+
+  bool checkExtensionTypeShowHideClause_hiddenOperators(
+      EquivalenceVisitor visitor,
+      ExtensionTypeShowHideClause node,
+      ExtensionTypeShowHideClause other) {
+    return visitor.checkLists(node.hiddenOperators, other.hiddenOperators,
+        visitor.checkReferences, 'hiddenOperators');
+  }
+
+  bool checkExtension_showHideClause(
+      EquivalenceVisitor visitor, Extension node, Extension other) {
+    'showHideClause';
+    return checkExtensionTypeShowHideClause(
+        visitor, node.showHideClause, other.showHideClause);
+  }
+
   bool checkExtensionMemberDescriptor_name(EquivalenceVisitor visitor,
       ExtensionMemberDescriptor node, ExtensionMemberDescriptor other) {
     return visitor.checkNodes(node.name, other.name, 'name');
diff --git a/pkg/kernel/lib/text/ast_to_text.dart b/pkg/kernel/lib/text/ast_to_text.dart
index 132a4e1..6119f33 100644
--- a/pkg/kernel/lib/text/ast_to_text.dart
+++ b/pkg/kernel/lib/text/ast_to_text.dart
@@ -1351,10 +1351,67 @@
     writeTypeParameterList(node.typeParameters);
     writeSpaced('on');
     writeType(node.onType);
+
+    ExtensionTypeShowHideClause? showHideClause = node.showHideClause;
+    if (showHideClause != null) {
+      // 'Show' clause elements.
+      if (showHideClause.shownSupertypes.isNotEmpty) {
+        writeSpaced('show-types');
+        writeList(showHideClause.shownSupertypes, visitSupertype);
+      }
+      if (showHideClause.shownMethods.isNotEmpty) {
+        writeSpaced('show-methods');
+        writeList(
+            showHideClause.shownMethods, writeMemberReferenceFromReference);
+      }
+      if (showHideClause.shownGetters.isNotEmpty) {
+        writeSpaced('show-getters');
+        writeList(
+            showHideClause.shownGetters, writeMemberReferenceFromReference);
+      }
+      if (showHideClause.shownSetters.isNotEmpty) {
+        writeSpaced('show-setters');
+        writeList(
+            showHideClause.shownSetters, writeMemberReferenceFromReference);
+      }
+      if (showHideClause.shownOperators.isNotEmpty) {
+        writeSpaced('show-operators');
+        writeList(
+            showHideClause.shownOperators, writeMemberReferenceFromReference);
+      }
+
+      // 'Hide' clause elements.
+      if (showHideClause.hiddenSupertypes.isNotEmpty) {
+        writeSpaced('hide-types');
+        writeList(showHideClause.hiddenSupertypes, visitSupertype);
+      }
+      if (showHideClause.hiddenMethods.isNotEmpty) {
+        writeSpaced('hide-methods');
+        writeList(
+            showHideClause.hiddenMethods, writeMemberReferenceFromReference);
+      }
+      if (showHideClause.hiddenGetters.isNotEmpty) {
+        writeSpaced('hide-getters');
+        writeList(
+            showHideClause.hiddenGetters, writeMemberReferenceFromReference);
+      }
+      if (showHideClause.hiddenSetters.isNotEmpty) {
+        writeSpaced('hide-setters');
+        writeList(
+            showHideClause.hiddenSetters, writeMemberReferenceFromReference);
+      }
+      if (showHideClause.hiddenOperators.isNotEmpty) {
+        writeSpaced('hide-operators');
+        writeList(
+            showHideClause.hiddenOperators, writeMemberReferenceFromReference);
+      }
+    }
+
     String endLineString = ' {';
     if (node.enclosingLibrary.fileUri != node.fileUri) {
       endLineString += ' // from ${node.fileUri}';
     }
+
     endLine(endLineString);
     ++indentation;
     node.members.forEach((ExtensionMemberDescriptor descriptor) {
diff --git a/runtime/vm/compiler/frontend/kernel_translation_helper.cc b/runtime/vm/compiler/frontend/kernel_translation_helper.cc
index 0602be0..442248a 100644
--- a/runtime/vm/compiler/frontend/kernel_translation_helper.cc
+++ b/runtime/vm/compiler/frontend/kernel_translation_helper.cc
@@ -2252,6 +2252,13 @@
   }
 }
 
+void KernelReaderHelper::SkipListOfCanonicalNameReferences() {
+  intptr_t list_length = ReadListLength();  // read list length.
+  for (intptr_t i = 0; i < list_length; ++i) {
+    SkipCanonicalNameReference();
+  }
+}
+
 void KernelReaderHelper::SkipTypeParametersList() {
   intptr_t list_length = ReadListLength();  // read list length.
   for (intptr_t i = 0; i < list_length; ++i) {
diff --git a/runtime/vm/compiler/frontend/kernel_translation_helper.h b/runtime/vm/compiler/frontend/kernel_translation_helper.h
index 39d9d18..d7e5542 100644
--- a/runtime/vm/compiler/frontend/kernel_translation_helper.h
+++ b/runtime/vm/compiler/frontend/kernel_translation_helper.h
@@ -1239,6 +1239,7 @@
   void SkipListOfDartTypes();
   void SkipListOfStrings();
   void SkipListOfVariableDeclarations();
+  void SkipListOfCanonicalNameReferences();
   void SkipTypeParametersList();
   void SkipInitializer();
   void SkipExpression();
diff --git a/runtime/vm/kernel_binary.h b/runtime/vm/kernel_binary.h
index fa1b774..653c0fd 100644
--- a/runtime/vm/kernel_binary.h
+++ b/runtime/vm/kernel_binary.h
@@ -20,8 +20,8 @@
 static const uint32_t kMagicProgramFile = 0x90ABCDEFu;
 
 // Both version numbers are inclusive.
-static const uint32_t kMinSupportedKernelFormatVersion = 70;
-static const uint32_t kMaxSupportedKernelFormatVersion = 70;
+static const uint32_t kMinSupportedKernelFormatVersion = 71;
+static const uint32_t kMaxSupportedKernelFormatVersion = 71;
 
 // Keep in sync with package:kernel/lib/binary/tag.dart
 #define KERNEL_TAG_LIST(V)                                                     \
diff --git a/runtime/vm/kernel_loader.cc b/runtime/vm/kernel_loader.cc
index 3a35bd4..f018ad4 100644
--- a/runtime/vm/kernel_loader.cc
+++ b/runtime/vm/kernel_loader.cc
@@ -1088,6 +1088,16 @@
       helper_.ReadByte();                    // skip flags.
       helper_.SkipTypeParametersList();      // skip type parameter list.
       helper_.SkipDartType();                // skip on-type.
+      helper_.SkipListOfDartTypes();         // skip shown types.
+      helper_.SkipListOfCanonicalNameReferences();  // skip shown members.
+      helper_.SkipListOfCanonicalNameReferences();  // skip shown getters.
+      helper_.SkipListOfCanonicalNameReferences();  // skip shown setters.
+      helper_.SkipListOfCanonicalNameReferences();  // skip shown operators.
+      helper_.SkipListOfDartTypes();                // skip hidden types.
+      helper_.SkipListOfCanonicalNameReferences();  // skip hidden members.
+      helper_.SkipListOfCanonicalNameReferences();  // skip hidden getters.
+      helper_.SkipListOfCanonicalNameReferences();  // skip hidden setters.
+      helper_.SkipListOfCanonicalNameReferences();  // skip hidden operators.
 
       const intptr_t extension_member_count = helper_.ReadListLength();
       for (intptr_t j = 0; j < extension_member_count; ++j) {
