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,
+}