Fine. Move InstanceItemMemberItem.writeKind() into separate method.

Sometimes we know the exact kind, so don't need writing it.

Change-Id: Iaa0573aa6af722ae64f272b6327cd9985e5a6ec7
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/424260
Reviewed-by: Paul Berry <paulberry@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
diff --git a/pkg/analyzer/lib/src/fine/manifest_item.dart b/pkg/analyzer/lib/src/fine/manifest_item.dart
index 17bc66f..17b3572 100644
--- a/pkg/analyzer/lib/src/fine/manifest_item.dart
+++ b/pkg/analyzer/lib/src/fine/manifest_item.dart
@@ -102,7 +102,7 @@
     sink.writeMap(
       declaredMembers,
       writeKey: (name) => name.write(sink),
-      writeValue: (member) => member.write(sink),
+      writeValue: (member) => member.writeWithKind(sink),
     );
   }
 
@@ -158,9 +158,8 @@
   }
 
   @override
-  void write(BufferedSink sink) {
-    sink.writeEnum(_ManifestItemKind2.instanceDuplicate);
-    super.write(sink);
+  void writeKind(BufferedSink sink) {
+    sink.writeEnum(_InstanceItemMemberItemKind.duplicate);
   }
 }
 
@@ -212,11 +211,15 @@
 
   @override
   void write(BufferedSink sink) {
-    sink.writeEnum(_ManifestItemKind2.instanceGetter);
     super.write(sink);
     returnType.write(sink);
     constInitializer.writeOptional(sink);
   }
+
+  @override
+  void writeKind(BufferedSink sink) {
+    sink.writeEnum(_InstanceItemMemberItemKind.getter);
+  }
 }
 
 sealed class InstanceItemMemberItem<E extends ExecutableElementImpl2>
@@ -240,20 +243,27 @@
     sink.writeBool(isStatic);
   }
 
+  void writeKind(BufferedSink sink);
+
+  void writeWithKind(BufferedSink sink) {
+    writeKind(sink);
+    write(sink);
+  }
+
   static InstanceItemMemberItem<ExecutableElementImpl2> read(
     SummaryDataReader reader,
   ) {
-    var kind = reader.readEnum(_ManifestItemKind2.values);
+    var kind = reader.readEnum(_InstanceItemMemberItemKind.values);
     switch (kind) {
-      case _ManifestItemKind2.instanceDuplicate:
+      case _InstanceItemMemberItemKind.duplicate:
         return InstanceItemDuplicateItem.read(reader);
-      case _ManifestItemKind2.instanceGetter:
+      case _InstanceItemMemberItemKind.getter:
         return InstanceItemGetterItem.read(reader);
-      case _ManifestItemKind2.instanceMethod:
+      case _InstanceItemMemberItemKind.method:
         return InstanceItemMethodItem.read(reader);
-      case _ManifestItemKind2.instanceSetter:
+      case _InstanceItemMemberItemKind.setter:
         return InstanceItemSetterItem.read(reader);
-      case _ManifestItemKind2.interfaceConstructor:
+      case _InstanceItemMemberItemKind.constructor:
         return InterfaceItemConstructorItem.read(reader);
     }
   }
@@ -300,10 +310,14 @@
 
   @override
   void write(BufferedSink sink) {
-    sink.writeEnum(_ManifestItemKind2.instanceMethod);
     super.write(sink);
     functionType.writeNoTag(sink);
   }
+
+  @override
+  void writeKind(BufferedSink sink) {
+    sink.writeEnum(_InstanceItemMemberItemKind.method);
+  }
 }
 
 class InstanceItemSetterItem extends InstanceItemMemberItem<SetterElementImpl> {
@@ -349,10 +363,14 @@
 
   @override
   void write(BufferedSink sink) {
-    sink.writeEnum(_ManifestItemKind2.instanceSetter);
     super.write(sink);
     valueType.write(sink);
   }
+
+  @override
+  void writeKind(BufferedSink sink) {
+    sink.writeEnum(_InstanceItemMemberItemKind.setter);
+  }
 }
 
 /// The item for [InterfaceElementImpl2].
@@ -482,13 +500,17 @@
 
   @override
   void write(BufferedSink sink) {
-    sink.writeEnum(_ManifestItemKind2.interfaceConstructor);
     super.write(sink);
     sink.writeBool(isConst);
     sink.writeBool(isFactory);
     functionType.writeNoTag(sink);
     constantInitializers.writeList(sink);
   }
+
+  @override
+  void writeKind(BufferedSink sink) {
+    sink.writeEnum(_InstanceItemMemberItemKind.constructor);
+  }
 }
 
 class ManifestAnnotation {
@@ -811,6 +833,14 @@
   }
 }
 
+enum _InstanceItemMemberItemKind {
+  duplicate,
+  constructor,
+  method,
+  getter,
+  setter,
+}
+
 enum _ManifestItemKind {
   class_,
   mixin_,
@@ -819,14 +849,6 @@
   topLevelSetter,
 }
 
-enum _ManifestItemKind2 {
-  instanceDuplicate,
-  instanceGetter,
-  instanceMethod,
-  instanceSetter,
-  interfaceConstructor,
-}
-
 extension _AnnotatableElementExtension on AnnotatableElementImpl {
   MetadataImpl get effectiveMetadata {
     if (this case PropertyAccessorElementImpl2 accessor) {