[cfe] Add shown and hidden elements to Extension Kernel node
TEST=existing
Change-Id: I8271cb7f4731dea289c855b0c5384f8e181530c9
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/212761
Commit-Queue: Chloe Stefantsova <dmitryas@google.com>
Reviewed-by: Johnni Winther <johnniwinther@google.com>
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) {