Elements. Remove metadata3, store MetadataImpl directly.

This CL continues https://dart-review.googlesource.com/c/sdk/+/430261

Change-Id: I4f717dc25f84571e6f86a470e6ddfcf452928682
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/432161
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
Reviewed-by: Paul Berry <paulberry@google.com>
diff --git a/pkg/analyzer/lib/src/dart/analysis/driver.dart b/pkg/analyzer/lib/src/dart/analysis/driver.dart
index 3fb9960..4491cfb 100644
--- a/pkg/analyzer/lib/src/dart/analysis/driver.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/driver.dart
@@ -110,7 +110,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 = 463;
+  static const int DATA_VERSION = 464;
 
   /// 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 48524dd..044807ec 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -65,6 +65,11 @@
   MetadataImpl get metadata;
 }
 
+abstract class AnnotatableFragmentImpl implements FragmentImpl, Annotatable {
+  @override
+  abstract MetadataImpl metadata;
+}
+
 /// Shared implementation for an augmentable [Fragment].
 mixin AugmentableFragment on FragmentImpl {
   bool get isAugmentation {
@@ -1517,6 +1522,9 @@
   /// The unique instance of this class.
   static final DynamicFragmentImpl instance = DynamicFragmentImpl._();
 
+  @override
+  final MetadataImpl metadata = MetadataImpl(const []);
+
   /// Initialize a newly created instance of this class. Instances of this class
   /// should <b>not</b> be created except as part of creating the type
   /// associated with this element. The single instance of this class should be
@@ -1544,9 +1552,6 @@
   @override
   Null get libraryFragment => null;
 
-  @override
-  MetadataImpl get metadata => MetadataImpl(metadata3);
-
   @Deprecated('Use metadata instead')
   @override
   MetadataImpl get metadata2 => metadata;
@@ -2523,9 +2528,9 @@
   bool get isSynchronous => !isAsynchronous;
 
   @override
-  List<ElementAnnotationImpl> get metadata3 {
+  MetadataImpl get metadata {
     linkedData?.read(this);
-    return super.metadata3;
+    return super.metadata;
   }
 
   @Deprecated('Use name2 instead')
@@ -2695,9 +2700,9 @@
   ElementKind get kind => ElementKind.EXTENSION;
 
   @override
-  List<ElementAnnotationImpl> get metadata3 {
+  MetadataImpl get metadata {
     linkedData?.read(this);
-    return super.metadata3;
+    return super.metadata;
   }
 
   @override
@@ -3150,9 +3155,9 @@
   LibraryElementImpl get library2 => library;
 
   @override
-  List<ElementAnnotationImpl> get metadata3 {
+  MetadataImpl get metadata {
     linkedData?.read(this);
-    return super.metadata3;
+    return super.metadata;
   }
 
   @override
@@ -3375,6 +3380,9 @@
   @override
   int? nameOffset2;
 
+  @override
+  MetadataImpl metadata = MetadataImpl(const []);
+
   /// A list containing all of the parameters defined by this parameter element.
   /// There will only be parameters if this parameter is a function typed
   /// parameter.
@@ -3508,9 +3516,6 @@
     return enclosingFragment?.libraryFragment;
   }
 
-  @override
-  MetadataImpl get metadata => MetadataImpl(metadata3);
-
   @Deprecated('Use metadata instead')
   @override
   MetadataImpl get metadata2 => metadata;
@@ -3584,7 +3589,12 @@
   MetadataImpl get metadata {
     var annotations = <ElementAnnotationImpl>[];
     for (var fragment in _fragments) {
-      annotations.addAll((fragment as FragmentImpl).metadata3);
+      switch (fragment) {
+        case AnnotatableFragmentImpl fragment:
+          annotations.addAll(fragment.metadata.annotations);
+        default:
+          throw StateError('Must have annotatable fragments');
+      }
     }
     return MetadataImpl(annotations);
   }
@@ -3764,9 +3774,6 @@
   /// The modifiers associated with this element.
   EnumSet<Modifier> _modifiers = EnumSet.empty();
 
-  /// A list containing all of the metadata associated with this element.
-  List<ElementAnnotationImpl> _metadata = const [];
-
   /// The documentation comment for this element.
   String? _docComment;
 
@@ -3860,15 +3867,6 @@
   @override
   Source? get librarySource => library?.source;
 
-  @override
-  List<ElementAnnotationImpl> get metadata3 {
-    return _metadata;
-  }
-
-  set metadata3(List<ElementAnnotationImpl> metadata) {
-    _metadata = metadata;
-  }
-
   @Deprecated('Use name2 instead')
   @override
   String? get name => _name;
@@ -4035,13 +4033,6 @@
   /// library's defining compilation unit; otherwise return `null`.
   Source? get librarySource;
 
-  /// All of the metadata associated with this element.
-  ///
-  /// The array will be empty if the element does not have any metadata or if
-  /// the library containing this element has not yet been resolved.
-  // TODO(scheglov): replace with `metadata` in [Annotatable] fragments.
-  List<ElementAnnotation> get metadata3;
-
   /// The name of this element, or `null` if this element does not have a name.
   @Deprecated('Use name2 instead')
   String? get name;
@@ -4989,9 +4980,9 @@
   }
 
   @override
-  List<ElementAnnotationImpl> get metadata3 {
+  MetadataImpl get metadata {
     linkedData?.read(this);
-    return super.metadata3;
+    return super.metadata;
   }
 
   @override
@@ -5784,6 +5775,8 @@
   @override
   Reference? reference;
 
+  MetadataImpl _metadata = MetadataImpl(const []);
+
   @override
   String? documentationComment;
 
@@ -5798,8 +5791,6 @@
 
   bool hasTypeProviderSystemSet = false;
 
-  List<ElementAnnotationImpl> _annotations = [];
-
   @override
   late TypeProviderImpl typeProvider;
 
@@ -5891,15 +5882,6 @@
     this.featureSet,
   );
 
-  List<ElementAnnotationImpl> get annotations {
-    linkedData?.read(this);
-    return _annotations;
-  }
-
-  set annotations(List<ElementAnnotationImpl> value) {
-    _annotations = value;
-  }
-
   @override
   LibraryElementImpl get baseElement => this;
 
@@ -6061,7 +6043,12 @@
 
   @override
   MetadataImpl get metadata {
-    return MetadataImpl(annotations);
+    linkedData?.read(this);
+    return _metadata;
+  }
+
+  set metadata(MetadataImpl value) {
+    _metadata = value;
   }
 
   @Deprecated('Use metadata instead')
@@ -6313,6 +6300,10 @@
   @override
   final LibraryElementImpl library;
 
+  @override
+  // TODO(scheglov): Why is it even annotatable?
+  final MetadataImpl metadata = MetadataImpl(const []);
+
   /// The libraries exported by this unit.
   List<LibraryExportImpl> _libraryExports = _Sentinel.libraryExport;
 
@@ -6564,19 +6555,10 @@
   @override
   Source get librarySource => library.source;
 
-  @override
-  MetadataImpl get metadata => MetadataImpl(metadata3);
-
   @Deprecated('Use metadata instead')
   @override
   MetadataImpl get metadata2 => metadata;
 
-  @override
-  List<ElementAnnotationImpl> get metadata3 {
-    linkedData?.read(this);
-    return super.metadata3;
-  }
-
   List<MixinFragmentImpl> get mixins {
     return _mixins;
   }
@@ -7030,7 +7012,7 @@
   }
 
   @override
-  MetadataImpl get metadata => MetadataImpl(_wrappedElement.metadata3);
+  MetadataImpl get metadata => _wrappedElement.metadata;
 
   @Deprecated('Use metadata instead')
   @override
@@ -7070,6 +7052,9 @@
   String? name2;
 
   @override
+  MetadataImpl metadata = MetadataImpl(const []);
+
+  @override
   late bool hasInitializer;
 
   /// Initialize a newly created method element to have the given [name] and
@@ -7108,6 +7093,10 @@
   @override
   LibraryFragmentImpl get libraryFragment => enclosingUnit;
 
+  @Deprecated('Use metadata instead')
+  @override
+  MetadataImpl get metadata2 => metadata;
+
   @override
   // TODO(scheglov): make it a nullable field
   int? get nameOffset2 => nameOffset;
@@ -8186,6 +8175,9 @@
   /// The unique instance of this class.
   static final instance = NeverFragmentImpl._();
 
+  @override
+  final MetadataImpl metadata = MetadataImpl(const []);
+
   /// Initialize a newly created instance of this class. Instances of this class
   /// should <b>not</b> be created except as part of creating the type
   /// associated with this element. The single instance of this class should be
@@ -8212,9 +8204,6 @@
   @override
   Null get libraryFragment => null;
 
-  @override
-  MetadataImpl get metadata => MetadataImpl(metadata3);
-
   @Deprecated('Use metadata instead')
   @override
   MetadataImpl get metadata2 => metadata;
@@ -8416,6 +8405,9 @@
   /// Whether the parameter is both a required and positional parameter.
   bool get isRequiredPositional => parameterKind.isRequiredPositional;
 
+  @override
+  MetadataImpl get metadata;
+
   ParameterKind get parameterKind;
 
   /// The parameters defined by this parameter.
@@ -8989,9 +8981,9 @@
   }
 
   @override
-  List<ElementAnnotationImpl> get metadata3 {
+  MetadataImpl get metadata {
     linkedData?.read(this);
-    return super.metadata3;
+    return super.metadata;
   }
 
   @Deprecated('Use name2 instead')
@@ -9050,6 +9042,9 @@
   int? nameOffset2;
 
   @override
+  MetadataImpl metadata = MetadataImpl(const []);
+
+  @override
   PropertyInducingElementImpl? previousFragment;
 
   @override
@@ -9129,9 +9124,6 @@
     return enclosingFragment.libraryFragment!;
   }
 
-  @override
-  MetadataImpl get metadata => MetadataImpl(metadata3);
-
   @Deprecated('Use metadata instead')
   @override
   MetadataImpl get metadata2 => metadata;
@@ -9793,9 +9785,9 @@
   LibraryElementImpl get library2 => library;
 
   @override
-  List<ElementAnnotationImpl> get metadata3 {
+  MetadataImpl get metadata {
     linkedData?.read(this);
-    return super.metadata3;
+    return super.metadata;
   }
 
   @override
@@ -10121,9 +10113,9 @@
   }
 
   @override
-  List<ElementAnnotationImpl> get metadata3 {
+  MetadataImpl get metadata {
     linkedData?.read(this);
-    return super.metadata3;
+    return super.metadata;
   }
 
   @Deprecated('Use name2 instead')
@@ -10250,13 +10242,16 @@
 }
 
 class TypeParameterFragmentImpl extends FragmentImpl
-    implements TypeParameterFragment {
+    implements AnnotatableFragmentImpl, TypeParameterFragment {
   @override
   String? name2;
 
   @override
   int? nameOffset2;
 
+  @override
+  MetadataImpl metadata = MetadataImpl(const []);
+
   /// The default value of the type parameter. It is used to provide the
   /// corresponding missing type argument in type annotations and as the
   /// fall-back type value in type inference.
@@ -10359,9 +10354,6 @@
     return enclosingFragment?.libraryFragment;
   }
 
-  @override
-  MetadataImpl get metadata => MetadataImpl(metadata3);
-
   @Deprecated('Use metadata instead')
   @override
   MetadataImpl get metadata2 => metadata;
@@ -10454,9 +10446,15 @@
 
 /// Mixin representing an element which can have type parameters.
 mixin TypeParameterizedElementMixin on FragmentImpl
-    implements _ExistingElementImpl, TypeParameterizedFragment {
+    implements
+        _ExistingElementImpl,
+        AnnotatableFragmentImpl,
+        TypeParameterizedFragment {
   List<TypeParameterFragmentImpl> _typeParameters = const [];
 
+  @override
+  MetadataImpl metadata = MetadataImpl(const []);
+
   /// If the element defines a type, indicates whether the type may safely
   /// appear without explicit type parameters as the bounds of a type parameter
   /// declaration.
@@ -10469,9 +10467,6 @@
 
   ElementLinkedData? get linkedData;
 
-  @override
-  MetadataImpl get metadata => MetadataImpl(metadata3);
-
   @Deprecated('Use metadata instead')
   @override
   MetadataImpl get metadata2 => metadata;
@@ -10545,7 +10540,7 @@
 /// Common base class for all analyzer-internal classes that implement
 /// `VariableElement`.
 abstract class VariableElementOrMember
-    implements FragmentOrMember, ConstantEvaluationTarget {
+    implements FragmentOrMember, Annotatable, ConstantEvaluationTarget {
   @override
   VariableFragmentImpl get declaration;
 
@@ -10594,7 +10589,10 @@
 }
 
 abstract class VariableFragmentImpl extends FragmentImpl
-    implements VariableElementOrMember, VariableFragment {
+    implements
+        VariableElementOrMember,
+        AnnotatableFragmentImpl,
+        VariableFragment {
   /// The type of this variable.
   TypeImpl? _type;
 
diff --git a/pkg/analyzer/lib/src/dart/element/member.dart b/pkg/analyzer/lib/src/dart/element/member.dart
index 7b5a75b..93adf35 100644
--- a/pkg/analyzer/lib/src/dart/element/member.dart
+++ b/pkg/analyzer/lib/src/dart/element/member.dart
@@ -803,9 +803,6 @@
   @override
   Source? get librarySource => _declaration.librarySource;
 
-  @override
-  List<ElementAnnotation> get metadata3 => _declaration.metadata3;
-
   @Deprecated('Use name2 instead')
   @override
   String? get name => _declaration.name;
diff --git a/pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart b/pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart
index 8d5a488..db94cde 100644
--- a/pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart
@@ -1824,7 +1824,7 @@
   }
 
   void _setOrCreateMetadataElements(
-    FragmentImpl element,
+    AnnotatableFragmentImpl element,
     NodeList<AnnotationImpl> annotations, {
     bool visitNodes = true,
   }) {
@@ -1832,12 +1832,13 @@
       annotations.accept(this);
     }
     if (_elementWalker != null) {
-      _setElementAnnotations(annotations, element.metadata3);
+      _setElementAnnotations(annotations, element.metadata.annotations);
     } else if (annotations.isNotEmpty) {
-      element.metadata3 =
-          annotations.map((annotation) {
-            return annotation.elementAnnotation!;
-          }).toList();
+      element.metadata = MetadataImpl(
+        annotations.map((annotation) {
+          return annotation.elementAnnotation!;
+        }).toList(),
+      );
     }
   }
 
diff --git a/pkg/analyzer/lib/src/summary2/bundle_reader.dart b/pkg/analyzer/lib/src/summary2/bundle_reader.dart
index 6f852b0..91c723b 100644
--- a/pkg/analyzer/lib/src/summary2/bundle_reader.dart
+++ b/pkg/analyzer/lib/src/summary2/bundle_reader.dart
@@ -129,7 +129,7 @@
 
   @override
   void _read(element, reader) {
-    element.metadata3 = reader._readAnnotationList(unitElement: unitElement);
+    element.metadata = reader._readMetadata(unitElement: unitElement);
     _readTypeParameters(reader, element.typeParameters);
     element.supertype = reader._readOptionalInterfaceType();
     element.mixins = reader._readInterfaceTypeList();
@@ -217,7 +217,7 @@
   void _read(element, reader) {
     _addEnclosingElementTypeParameters(reader, element);
 
-    element.metadata3 = reader._readAnnotationList(unitElement: unitElement);
+    element.metadata = reader._readMetadata(unitElement: unitElement);
     reader._addFormalParameters(element.parameters);
     _readFormalParameters(reader, element.parameters);
     element.superConstructor =
@@ -302,9 +302,7 @@
     List<FormalParameterFragmentImpl> parameters,
   ) {
     for (var parameter in parameters) {
-      parameter.metadata3 = reader._readAnnotationList(
-        unitElement: unitElement,
-      );
+      parameter.metadata = reader._readMetadata(unitElement: unitElement);
       _readTypeParameters(reader, parameter.typeParameters);
       _readFormalParameters(reader, parameter.parameters);
       parameter.type = reader.readRequiredType();
@@ -327,9 +325,7 @@
   ) {
     reader._addTypeParameters(typeParameters);
     for (var typeParameter in typeParameters) {
-      typeParameter.metadata3 = reader._readAnnotationList(
-        unitElement: unitElement,
-      );
+      typeParameter.metadata = reader._readMetadata(unitElement: unitElement);
       typeParameter.bound = reader.readType();
       typeParameter.defaultType = reader.readType();
     }
@@ -353,7 +349,7 @@
 
   @override
   void _read(element, reader) {
-    element.metadata3 = reader._readAnnotationList(
+    element.metadata = reader._readMetadata(
       unitElement: element.enclosingElement3,
     );
     _readTypeParameters(reader, element.typeParameters);
@@ -382,7 +378,7 @@
 
   @override
   void _read(element, reader) {
-    element.metadata3 = reader._readAnnotationList(
+    element.metadata = reader._readMetadata(
       unitElement: element.enclosingElement3,
     );
     _readTypeParameters(reader, element.typeParameters);
@@ -412,7 +408,7 @@
 
   @override
   void _read(element, reader) {
-    element.metadata3 = reader._readAnnotationList(
+    element.metadata = reader._readMetadata(
       unitElement: element.enclosingElement3,
     );
     _readTypeParameters(reader, element.typeParameters);
@@ -440,7 +436,7 @@
   @override
   void _read(element, reader) {
     _addEnclosingElementTypeParameters(reader, element);
-    element.metadata3 = reader._readAnnotationList(unitElement: unitElement);
+    element.metadata = reader._readMetadata(unitElement: unitElement);
     element.type = reader.readRequiredType();
 
     if (element is ConstFieldFragmentImpl) {
@@ -472,7 +468,7 @@
 
   @override
   void _read(element, reader) {
-    element.metadata3 = reader._readAnnotationList(unitElement: unitElement);
+    element.metadata = reader._readMetadata(unitElement: unitElement);
     _readTypeParameters(reader, element.typeParameters);
     element.returnType = reader.readRequiredType();
     _readFormalParameters(reader, element.parameters);
@@ -529,7 +525,7 @@
 
   @override
   void _read(element, reader) {
-    element.annotations = reader._readAnnotationList(unitElement: unitElement);
+    element.metadata = reader._readMetadata(unitElement: unitElement);
 
     element.entryPoint2 = reader.readElement() as TopLevelFunctionElementImpl?;
 
@@ -1872,7 +1868,7 @@
   @override
   void _read(element, reader) {
     _addEnclosingElementTypeParameters(reader, element);
-    element.metadata3 = reader._readAnnotationList(unitElement: unitElement);
+    element.metadata = reader._readMetadata(unitElement: unitElement);
     _readTypeParameters(reader, element.typeParameters);
     _readFormalParameters(reader, element.parameters);
     element.returnType = reader.readRequiredType();
@@ -1897,7 +1893,7 @@
 
   @override
   void _read(element, reader) {
-    element.metadata3 = reader._readAnnotationList(
+    element.metadata = reader._readMetadata(
       unitElement: element.enclosingElement3,
     );
     _readTypeParameters(reader, element.typeParameters);
@@ -1928,7 +1924,7 @@
   void _read(element, reader) {
     _addEnclosingElementTypeParameters(reader, element);
 
-    element.metadata3 = reader._readAnnotationList(unitElement: unitElement);
+    element.metadata = reader._readMetadata(unitElement: unitElement);
 
     element.returnType = reader.readRequiredType();
     _readFormalParameters(reader, element.parameters);
@@ -2313,7 +2309,7 @@
         // TODO(scheglov): reuse for formal parameters
         _localElements.length -= typeParameters.length;
         if (unitElement != null) {
-          element.metadata3 = _readAnnotationList(unitElement: unitElement);
+          element.metadata = _readMetadata(unitElement: unitElement);
         }
         return element;
       } else {
@@ -2330,7 +2326,7 @@
         // TODO(scheglov): reuse for formal parameters
         _localElements.length -= typeParameters.length;
         if (unitElement != null) {
-          element.metadata3 = _readAnnotationList(unitElement: unitElement);
+          element.metadata = _readMetadata(unitElement: unitElement);
         }
         return element;
       }
@@ -2381,6 +2377,11 @@
     return readTypedList(_readInterfaceType);
   }
 
+  MetadataImpl _readMetadata({required LibraryFragmentImpl unitElement}) {
+    var annotations = _readAnnotationList(unitElement: unitElement);
+    return MetadataImpl(annotations);
+  }
+
   List<T> _readNodeList<T>() {
     return readTypedList(() {
       return _readRequiredNode() as T;
@@ -2451,7 +2452,7 @@
     for (var typeParameter in typeParameters) {
       typeParameter.bound = readType();
       if (unitElement != null) {
-        typeParameter.metadata3 = _readAnnotationList(unitElement: unitElement);
+        typeParameter.metadata = _readMetadata(unitElement: unitElement);
       }
     }
     return typeParameters;
@@ -2490,7 +2491,7 @@
 
   @override
   void _read(element, reader) {
-    element.metadata3 = reader._readAnnotationList(unitElement: unitElement);
+    element.metadata = reader._readMetadata(unitElement: unitElement);
     element.type = reader.readRequiredType();
 
     if (element is ConstTopLevelVariableFragmentImpl) {
@@ -2522,7 +2523,7 @@
 
   @override
   void _read(element, reader) {
-    element.metadata3 = reader._readAnnotationList(unitElement: unitElement);
+    element.metadata = reader._readMetadata(unitElement: unitElement);
     _readTypeParameters(reader, element.typeParameters);
     element.aliasedElement = reader._readAliasedElement(unitElement);
     element.aliasedType = reader.readRequiredType();
diff --git a/pkg/analyzer/lib/src/summary2/bundle_writer.dart b/pkg/analyzer/lib/src/summary2/bundle_writer.dart
index 1f2df75..de7a542 100644
--- a/pkg/analyzer/lib/src/summary2/bundle_writer.dart
+++ b/pkg/analyzer/lib/src/summary2/bundle_writer.dart
@@ -133,7 +133,7 @@
     _writeFragmentName(fragment);
     ClassElementFlags.write(_sink, fragment);
 
-    _resolutionSink._writeAnnotationList(fragment.metadata3);
+    _resolutionSink._writeMetadata(fragment.metadata);
 
     _writeTypeParameters(fragment.typeParameters, () {
       _resolutionSink.writeType(fragment.supertype);
@@ -163,7 +163,7 @@
     _sink._writeOptionalStringReference(element.typeName);
     _sink._writeStringReference(element.name2);
     ConstructorElementFlags.write(_sink, element);
-    _resolutionSink._writeAnnotationList(element.metadata3);
+    _resolutionSink._writeMetadata(element.metadata);
 
     _resolutionSink.localElements.withElements(element.parameters, () {
       _writeList(element.parameters, _writeParameterElement);
@@ -216,7 +216,7 @@
     _writeFragmentName(fragment);
     EnumElementFlags.write(_sink, fragment);
 
-    _resolutionSink._writeAnnotationList(fragment.metadata3);
+    _resolutionSink._writeMetadata(fragment.metadata);
 
     _writeTypeParameters(fragment.typeParameters, () {
       _resolutionSink.writeType(fragment.supertype);
@@ -267,7 +267,7 @@
     _writeFragmentName(fragment);
     ExtensionElementFlags.write(_sink, fragment);
 
-    _resolutionSink._writeAnnotationList(fragment.metadata3);
+    _resolutionSink._writeMetadata(fragment.metadata);
 
     _writeTypeParameters(fragment.typeParameters, () {
       var element = fragment.element;
@@ -292,7 +292,7 @@
     _writeFragmentName(fragment);
     ExtensionTypeElementFlags.write(_sink, fragment);
 
-    _resolutionSink._writeAnnotationList(fragment.metadata3);
+    _resolutionSink._writeMetadata(fragment.metadata);
 
     _writeTypeParameters(fragment.typeParameters, () {
       _resolutionSink._writeTypeList(fragment.interfaces);
@@ -327,7 +327,7 @@
     _sink.writeBool(element is ConstFieldFragmentImpl);
     FieldElementFlags.write(_sink, element);
     _sink._writeTopLevelInferenceError(element.typeInferenceError);
-    _resolutionSink._writeAnnotationList(element.metadata3);
+    _resolutionSink._writeMetadata(element.metadata);
     _resolutionSink.writeType(element.type);
     _resolutionSink._writeOptionalNode(element.constantInitializer);
   }
@@ -364,7 +364,7 @@
     _writeFragmentName(fragment);
     FunctionElementFlags.write(_sink, fragment);
 
-    _resolutionSink._writeAnnotationList(fragment.metadata3);
+    _resolutionSink._writeMetadata(fragment.metadata);
 
     _writeTypeParameters(fragment.typeParameters, () {
       _resolutionSink.writeType(fragment.returnType);
@@ -429,7 +429,7 @@
     _sink._writeStringReference(fragment.name2 ?? '');
     MethodElementFlags.write(_sink, fragment);
 
-    _resolutionSink._writeAnnotationList(fragment.metadata3);
+    _resolutionSink._writeMetadata(fragment.metadata);
 
     _writeTypeParameters(fragment.typeParameters, () {
       _writeList(fragment.parameters, _writeParameterElement);
@@ -446,7 +446,7 @@
     _writeFragmentName(fragment);
     MixinElementFlags.write(_sink, fragment);
 
-    _resolutionSink._writeAnnotationList(fragment.metadata3);
+    _resolutionSink._writeMetadata(fragment.metadata);
 
     _writeTypeParameters(fragment.typeParameters, () {
       _resolutionSink._writeTypeList(fragment.superclassConstraints);
@@ -499,7 +499,7 @@
     _sink._writeFormalParameterKind(element);
     ParameterElementFlags.write(_sink, element);
 
-    _resolutionSink._writeAnnotationList(element.metadata3);
+    _resolutionSink._writeMetadata(element.metadata);
 
     _writeTypeParameters(element.typeParameters, () {
       _writeList(element.parameters, _writeParameterElement);
@@ -535,7 +535,7 @@
     _writeFragmentName(fragment);
     PropertyAccessorElementFlags.write(_sink, fragment);
 
-    _resolutionSink._writeAnnotationList(fragment.metadata3);
+    _resolutionSink._writeMetadata(fragment.metadata);
     _resolutionSink.writeType(fragment.returnType);
     _writeList(fragment.parameters, _writeParameterElement);
 
@@ -578,7 +578,7 @@
     _sink.writeBool(fragment.isConst);
     TopLevelVariableElementFlags.write(_sink, fragment);
     _sink._writeTopLevelInferenceError(fragment.typeInferenceError);
-    _resolutionSink._writeAnnotationList(fragment.metadata3);
+    _resolutionSink._writeMetadata(fragment.metadata);
     _resolutionSink.writeType(fragment.type);
 
     _resolutionSink._writeOptionalNode(fragment.constantInitializer);
@@ -594,7 +594,7 @@
     _sink.writeBool(fragment.isFunctionTypeAliasBased);
     TypeAliasElementFlags.write(_sink, fragment);
 
-    _resolutionSink._writeAnnotationList(fragment.metadata3);
+    _resolutionSink._writeMetadata(fragment.metadata);
 
     _writeTypeParameters(fragment.typeParameters, () {
       _resolutionSink._writeAliasedElement(fragment.aliasedElement);
@@ -606,7 +606,7 @@
     _sink._writeStringReference(element.name2 ?? '');
     _writeFragmentName(element);
     _sink.writeByte(_encodeVariance(element).index);
-    _resolutionSink._writeAnnotationList(element.metadata3);
+    _resolutionSink._writeMetadata(element.metadata);
     _resolutionSink.writeType(element.bound);
     _resolutionSink.writeType(element.defaultType);
   }
@@ -921,7 +921,7 @@
         );
       }, withAnnotations: withAnnotations);
       if (withAnnotations) {
-        _writeAnnotationList(parameter.metadata3);
+        _writeMetadata(parameter.metadata);
       }
     }
   }
@@ -950,6 +950,10 @@
     _writeNullabilitySuffix(type.nullabilitySuffix);
   }
 
+  void _writeMetadata(MetadataImpl metadata) {
+    _writeAnnotationList(metadata.annotations);
+  }
+
   void _writeNode(AstNode node) {
     var astWriter = AstBinaryWriter(sink: this, stringIndexer: _stringIndexer);
     node.accept(astWriter);
@@ -1019,7 +1023,7 @@
       for (var typeParameter in typeParameters) {
         writeType(typeParameter.bound);
         if (withAnnotations) {
-          _writeAnnotationList(typeParameter.metadata3);
+          _writeMetadata(typeParameter.metadata);
         }
       }
       f();
diff --git a/pkg/analyzer/lib/src/summary2/element_builder.dart b/pkg/analyzer/lib/src/summary2/element_builder.dart
index f9e4c37..6b52dc5 100644
--- a/pkg/analyzer/lib/src/summary2/element_builder.dart
+++ b/pkg/analyzer/lib/src/summary2/element_builder.dart
@@ -76,7 +76,7 @@
       libraryElement.documentationComment = getCommentNodeRawText(
         libraryDirective.documentationComment,
       );
-      libraryElement.annotations = _buildAnnotations(libraryDirective.metadata);
+      libraryElement.metadata = _buildMetadata(libraryDirective.metadata);
       return;
     }
 
@@ -86,17 +86,14 @@
       libraryElement.documentationComment = getCommentNodeRawText(
         firstDirective.documentationComment,
       );
-      List<ElementAnnotationImpl>? firstDirectiveMetadata;
+      MetadataImpl? firstDirectiveMetadata;
       switch (firstDirective) {
         case ExportDirectiveImpl():
-          firstDirectiveMetadata =
-              firstDirective.libraryExport?.metadata.annotations;
+          firstDirectiveMetadata = firstDirective.libraryExport?.metadata;
         case ImportDirectiveImpl():
-          firstDirectiveMetadata =
-              firstDirective.libraryImport?.metadata.annotations;
+          firstDirectiveMetadata = firstDirective.libraryImport?.metadata;
         case PartDirectiveImpl():
-          firstDirectiveMetadata =
-              firstDirective.partInclude?.metadata.annotations;
+          firstDirectiveMetadata = firstDirective.partInclude?.metadata;
         case LibraryDirectiveImpl():
           // Impossible, since there is no library directive.
           break;
@@ -106,7 +103,7 @@
           break;
       }
       if (firstDirectiveMetadata != null) {
-        libraryElement.annotations = firstDirectiveMetadata;
+        libraryElement.metadata = firstDirectiveMetadata;
       }
     }
   }
@@ -131,7 +128,7 @@
       fragment.isSealed = true;
     }
     fragment.hasExtendsClause = node.extendsClause != null;
-    fragment.metadata3 = _buildAnnotations(node.metadata);
+    fragment.metadata = _buildMetadata(node.metadata);
     _setCodeRange(fragment, node);
     _setDocumentation(fragment, node);
 
@@ -203,7 +200,7 @@
       fragment.isAbstract = true;
       fragment.isSealed = true;
     }
-    fragment.metadata3 = _buildAnnotations(node.metadata);
+    fragment.metadata = _buildMetadata(node.metadata);
     _setCodeRange(fragment, node);
     _setDocumentation(fragment, node);
 
@@ -265,7 +262,7 @@
     element.isConst = node.constKeyword != null;
     element.isExternal = node.externalKeyword != null;
     element.isFactory = node.factoryKeyword != null;
-    element.metadata3 = _buildAnnotations(node.metadata);
+    element.metadata = _buildMetadata(node.metadata);
     element.typeName = node.returnType.name;
     element.typeNameOffset = node.returnType.offset;
     element.periodOffset = node.period?.offset;
@@ -310,7 +307,7 @@
     fragment.name2 = name2;
     fragment.nameOffset2 = _getFragmentNameOffset(nameToken);
     fragment.isAugmentation = node.augmentKeyword != null;
-    fragment.metadata3 = _buildAnnotations(node.metadata);
+    fragment.metadata = _buildMetadata(node.metadata);
     _setCodeRange(fragment, node);
     _setDocumentation(fragment, node);
 
@@ -366,10 +363,7 @@
       field.nameOffset2 = _getFragmentNameOffset(nameToken);
       _setCodeRange(field, constant);
       _setDocumentation(field, constant);
-      field.metadata3 = _buildAnnotationsWithUnit(
-        _unitElement,
-        constant.metadata,
-      );
+      field.metadata = _buildMetadata(constant.metadata);
 
       var constantArguments = constant.arguments;
       var constructorSelector = constantArguments?.constructorSelector;
@@ -538,7 +532,7 @@
     fragment.name2 = name2;
     fragment.nameOffset2 = _getFragmentNameOffset(nameToken);
     fragment.isAugmentation = node.augmentKeyword != null;
-    fragment.metadata3 = _buildAnnotations(node.metadata);
+    fragment.metadata = _buildMetadata(node.metadata);
     _setCodeRange(fragment, node);
     _setDocumentation(fragment, node);
 
@@ -624,7 +618,7 @@
     fragment.name2 = name2;
     fragment.nameOffset2 = _getFragmentNameOffset(nameToken);
     fragment.isAugmentation = node.augmentKeyword != null;
-    fragment.metadata3 = _buildAnnotations(node.metadata);
+    fragment.metadata = _buildMetadata(node.metadata);
     _setCodeRange(fragment, node);
     _setDocumentation(fragment, node);
 
@@ -690,7 +684,7 @@
 
   @override
   void visitFieldDeclaration(covariant FieldDeclarationImpl node) {
-    var metadata = _buildAnnotations(node.metadata);
+    var metadata = _buildMetadata(node.metadata);
     for (var variable in node.fields.variables) {
       var nameToken = variable.name;
       var name = nameToken.lexeme;
@@ -724,7 +718,7 @@
       fragment.isFinal = node.fields.isFinal;
       fragment.isLate = node.fields.isLate;
       fragment.isStatic = node.isStatic;
-      fragment.metadata3 = metadata;
+      fragment.metadata = metadata;
       _setCodeRange(fragment, variable);
       _setDocumentation(fragment, node);
 
@@ -775,7 +769,7 @@
     fragment.name2 = _getFragmentName(nameToken);
     fragment.nameOffset2 = _getFragmentNameOffset(nameToken);
     fragment.hasImplicitType = node.type == null && node.parameters == null;
-    fragment.metadata3 = _buildAnnotations(node.metadata);
+    fragment.metadata = _buildMetadata(node.metadata);
     _setCodeRange(fragment, node);
 
     node.declaredFragment = fragment;
@@ -937,7 +931,7 @@
     executableFragment.isAsynchronous = body.isAsynchronous;
     executableFragment.isExternal = node.externalKeyword != null;
     executableFragment.isGenerator = body.isGenerator;
-    executableFragment.metadata3 = _buildAnnotations(node.metadata);
+    executableFragment.metadata = _buildMetadata(node.metadata);
     _setCodeRange(executableFragment, node);
     _setDocumentation(executableFragment, node);
 
@@ -972,7 +966,7 @@
     fragment.name2 = name2;
     fragment.nameOffset2 = _getFragmentNameOffset(nameToken);
     fragment.isFunctionTypeAliasBased = true;
-    fragment.metadata3 = _buildAnnotations(node.metadata);
+    fragment.metadata = _buildMetadata(node.metadata);
     _setCodeRange(fragment, node);
     _setDocumentation(fragment, node);
 
@@ -1057,7 +1051,7 @@
     fragment.nameOffset2 = _getFragmentNameOffset(nameToken);
     fragment.isExplicitlyCovariant = node.covariantKeyword != null;
     fragment.isFinal = node.isFinal;
-    fragment.metadata3 = _buildAnnotations(node.metadata);
+    fragment.metadata = _buildMetadata(node.metadata);
     _setCodeRange(fragment, node);
 
     node.declaredFragment = fragment;
@@ -1124,7 +1118,7 @@
     fragment.name2 = name2;
     fragment.nameOffset2 = _getFragmentNameOffset(nameToken);
     fragment.isAugmentation = node.augmentKeyword != null;
-    fragment.metadata3 = _buildAnnotations(node.metadata);
+    fragment.metadata = _buildMetadata(node.metadata);
     _setCodeRange(fragment, node);
     _setDocumentation(fragment, node);
 
@@ -1281,7 +1275,7 @@
     executableFragment.isExternal =
         node.externalKeyword != null || node.body is NativeFunctionBody;
     executableFragment.isGenerator = node.body.isGenerator;
-    executableFragment.metadata3 = _buildAnnotations(node.metadata);
+    executableFragment.metadata = _buildMetadata(node.metadata);
     _setCodeRange(executableFragment, node);
     _setDocumentation(executableFragment, node);
 
@@ -1309,7 +1303,7 @@
     fragment.nameOffset2 = _getFragmentNameOffset(nameToken);
     fragment.isAugmentation = node.augmentKeyword != null;
     fragment.isBase = node.baseKeyword != null;
-    fragment.metadata3 = _buildAnnotations(node.metadata);
+    fragment.metadata = _buildMetadata(node.metadata);
     _setCodeRange(fragment, node);
     _setDocumentation(fragment, node);
 
@@ -1450,7 +1444,7 @@
     fragment.hasImplicitType = node.type == null;
     fragment.isExplicitlyCovariant = node.covariantKeyword != null;
     fragment.isFinal = node.isFinal;
-    fragment.metadata3 = _buildAnnotations(node.metadata);
+    fragment.metadata = _buildMetadata(node.metadata);
     _setCodeRange(fragment, node);
 
     node.declaredFragment = fragment;
@@ -1491,7 +1485,7 @@
     fragment.name2 = _getFragmentName(nameToken);
     fragment.nameOffset2 = _getFragmentNameOffset(nameToken);
     fragment.hasImplicitType = node.type == null && node.parameters == null;
-    fragment.metadata3 = _buildAnnotations(node.metadata);
+    fragment.metadata = _buildMetadata(node.metadata);
     _setCodeRange(fragment, node);
 
     node.declaredFragment = fragment;
@@ -1524,7 +1518,7 @@
   ) {
     var enclosingRef = _enclosingContext.fragmentReference;
 
-    var metadata = _buildAnnotations(node.metadata);
+    var metadata = _buildMetadata(node.metadata);
     for (var variable in node.variables.variables) {
       var nameToken = variable.name;
       var name = nameToken.lexeme;
@@ -1552,7 +1546,7 @@
       fragment.isExternal = node.externalKeyword != null;
       fragment.isFinal = node.variables.isFinal;
       fragment.isLate = node.variables.isLate;
-      fragment.metadata3 = metadata;
+      fragment.metadata = metadata;
       _setCodeRange(fragment, variable);
       _setDocumentation(fragment, node);
 
@@ -1638,7 +1632,7 @@
     );
     fragment.name2 = _getFragmentName(nameToken);
     fragment.nameOffset2 = _getFragmentNameOffset(nameToken);
-    fragment.metadata3 = _buildAnnotations(node.metadata);
+    fragment.metadata = _buildMetadata(node.metadata);
     _setCodeRange(fragment, node);
 
     node.declaredFragment = fragment;
@@ -1685,6 +1679,11 @@
     });
   }
 
+  MetadataImpl _buildMetadata(List<Annotation> nodeList) {
+    var annotations = _buildAnnotationsWithUnit(_unitElement, nodeList);
+    return MetadataImpl(annotations);
+  }
+
   /// The [accessorElement] should not be an augmentation.
   PropertyInducingElementImpl _buildSyntheticVariable({
     required String name,
@@ -1787,7 +1786,7 @@
     fieldFragment.name2 = _getFragmentName(fieldNameToken);
     fieldFragment.nameOffset2 = _getFragmentNameOffset(fieldNameToken);
     fieldFragment.isFinal = true;
-    fieldFragment.metadata3 = _buildAnnotations(representation.fieldMetadata);
+    fieldFragment.metadata = _buildMetadata(representation.fieldMetadata);
 
     var fieldBeginToken =
         representation.fieldMetadata.beginToken ?? representation.fieldType;
diff --git a/pkg/analyzer/lib/src/summary2/informative_data.dart b/pkg/analyzer/lib/src/summary2/informative_data.dart
index 9476a8b..b3a5fd0 100644
--- a/pkg/analyzer/lib/src/summary2/informative_data.dart
+++ b/pkg/analyzer/lib/src/summary2/informative_data.dart
@@ -102,7 +102,6 @@
     var applyOffsets = ApplyConstantOffsets(unitInfo.libraryConstantOffsets, (
       applier,
     ) {
-      applier.applyToMetadata(unitElement);
       applier.applyToImports(unitElement.libraryImports);
       applier.applyToExports(unitElement.libraryExports);
       applier.applyToParts(unitElement.parts);
@@ -201,7 +200,7 @@
       _applyToFormalParameters(element.parameters_unresolved, info.parameters);
 
       var applyOffsets = ApplyConstantOffsets(info.constantOffsets, (applier) {
-        applier.applyToMetadata(element);
+        applier.applyToMetadata(element.metadata);
         applier.applyToTypeParameters(element.typeParameters);
         applier.applyToFormalParameters(element.parameters);
       });
@@ -229,7 +228,7 @@
     );
 
     var applyOffsets = ApplyConstantOffsets(info.constantOffsets, (applier) {
-      applier.applyToMetadata(element);
+      applier.applyToMetadata(element.metadata);
       applier.applyToTypeParameters(element.typeParameters);
     });
 
@@ -265,7 +264,7 @@
     );
 
     var applyOffsets = ApplyConstantOffsets(info.constantOffsets, (applier) {
-      applier.applyToMetadata(element);
+      applier.applyToMetadata(element.metadata);
       applier.applyToTypeParameters(element.typeParameters);
     });
 
@@ -313,7 +312,7 @@
       _applyToFormalParameters(element.parameters_unresolved, info.parameters);
 
       var applyOffsets = ApplyConstantOffsets(info.constantOffsets, (applier) {
-        applier.applyToMetadata(element);
+        applier.applyToMetadata(element.metadata);
         applier.applyToFormalParameters(element.parameters);
         applier.applyToConstructorInitializers(element);
       });
@@ -347,7 +346,7 @@
     _applyToMethods(element.methods, info.methods);
 
     var applyOffsets = ApplyConstantOffsets(info.constantOffsets, (applier) {
-      applier.applyToMetadata(element);
+      applier.applyToMetadata(element.metadata);
       applier.applyToTypeParameters(element.typeParameters);
     });
 
@@ -384,7 +383,7 @@
     _applyToMethods(element.methods, info.methods);
 
     var applyOffsets = ApplyConstantOffsets(info.constantOffsets, (applier) {
-      applier.applyToMetadata(element);
+      applier.applyToMetadata(element.metadata);
       applier.applyToTypeParameters(element.typeParameters);
     });
 
@@ -421,7 +420,7 @@
     var fieldApplyOffsets = ApplyConstantOffsets(infoRep.fieldConstantOffsets, (
       applier,
     ) {
-      applier.applyToMetadata(representationField);
+      applier.applyToMetadata(representationField.metadata);
     });
 
     var fieldLinkedData = representationField.linkedData;
@@ -462,7 +461,7 @@
     _applyToMethods(element.methods, info.methods);
 
     var applyOffsets = ApplyConstantOffsets(info.constantOffsets, (applier) {
-      applier.applyToMetadata(element);
+      applier.applyToMetadata(element.metadata);
       applier.applyToTypeParameters(element.typeParameters);
     });
 
@@ -485,7 +484,7 @@
       element.documentationComment = info.documentationComment;
 
       var applyOffsets = ApplyConstantOffsets(info.constantOffsets, (applier) {
-        applier.applyToMetadata(element);
+        applier.applyToMetadata(element.metadata);
         applier.applyToConstantInitializer(element);
       });
 
@@ -526,7 +525,7 @@
     _applyToFormalParameters(element.parameters_unresolved, info.parameters);
 
     var applyOffsets = ApplyConstantOffsets(info.constantOffsets, (applier) {
-      applier.applyToMetadata(element);
+      applier.applyToMetadata(element.metadata);
       applier.applyToTypeParameters(element.typeParameters);
       applier.applyToFormalParameters(element.parameters);
     });
@@ -602,7 +601,7 @@
     var applyOffsets = ApplyConstantOffsets(info.libraryConstantOffsets, (
       applier,
     ) {
-      applier.applyToMetadataList(element.annotations);
+      applier.applyToMetadata(element.metadata);
     });
 
     var linkedData = element.linkedData;
@@ -629,7 +628,7 @@
       _applyToFormalParameters(element.parameters_unresolved, info.parameters);
 
       var applyOffsets = ApplyConstantOffsets(info.constantOffsets, (applier) {
-        applier.applyToMetadata(element);
+        applier.applyToMetadata(element.metadata);
         applier.applyToTypeParameters(element.typeParameters);
         applier.applyToFormalParameters(element.parameters);
       });
@@ -662,7 +661,7 @@
     _applyToMethods(element.methods, info.methods);
 
     var applyOffsets = ApplyConstantOffsets(info.constantOffsets, (applier) {
-      applier.applyToMetadata(element);
+      applier.applyToMetadata(element.metadata);
       applier.applyToTypeParameters(element.typeParameters);
     });
 
@@ -684,7 +683,7 @@
     element.documentationComment = info.documentationComment;
 
     var applyOffsets = ApplyConstantOffsets(info.constantOffsets, (applier) {
-      applier.applyToMetadata(element);
+      applier.applyToMetadata(element.metadata);
       applier.applyToConstantInitializer(element);
     });
 
@@ -719,7 +718,7 @@
     List<_InfoTypeParameter>? aliasedTypeParameters,
   }) {
     var applyOffsets = ApplyConstantOffsets(constantOffsets, (applier) {
-      applier.applyToMetadata(element);
+      applier.applyToMetadata(element.metadata);
       applier.applyToTypeParameters(element.typeParameters);
 
       var aliasedElement = element.aliasedElement;
@@ -2007,13 +2006,13 @@
 
   void applyToEnumConstants(List<FieldFragmentImpl> constants) {
     for (var constant in constants) {
-      applyToMetadata(constant);
+      applyToMetadata(constant.metadata);
     }
   }
 
   void applyToExports(List<LibraryExportImpl> elements) {
     for (var element in elements) {
-      applyToMetadataList(element.metadata.annotations);
+      applyToMetadata(element.metadata);
     }
   }
 
@@ -2021,7 +2020,7 @@
     List<FormalParameterFragmentImpl> formalParameters,
   ) {
     for (var parameter in formalParameters) {
-      applyToMetadata(parameter);
+      applyToMetadata(parameter.metadata);
       applyToFormalParameters(parameter.parameters);
       applyToConstantInitializer(parameter);
     }
@@ -2029,16 +2028,12 @@
 
   void applyToImports(List<LibraryImportImpl> elements) {
     for (var element in elements) {
-      applyToMetadataList(element.metadata.annotations);
+      applyToMetadata(element.metadata);
     }
   }
 
-  void applyToMetadata(FragmentImpl element) {
-    applyToMetadataList(element.metadata3);
-  }
-
-  void applyToMetadataList(List<ElementAnnotationImpl> metadata) {
-    for (var annotation in metadata) {
+  void applyToMetadata(MetadataImpl metadata) {
+    for (var annotation in metadata.annotations) {
       var node = annotation.annotationAst;
       node.accept(this);
     }
@@ -2046,13 +2041,13 @@
 
   void applyToParts(List<PartIncludeImpl> elements) {
     for (var element in elements) {
-      applyToMetadataList(element.metadata.annotations);
+      applyToMetadata(element.metadata);
     }
   }
 
   void applyToTypeParameters(List<TypeParameterFragmentImpl> typeParameters) {
     for (var typeParameter in typeParameters) {
-      applyToMetadata(typeParameter);
+      applyToMetadata(typeParameter.metadata);
     }
   }
 
diff --git a/pkg/analyzer/lib/src/utilities/extensions/element.dart b/pkg/analyzer/lib/src/utilities/extensions/element.dart
index 5cfe092..897e3d4 100644
--- a/pkg/analyzer/lib/src/utilities/extensions/element.dart
+++ b/pkg/analyzer/lib/src/utilities/extensions/element.dart
@@ -5,7 +5,6 @@
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/nullability_suffix.dart';
 import 'package:analyzer/dart/element/type.dart';
-import 'package:analyzer/src/dart/ast/ast.dart';
 import 'package:analyzer/src/dart/element/element.dart';
 import 'package:analyzer/src/dart/element/member.dart';
 import 'package:analyzer/src/dart/element/type.dart';
@@ -174,10 +173,6 @@
 
 extension ElementImplExtension on FragmentImpl {
   FragmentImpl? get enclosingElementImpl => enclosingElement3;
-
-  AnnotationImpl annotationAst(int index) {
-    return metadata3[index].annotationAst;
-  }
 }
 
 extension ElementOrNullExtension on FragmentImpl? {