Elements. Move isExtensionTypeMember flag from fragments to elements.

Change-Id: I5d7d209725b3c75478b6fee741290bd531c1a9ea
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/441823
Reviewed-by: Paul Berry <paulberry@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
diff --git a/pkg/analyzer/lib/src/dart/analysis/driver.dart b/pkg/analyzer/lib/src/dart/analysis/driver.dart
index 096c92c..aa640b1 100644
--- a/pkg/analyzer/lib/src/dart/analysis/driver.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/driver.dart
@@ -109,7 +109,7 @@
 // TODO(scheglov): Clean up the list of implicitly analyzed files.
 class AnalysisDriver {
   /// The version of data format, should be incremented on every format change.
-  static const int DATA_VERSION = 508;
+  static const int DATA_VERSION = 509;
 
   /// The number of exception contexts allowed to write. Once this field is
   /// zero, we stop writing any new exception contexts in this process.
diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart
index 6a8525b..2590e70 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -2250,7 +2250,11 @@
 
   @override
   bool get isExtensionTypeMember {
-    return firstFragment.isExtensionTypeMember;
+    return hasModifier(Modifier.EXTENSION_TYPE_MEMBER);
+  }
+
+  set isExtensionTypeMember(bool value) {
+    setModifier(Modifier.EXTENSION_TYPE_MEMBER, value);
   }
 
   @override
@@ -2438,15 +2442,6 @@
     setModifier(Modifier.ASYNCHRONOUS, isAsynchronous);
   }
 
-  /// Whether the executable element is an extension type member.
-  bool get isExtensionTypeMember {
-    return hasModifier(Modifier.EXTENSION_TYPE_MEMBER);
-  }
-
-  set isExtensionTypeMember(bool value) {
-    setModifier(Modifier.EXTENSION_TYPE_MEMBER, value);
-  }
-
   /// Whether the executable element is external.
   ///
   /// Executable elements are external if they are explicitly marked as such
diff --git a/pkg/analyzer/lib/src/summary2/bundle_reader.dart b/pkg/analyzer/lib/src/summary2/bundle_reader.dart
index 85f7246..ec114ed 100644
--- a/pkg/analyzer/lib/src/summary2/bundle_reader.dart
+++ b/pkg/analyzer/lib/src/summary2/bundle_reader.dart
@@ -347,6 +347,7 @@
         reference: reference,
         firstFragment: fragments.first,
       );
+      element.readModifiers(_reader);
 
       // TODO(scheglov): type parameters
       // TODO(scheglov): formal parameters
@@ -785,6 +786,7 @@
       var fragments = _readFragmentsById<GetterFragmentImpl>();
       // TODO(scheglov): link fragments.
       var element = GetterElementImpl(reference, fragments.first);
+      element.readModifiers(_reader);
 
       element.deferReadResolution(
         _createDeferredReadResolutionCallback((reader) {
@@ -912,6 +914,7 @@
         reference: reference,
         firstFragment: fragments.first,
       );
+      element.readModifiers(_reader);
       element.typeInferenceError = _readTopLevelInferenceError();
 
       // TODO(scheglov): type parameters
@@ -1108,6 +1111,7 @@
       var fragments = _readFragmentsById<SetterFragmentImpl>();
       // TODO(scheglov): link fragments.
       var element = SetterElementImpl(reference, fragments.first);
+      element.readModifiers(_reader);
 
       element.deferReadResolution(
         _createDeferredReadResolutionCallback((reader) {
diff --git a/pkg/analyzer/lib/src/summary2/bundle_writer.dart b/pkg/analyzer/lib/src/summary2/bundle_writer.dart
index 1eeaeaa..89330a4 100644
--- a/pkg/analyzer/lib/src/summary2/bundle_writer.dart
+++ b/pkg/analyzer/lib/src/summary2/bundle_writer.dart
@@ -198,6 +198,7 @@
     _sink.writeList(elements, (element) {
       _writeReference(element.reference);
       _sink.writeList(element.fragments, _writeFragmentId);
+      element.writeModifiers(_sink);
 
       _writeElementResolution(() {
         _resolutionSink.withTypeParameters(element.typeParameters, () {
@@ -476,6 +477,7 @@
     _sink.writeList(elements, (element) {
       _writeReference(element.reference);
       _sink.writeList(element.fragments, _writeFragmentId);
+      element.writeModifiers(_sink);
 
       _writeElementResolution(() {
         _resolutionSink.writeType(element.returnType);
@@ -544,6 +546,7 @@
     _sink.writeList(elements, (element) {
       _writeReference(element.reference);
       _sink.writeList(element.fragments, _writeFragmentId);
+      element.writeModifiers(_sink);
       _sink._writeTopLevelInferenceError(element.typeInferenceError);
 
       _writeElementResolution(() {
@@ -682,6 +685,7 @@
     _sink.writeList(elements, (element) {
       _writeReference(element.reference);
       _sink.writeList(element.fragments, _writeFragmentId);
+      element.writeModifiers(_sink);
 
       _writeElementResolution(() {
         _resolutionSink.writeType(element.returnType);
diff --git a/pkg/analyzer/lib/src/summary2/element_builder.dart b/pkg/analyzer/lib/src/summary2/element_builder.dart
index ac55016..03929de 100644
--- a/pkg/analyzer/lib/src/summary2/element_builder.dart
+++ b/pkg/analyzer/lib/src/summary2/element_builder.dart
@@ -106,8 +106,7 @@
       if (instanceElement is ExtensionTypeElementImpl) {
         for (var executable in instanceElement.children) {
           if (executable case ExecutableElementImpl executable) {
-            // TODO(scheglov): should be a flag on the element instead
-            executable.firstFragment.isExtensionTypeMember = true;
+            executable.isExtensionTypeMember = true;
           }
         }
       }
diff --git a/pkg/analyzer/lib/src/summary2/element_flags.dart b/pkg/analyzer/lib/src/summary2/element_flags.dart
index 6a9beb0..877076d 100644
--- a/pkg/analyzer/lib/src/summary2/element_flags.dart
+++ b/pkg/analyzer/lib/src/summary2/element_flags.dart
@@ -267,11 +267,10 @@
   static const int _isAbstract = 1 << 3;
   static const int _isAsynchronous = 1 << 4;
   static const int _isAugmentation = 1 << 5;
-  static const int _isExtensionTypeMember = 1 << 6;
-  static const int _isExternal = 1 << 7;
-  static const int _isGenerator = 1 << 8;
-  static const int _isStatic = 1 << 9;
-  static const int _isSynthetic = 1 << 10;
+  static const int _isExternal = 1 << 6;
+  static const int _isGenerator = 1 << 7;
+  static const int _isStatic = 1 << 8;
+  static const int _isSynthetic = 1 << 9;
 
   static void read(SummaryDataReader reader, MethodFragmentImpl element) {
     var bits = reader.readUInt30();
@@ -282,7 +281,6 @@
     element.isAbstract = (bits & _isAbstract) != 0;
     element.isAsynchronous = (bits & _isAsynchronous) != 0;
     element.isAugmentation = (bits & _isAugmentation) != 0;
-    element.isExtensionTypeMember = (bits & _isExtensionTypeMember) != 0;
     element.isExternal = (bits & _isExternal) != 0;
     element.isGenerator = (bits & _isGenerator) != 0;
     element.isStatic = (bits & _isStatic) != 0;
@@ -300,7 +298,6 @@
     result |= element.isAbstract ? _isAbstract : 0;
     result |= element.isAsynchronous ? _isAsynchronous : 0;
     result |= element.isAugmentation ? _isAugmentation : 0;
-    result |= element.isExtensionTypeMember ? _isExtensionTypeMember : 0;
     result |= element.isExternal ? _isExternal : 0;
     result |= element.isGenerator ? _isGenerator : 0;
     result |= element.isStatic ? _isStatic : 0;
@@ -363,11 +360,10 @@
   static const int _hasImplicitReturnType = 1 << 5;
   static const int _isAbstract = 1 << 6;
   static const int _isAsynchronous = 1 << 7;
-  static const int _isExtensionTypeMember = 1 << 8;
-  static const int _isExternal = 1 << 9;
-  static const int _isGenerator = 1 << 10;
-  static const int _isStatic = 1 << 11;
-  static const int _isSynthetic = 1 << 12;
+  static const int _isExternal = 1 << 8;
+  static const int _isGenerator = 1 << 9;
+  static const int _isStatic = 1 << 10;
+  static const int _isSynthetic = 1 << 11;
 
   static bool isGetter(int flags) => (flags & _isGetter) != 0;
 
@@ -390,7 +386,6 @@
     element.hasImplicitReturnType = (byte & _hasImplicitReturnType) != 0;
     element.isAbstract = (byte & _isAbstract) != 0;
     element.isAsynchronous = (byte & _isAsynchronous) != 0;
-    element.isExtensionTypeMember = (byte & _isExtensionTypeMember) != 0;
     element.isExternal = (byte & _isExternal) != 0;
     element.isGenerator = (byte & _isGenerator) != 0;
     element.isStatic = (byte & _isStatic) != 0;
@@ -410,7 +405,6 @@
     result |= element.hasImplicitReturnType ? _hasImplicitReturnType : 0;
     result |= element.isAbstract ? _isAbstract : 0;
     result |= element.isAsynchronous ? _isAsynchronous : 0;
-    result |= element.isExtensionTypeMember ? _isExtensionTypeMember : 0;
     result |= element.isExternal ? _isExternal : 0;
     result |= element.isGenerator ? _isGenerator : 0;
     result |= element.isStatic ? _isStatic : 0;