Elements. Remove ClassOrMixinFragmentImpl.

It had very little functionality, and I believe modifiers management
can be improved, in which case it will become more an issue than a
solution.

Change-Id: If6f404d6cb1ca8e6a04ebaa79451d1553b1edfff
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/440066
Reviewed-by: Samuel Rawlins <srawlins@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart
index 172a89a..fe01783 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -553,8 +553,7 @@
 }
 
 /// An [InterfaceFragmentImpl] which is a class.
-class ClassFragmentImpl extends ClassOrMixinFragmentImpl
-    implements ClassFragment {
+class ClassFragmentImpl extends InterfaceFragmentImpl implements ClassFragment {
   @override
   late final ClassElementImpl element;
 
@@ -582,11 +581,14 @@
     setModifier(Modifier.ABSTRACT, isAbstract);
   }
 
-  @override
   bool get isBase {
     return hasModifier(Modifier.BASE);
   }
 
+  set isBase(bool isBase) {
+    setModifier(Modifier.BASE, isBase);
+  }
+
   bool get isConstructable => !isSealed && !isAbstract;
 
   bool get isDartCoreEnum {
@@ -674,23 +676,6 @@
   }
 }
 
-abstract class ClassOrMixinFragmentImpl extends InterfaceFragmentImpl {
-  /// Initialize a newly created class element to have the given [name] at the
-  /// given [offset] in the file that contains the declaration of this element.
-  ClassOrMixinFragmentImpl({
-    required super.name,
-    required super.firstTokenOffset,
-  });
-
-  bool get isBase {
-    return hasModifier(Modifier.BASE);
-  }
-
-  set isBase(bool isBase) {
-    setModifier(Modifier.BASE, isBase);
-  }
-}
-
 class ConstantInitializerImpl implements ConstantInitializer {
   @override
   final VariableFragmentImpl fragment;
@@ -7746,8 +7731,7 @@
 }
 
 /// A [ClassFragmentImpl] representing a mixin declaration.
-class MixinFragmentImpl extends ClassOrMixinFragmentImpl
-    implements MixinFragment {
+class MixinFragmentImpl extends InterfaceFragmentImpl implements MixinFragment {
   @override
   late final MixinElementImpl element;
 
@@ -7762,11 +7746,14 @@
   /// given [offset] in the file that contains the declaration of this element.
   MixinFragmentImpl({required super.name, required super.firstTokenOffset});
 
-  @override
   bool get isBase {
     return hasModifier(Modifier.BASE);
   }
 
+  set isBase(bool isBase) {
+    setModifier(Modifier.BASE, isBase);
+  }
+
   @override
   List<InterfaceTypeImpl> get mixins => const [];
 
diff --git a/pkg/analyzer/lib/src/summary2/instance_member_inferrer.dart b/pkg/analyzer/lib/src/summary2/instance_member_inferrer.dart
index 396bb0e..e4ba18d 100644
--- a/pkg/analyzer/lib/src/summary2/instance_member_inferrer.dart
+++ b/pkg/analyzer/lib/src/summary2/instance_member_inferrer.dart
@@ -791,20 +791,31 @@
 
 extension on InterfaceFragmentImpl {
   bool get isBase {
-    var self = this;
-    if (self is ClassOrMixinFragmentImpl) return self.isBase;
-    return false;
+    switch (this) {
+      case ClassFragmentImpl self:
+        return self.isBase;
+      case MixinFragmentImpl self:
+        return self.isBase;
+      default:
+        return false;
+    }
   }
 
   bool get isFinal {
-    var self = this;
-    if (self is ClassFragmentImpl) return self.isFinal;
-    return false;
+    switch (this) {
+      case ClassFragmentImpl self:
+        return self.isFinal;
+      default:
+        return false;
+    }
   }
 
   bool get isInterface {
-    var self = this;
-    if (self is ClassFragmentImpl) return self.isInterface;
-    return false;
+    switch (this) {
+      case ClassFragmentImpl self:
+        return self.isInterface;
+      default:
+        return false;
+    }
   }
 }