Replace isMergingInterfaces with an enum
Change-Id: I4af320373b38d301943e12e2e9916b5eccdd2f31
Reviewed-on: https://dart-review.googlesource.com/c/87964
Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
Commit-Queue: Peter von der Ahé <ahe@google.com>
diff --git a/pkg/front_end/lib/src/fasta/kernel/class_hierarchy_builder.dart b/pkg/front_end/lib/src/fasta/kernel/class_hierarchy_builder.dart
index 6dc9be2..e472c27 100644
--- a/pkg/front_end/lib/src/fasta/kernel/class_hierarchy_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/class_hierarchy_builder.dart
@@ -58,7 +58,7 @@
ClassHierarchyBuilder(this.objectClass);
Declaration handleOverride(KernelClassBuilder cls, Declaration member,
- Declaration superMember, bool isMergingInterfaces) {
+ Declaration superMember, MergeKind mergeKind) {
if (member.next != null || superMember.next != null) {
// Don't check overrides involving duplicated members.
return member;
@@ -68,7 +68,7 @@
if ((memberKind(target) ?? ProcedureKind.Getter) !=
(memberKind(superTarget) ?? ProcedureKind.Getter)) {
String name = member.fullNameForErrors;
- if (isMergingInterfaces) {
+ if (mergeKind == MergeKind.interfaces) {
cls.addProblem(messageInheritedMembersConflict, cls.charOffset,
cls.fullNameForErrors.length,
context: <LocatedMessage>[
@@ -91,7 +91,7 @@
hasNoSuchMethod = true;
}
Declaration result = member;
- if (isMergingInterfaces) {
+ if (mergeKind == MergeKind.interfaces) {
// TODO(ahe): Combine the signatures of member and superMember.
} else if (target.isAbstract) {
if (!superTarget.isAbstract) {
@@ -105,17 +105,17 @@
return result;
}
- void handleNewMember(Declaration member, bool isMergingInterfaces) {
+ void handleNewMember(Declaration member, MergeKind mergeKind) {
Member target = member.target;
- if (!isMergingInterfaces && target.isAbstract) {
+ if (mergeKind == MergeKind.superclass && target.isAbstract) {
abstractMemberCount++;
}
}
void handleInheritance(
- KernelClassBuilder cls, Declaration member, bool isMergingInterfaces) {
+ KernelClassBuilder cls, Declaration member, MergeKind mergeKind) {
Member target = member.target;
- if (!isMergingInterfaces && target.isAbstract) {
+ if (mergeKind == MergeKind.superclass && target.isAbstract) {
if (isNameVisibleIn(target.name, cls.library)) {
abstractMemberCount++;
}
@@ -168,8 +168,10 @@
interfaceMembers = allMembers = sortedLocals;
interfaceSetters = allSetters = sortedSetters;
} else {
- allMembers = merge(cls, sortedLocals, supernode.classMembers, false);
- allSetters = merge(cls, sortedSetters, supernode.classSetters, false);
+ allMembers = merge(
+ cls, sortedLocals, supernode.classMembers, MergeKind.superclass);
+ allSetters = merge(
+ cls, sortedSetters, supernode.classSetters, MergeKind.superclass);
List<KernelTypeBuilder> interfaces = cls.interfaces;
if (interfaces != null) {
MergeResult result = mergeInterfaces(cls, supernode, interfaces);
@@ -224,7 +226,7 @@
while (input.length > 1) {
List<List<Declaration>> output = <List<Declaration>>[];
for (int i = 0; i < input.length - 1; i += 2) {
- output.add(merge(cls, input[i], input[i + 1], true));
+ output.add(merge(cls, input[i], input[i + 1], MergeKind.interfaces));
}
if (input.length.isOdd) {
output.add(input.last);
@@ -359,7 +361,7 @@
KernelClassBuilder cls,
List<Declaration> localMembers,
List<Declaration> superMembers,
- bool isMergingInterfaces) {
+ MergeKind mergeKind) {
final List<Declaration> mergedMembers = new List<Declaration>.filled(
localMembers.length + superMembers.length, null,
growable: true);
@@ -374,28 +376,28 @@
final int compare = compareDeclarations(localMember, superMember);
if (compare == 0) {
mergedMembers[mergedMemberCount++] =
- handleOverride(cls, localMember, superMember, isMergingInterfaces);
+ handleOverride(cls, localMember, superMember, mergeKind);
i++;
j++;
} else if (compare < 0) {
- handleNewMember(localMember, isMergingInterfaces);
+ handleNewMember(localMember, mergeKind);
mergedMembers[mergedMemberCount++] = localMember;
i++;
} else {
- handleInheritance(cls, superMember, isMergingInterfaces);
+ handleInheritance(cls, superMember, mergeKind);
mergedMembers[mergedMemberCount++] = superMember;
j++;
}
}
while (i < localMembers.length) {
final Declaration localMember = localMembers[i];
- handleNewMember(localMember, isMergingInterfaces);
+ handleNewMember(localMember, mergeKind);
mergedMembers[mergedMemberCount++] = localMember;
i++;
}
while (j < superMembers.length) {
final Declaration superMember = superMembers[j];
- handleInheritance(cls, superMember, isMergingInterfaces);
+ handleInheritance(cls, superMember, mergeKind);
mergedMembers[mergedMemberCount++] = superMember;
j++;
}
@@ -442,3 +444,14 @@
MergeResult(this.mergedMembers, this.mergedSetters);
}
+
+enum MergeKind {
+ /// Merging superclass members with the current class.
+ superclass,
+
+ /// Merging two interfaces.
+ interfaces,
+
+ /// Merging class members with interface members.
+ supertypes,
+}