Elements. Remove FragmentImpl.kind, implement non-redirect ElementImpl.kind

Change-Id: Id6e44dee1d44d88cbcb065abff3fce25b8206f0f
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/438322
Reviewed-by: Paul Berry <paulberry@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
diff --git a/pkg/analyzer/lib/src/dart/element/display_string_builder.dart b/pkg/analyzer/lib/src/dart/element/display_string_builder.dart
index f8f8d29..99eb256 100644
--- a/pkg/analyzer/lib/src/dart/element/display_string_builder.dart
+++ b/pkg/analyzer/lib/src/dart/element/display_string_builder.dart
@@ -145,14 +145,14 @@
       _write('augment ');
     }
 
-    if (fragment.kind != ElementKind.SETTER) {
+    if (fragment is! SetterFragmentImpl) {
       _writeType(fragment.returnType);
       _write(' ');
     }
 
     _write(name);
 
-    if (fragment.kind != ElementKind.GETTER) {
+    if (fragment is! GetterFragmentImpl) {
       _writeTypeParameters(fragment.typeParameters);
       _writeFormalParameters(
         fragment.parameters,
diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart
index c087666..9bd4c84 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -369,6 +369,9 @@
   bool get isValidMixin => firstFragment.isValidMixin;
 
   @override
+  ElementKind get kind => ElementKind.CLASS;
+
+  @override
   @trackedDirectlyDisable
   T? accept<T>(ElementVisitor2<T> visitor) {
     globalResultRequirements?.record_disable(this, 'accept2');
@@ -668,9 +671,6 @@
   }
 
   @override
-  ElementKind get kind => ElementKind.CLASS;
-
-  @override
   ClassFragmentImpl? get nextFragment {
     return super.nextFragment as ClassFragmentImpl?;
   }
@@ -1070,9 +1070,6 @@
   }
 
   @override
-  ElementKind get kind => ElementKind.CONSTRUCTOR;
-
-  @override
   int get nameLength {
     var nameEnd = this.nameEnd;
     if (nameEnd == null) {
@@ -1352,9 +1349,6 @@
   Null get enclosingFragment => null;
 
   @override
-  ElementKind get kind => ElementKind.DYNAMIC;
-
-  @override
   Null get library => null;
 
   @override
@@ -2009,6 +2003,9 @@
   }
 
   @override
+  ElementKind get kind => ElementKind.ENUM;
+
+  @override
   T? accept<T>(ElementVisitor2<T> visitor) => visitor.visitEnumElement(this);
 
   @Deprecated('Use accept instead')
@@ -2039,9 +2036,6 @@
   }
 
   @override
-  ElementKind get kind => ElementKind.ENUM;
-
-  @override
   EnumFragmentImpl? get nextFragment => super.nextFragment as EnumFragmentImpl?;
 
   @override
@@ -2416,6 +2410,9 @@
   }
 
   @override
+  ElementKind get kind => ElementKind.EXTENSION;
+
+  @override
   DartType get thisType => extendedType;
 
   @override
@@ -2469,9 +2466,6 @@
   bool get isSimplyBounded => true;
 
   @override
-  ElementKind get kind => ElementKind.EXTENSION;
-
-  @override
   MetadataImpl get metadata {
     _ensureReadResolution();
     return super.metadata;
@@ -2550,6 +2544,9 @@
   }
 
   @override
+  ElementKind get kind => ElementKind.EXTENSION_TYPE;
+
+  @override
   ConstructorElement get primaryConstructor {
     return firstFragment.primaryConstructor.element;
   }
@@ -2607,11 +2604,6 @@
   }
 
   @override
-  ElementKind get kind {
-    return ElementKind.EXTENSION_TYPE;
-  }
-
-  @override
   ExtensionTypeFragmentImpl? get nextFragment =>
       super.nextFragment as ExtensionTypeFragmentImpl?;
 
@@ -2926,9 +2918,6 @@
   }
 
   @override
-  ElementKind get kind => ElementKind.FIELD;
-
-  @override
   MetadataImpl get metadata {
     _ensureReadResolution();
     return super.metadata;
@@ -3332,9 +3321,6 @@
   bool get isSuperFormal => false;
 
   @override
-  ElementKind get kind => ElementKind.PARAMETER;
-
-  @override
   LibraryElementImpl? get library {
     var library = libraryFragment?.element;
     return library as LibraryElementImpl?;
@@ -3689,10 +3675,6 @@
     setModifier(Modifier.SYNTHETIC, isSynthetic);
   }
 
-  /// The kind of element that this is.
-  // TODO(scheglov): remove it
-  ElementKind get kind;
-
   LibraryElementImpl? get library;
 
   /// If this target is associated with a library, return the source of the
@@ -3865,9 +3847,6 @@
     // Local functions cannot be augmented.
     throw UnsupportedError('This is not a fragment');
   }
-
-  @override
-  ElementKind get kind => ElementKind.FUNCTION;
 }
 
 abstract class FunctionTypedElementImpl extends TypeParameterizedElementImpl
@@ -3946,7 +3925,7 @@
   bool get isSynthetic => _wrappedElement.isSynthetic;
 
   @override
-  ElementKind get kind => _wrappedElement.kind;
+  ElementKind get kind => ElementKind.GENERIC_FUNCTION_TYPE;
 
   @override
   LibraryElementImpl get library => _wrappedElement.library;
@@ -4026,9 +4005,6 @@
   List<FormalParameterFragmentImpl> get formalParameters => parameters;
 
   @override
-  ElementKind get kind => ElementKind.GENERIC_FUNCTION_TYPE;
-
-  @override
   String? get name2 => null;
 
   @override
@@ -4199,11 +4175,6 @@
 
   GetterFragmentImpl.forVariable(super.variable) : super.forVariable();
 
-  @override
-  ElementKind get kind {
-    return ElementKind.GETTER;
-  }
-
   void addFragment(GetterFragmentImpl fragment) {
     fragment.element = element;
     fragment.previousFragment = this;
@@ -4321,9 +4292,6 @@
   bool get isSynthetic => firstFragment.isSynthetic;
 
   @override
-  ElementKind get kind => firstFragment.kind;
-
-  @override
   LibraryElementImpl get library => firstFragment.library;
 
   @Deprecated('Use library instead')
@@ -5483,6 +5451,9 @@
   bool get isOnSwitchMember => _wrappedElement.isOnSwitchMember;
 
   @override
+  ElementKind get kind => ElementKind.LABEL;
+
+  @override
   LibraryElement get library => _wrappedElement.library;
 
   @Deprecated('Use library instead')
@@ -5544,9 +5515,6 @@
   bool get isOnSwitchMember => _onSwitchMember;
 
   @override
-  ElementKind get kind => ElementKind.LABEL;
-
-  @override
   LibraryElementImpl get library {
     return libraryFragment.element;
   }
@@ -6332,9 +6300,6 @@
         .toList();
   }
 
-  @override
-  ElementKind get kind => ElementKind.COMPILATION_UNIT;
-
   /// The libraries exported by this unit.
   List<LibraryExportImpl> get libraryExports {
     _ensureReadResolution();
@@ -6783,6 +6748,9 @@
   bool get isStatic => _wrappedElement.isStatic;
 
   @override
+  ElementKind get kind => ElementKind.FUNCTION;
+
+  @override
   MetadataImpl get metadata => _wrappedElement.metadata;
 
   @Deprecated('Use metadata instead')
@@ -6881,6 +6849,9 @@
   bool get isStatic => _wrappedElement.isStatic;
 
   @override
+  ElementKind get kind => ElementKind.LOCAL_VARIABLE;
+
+  @override
   LibraryElementImpl get library => _wrappedElement.library;
 
   @Deprecated('Use library instead')
@@ -6952,9 +6923,6 @@
   }
 
   @override
-  ElementKind get kind => ElementKind.LOCAL_VARIABLE;
-
-  @override
   LibraryFragmentImpl get libraryFragment => enclosingUnit;
 
   @Deprecated('Use metadata instead')
@@ -7533,9 +7501,6 @@
   }
 
   @override
-  ElementKind get kind => ElementKind.METHOD;
-
-  @override
   String? get lookupName {
     if (name2 == '-' && formalParameters.isEmpty) {
       return 'unary-';
@@ -7578,6 +7543,9 @@
   bool get isBase => firstFragment.isBase;
 
   @override
+  ElementKind get kind => ElementKind.MIXIN;
+
+  @override
   List<InterfaceTypeImpl> get superclassConstraints {
     return [for (var fragment in fragments) ...fragment.superclassConstraints];
   }
@@ -7633,9 +7601,6 @@
   }
 
   @override
-  ElementKind get kind => ElementKind.MIXIN;
-
-  @override
   List<InterfaceTypeImpl> get mixins => const [];
 
   @override
@@ -8081,9 +8046,6 @@
   Null get enclosingFragment => null;
 
   @override
-  ElementKind get kind => ElementKind.NEVER;
-
-  @override
   Null get library => null;
 
   @override
@@ -8828,11 +8790,6 @@
   SetterFragmentImpl.forVariable(super.variable) : super.forVariable();
 
   @override
-  ElementKind get kind {
-    return ElementKind.SETTER;
-  }
-
-  @override
   String? get lookupName {
     if (name2 case var name?) {
       return '$name=';
@@ -9272,9 +9229,6 @@
   bool get isStatic => true;
 
   @override
-  ElementKind get kind => ElementKind.TOP_LEVEL_VARIABLE;
-
-  @override
   LibraryFragmentImpl get libraryFragment => enclosingUnit;
 
   @override
@@ -9607,15 +9561,6 @@
   }
 
   @override
-  ElementKind get kind {
-    if (isNonFunctionTypeAliasesEnabled) {
-      return ElementKind.TYPE_ALIAS;
-    } else {
-      return ElementKind.FUNCTION_TYPE_ALIAS;
-    }
-  }
-
-  @override
   MetadataImpl get metadata {
     _ensureReadResolution();
     return super.metadata;
@@ -9844,9 +9789,6 @@
   }
 
   @override
-  ElementKind get kind => ElementKind.TYPE_PARAMETER;
-
-  @override
   LibraryElementImpl? get library {
     var library = libraryFragment?.element;
     return library as LibraryElementImpl?;
@@ -10206,9 +10148,6 @@
   bool get isSynthetic => _wrappedElement.isSynthetic;
 
   @override
-  ElementKind get kind => _wrappedElement.kind;
-
-  @override
   String? get name3 => _wrappedElement.name2;
 
   FragmentImpl get _wrappedElement;
diff --git a/pkg/analyzer/lib/src/summary2/instance_member_inferrer.dart b/pkg/analyzer/lib/src/summary2/instance_member_inferrer.dart
index f28c760..953203e 100644
--- a/pkg/analyzer/lib/src/summary2/instance_member_inferrer.dart
+++ b/pkg/analyzer/lib/src/summary2/instance_member_inferrer.dart
@@ -45,9 +45,9 @@
     ExecutableFragmentImpl element,
     List<ExecutableFragmentImpl> elements,
   ) {
-    var elementKind = element.kind;
+    var elementKind = element.element.kind;
     for (int i = 0; i < elements.length; i++) {
-      if (elements[i].kind != elementKind) {
+      if (elements[i].element.kind != elementKind) {
         return false;
       }
     }