Implement type parameters in the new element model

Change-Id: I01531f940f46407ba4f459b4ad412528d01c7ae7
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/383927
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
diff --git a/pkg/analyzer/lib/dart/element/element2.dart b/pkg/analyzer/lib/dart/element/element2.dart
index d4f0fa7..281a107 100644
--- a/pkg/analyzer/lib/dart/element/element2.dart
+++ b/pkg/analyzer/lib/dart/element/element2.dart
@@ -1659,9 +1659,6 @@
     implements Element2, _Annotatable, _Fragmented {
   // TODO(brianwilkerson): Evaluate to see whether this type is actually needed
   //  after converting clients to the new API.
-
-  @override
-  LibraryElement2 get library2;
 }
 
 /// The portion of a [TypeDefiningElement2] contributed by a single declaration.
@@ -1697,7 +1694,13 @@
 /// declaration.
 ///
 /// Clients may not extend, implement or mix-in this class.
-abstract class TypeParameterFragment implements TypeDefiningFragment {}
+abstract class TypeParameterFragment implements TypeDefiningFragment {
+  @override
+  TypeParameterFragment? get nextFragment;
+
+  @override
+  TypeParameterFragment? get previousFragment;
+}
 
 /// An element that has type parameters, such as a class, typedef, or method.
 ///
@@ -1721,7 +1724,13 @@
 /// declaration.
 ///
 /// Clients may not extend, implement or mix-in this class.
-abstract class TypeParameterizedFragment implements Fragment, _Annotatable {}
+abstract class TypeParameterizedFragment implements Fragment, _Annotatable {
+  /// The type parameters declared by this fragment directly.
+  ///
+  /// This does not include type parameters that are declared by any enclosing
+  /// fragments.
+  List<TypeParameterFragment> get typeParameters2;
+}
 
 /// A pseudo-element that represents names that are undefined.
 ///
diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart
index 0dd3196..879f53a 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -4425,7 +4425,10 @@
   List<TypeParameterElement2> get typeParameters2 {
     var fragment = firstFragment;
     if (fragment is TypeParameterizedElementMixin) {
-      return fragment.typeParameters.cast<TypeParameterElement2>();
+      return fragment.typeParameters
+          .map((fragment) => (fragment as TypeParameterFragment).element
+              as TypeParameterElement2)
+          .toList();
     }
     return const [];
   }
@@ -6540,8 +6543,10 @@
   Version? get sinceSdkVersion => declaration.sinceSdkVersion;
 
   @override
-  List<TypeParameterElement2> get typeParameters2 =>
-      declaration.typeParameters.cast<TypeParameterElement2>();
+  List<TypeParameterElement2> get typeParameters2 => declaration.typeParameters
+      .map((fragment) =>
+          (fragment as TypeParameterFragment).element as TypeParameterElement2)
+      .toList();
 
   @override
   String displayString2(
@@ -9065,9 +9070,12 @@
   }
 }
 
+abstract class TypeDefiningElementImpl2 extends ElementImpl2
+    implements TypeDefiningElement2 {}
+
 /// A concrete implementation of a [TypeParameterElement].
 class TypeParameterElementImpl extends ElementImpl
-    implements TypeParameterElement {
+    implements TypeParameterElement, TypeParameterFragment {
   /// 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.
@@ -9081,6 +9089,9 @@
   /// there is no explicit variance modifier, meaning legacy covariance.
   shared.Variance? _variance;
 
+  /// The element corresponding to this fragment.
+  TypeParameterElement2? _element;
+
   /// Initialize a newly created method element to have the given [name] and
   /// [offset].
   TypeParameterElementImpl(String super.name, super.offset);
@@ -9101,11 +9112,35 @@
   }
 
   @override
+  List<Fragment> get children3 => const [];
+
+  @override
   TypeParameterElement get declaration => this;
 
   @override
   String get displayName => name;
 
+  @override
+  TypeParameterElement2 get element {
+    if (_element != null) {
+      return _element!;
+    }
+    TypeParameterFragment firstFragment = this;
+    var previousFragment = firstFragment.previousFragment;
+    while (previousFragment != null) {
+      firstFragment = previousFragment;
+      previousFragment = firstFragment.previousFragment;
+    }
+    // As a side-effect of creating the element, all of the fragments in the
+    // chain will have their `_element` set to the newly created element.
+    return TypeParameterElementImpl2(firstFragment as TypeParameterElementImpl);
+  }
+
+  set element(TypeParameterElement2 element) => _element = element;
+
+  @override
+  Fragment? get enclosingFragment => enclosingElement3 as Fragment?;
+
   bool get isLegacyCovariant {
     return _variance == null;
   }
@@ -9114,10 +9149,22 @@
   ElementKind get kind => ElementKind.TYPE_PARAMETER;
 
   @override
+  LibraryFragment get libraryFragment =>
+      thisOrAncestorOfType<CompilationUnitElementImpl>() as LibraryFragment;
+
+  @override
   String get name {
     return super.name!;
   }
 
+  @override
+  // TODO(augmentations): Support chaining between the fragments.
+  TypeParameterFragment? get nextFragment => null;
+
+  @override
+  // TODO(augmentations): Support chaining between the fragments.
+  TypeParameterFragment? get previousFragment => null;
+
   shared.Variance get variance {
     return _variance ?? shared.Variance.covariant;
   }
@@ -9206,6 +9253,47 @@
   }
 }
 
+class TypeParameterElementImpl2 extends TypeDefiningElementImpl2
+    with
+        FragmentedAnnotatableElementMixin<TypeParameterFragment>,
+        FragmentedElementMixin<TypeParameterFragment>
+    implements TypeParameterElement2 {
+  @override
+  final TypeParameterElementImpl firstFragment;
+
+  TypeParameterElementImpl2(this.firstFragment) {
+    TypeParameterElementImpl? fragment = firstFragment;
+    while (fragment != null) {
+      fragment.element = this;
+      fragment = fragment.nextFragment as TypeParameterElementImpl?;
+    }
+  }
+
+  @override
+  TypeParameterElement2 get baseElement => this;
+
+  @override
+  DartType? get bound => firstFragment.bound;
+
+  @override
+  Element2? get enclosingElement2 =>
+      (firstFragment._enclosingElement as Fragment).element;
+
+  @override
+  ElementKind get kind => ElementKind.TYPE_PARAMETER;
+
+  @override
+  LibraryElement2 get library2 => super.library2!;
+
+  @override
+  String? get name => firstFragment.name;
+
+  @override
+  TypeParameterType instantiate(
+          {required NullabilitySuffix nullabilitySuffix}) =>
+      firstFragment.instantiate(nullabilitySuffix: nullabilitySuffix);
+}
+
 abstract class TypeParameterizedElementImpl2 extends ElementImpl2
     implements TypeParameterizedElement2 {}
 
@@ -9242,6 +9330,10 @@
     _typeParameters = typeParameters;
   }
 
+  @override
+  List<TypeParameterFragment> get typeParameters2 =>
+      typeParameters.cast<TypeParameterFragment>();
+
   List<TypeParameterElement> get typeParameters_unresolved {
     return _typeParameters;
   }
diff --git a/pkg/analyzer/lib/src/dart/element/member.dart b/pkg/analyzer/lib/src/dart/element/member.dart
index 6f61403..96e4eeb 100644
--- a/pkg/analyzer/lib/src/dart/element/member.dart
+++ b/pkg/analyzer/lib/src/dart/element/member.dart
@@ -305,6 +305,10 @@
   }
 
   @override
+  List<TypeParameterFragment> get typeParameters2 =>
+      (declaration as ExecutableElementImpl).typeParameters2;
+
+  @override
   void appendTo(ElementDisplayStringBuilder builder) {
     builder.writeExecutableElement(this, displayName);
   }
diff --git a/pkg/analyzer/test/src/summary/element_text.dart b/pkg/analyzer/test/src/summary/element_text.dart
index afcefbd..1a51374 100644
--- a/pkg/analyzer/test/src/summary/element_text.dart
+++ b/pkg/analyzer/test/src/summary/element_text.dart
@@ -300,6 +300,8 @@
     if (configuration.withCodeRanges && !e.isSynthetic) {
       if (e is MaybeAugmentedInstanceElementMixin) {
         e = e.declaration;
+      } else if (e is TypeParameterElementImpl2) {
+        e = e.firstFragment;
       }
       if (e is ElementImpl) {
         _sink.writelnWithIndent('codeOffset: ${e.codeOffset}');
@@ -829,33 +831,6 @@
     }
   }
 
-  // void _writeTypeParameterElement(TypeParameterElement2 e) {
-  //   e as TypeParameterElementImpl;
-
-  //   _sink.writeIndentedLine(() {
-  //     _sink.write('${(e as TypeParameterElementImpl).variance.name} ');
-  //     _writeElementName(e);
-  //   });
-
-  //   _sink.withIndent(() {
-  //     _writeCodeRange(e);
-
-  //     var bound = e.bound;
-  //     if (bound != null) {
-  //       _writeType('bound', bound);
-  //     }
-
-  //     // var defaultType = e.defaultType;
-  //     // if (defaultType != null) {
-  //     //   _writeType('defaultType', defaultType);
-  //     // }
-
-  //     _writeMetadata(e.metadata);
-  //   });
-
-  //   _assertNonSyntheticElementSelf(e);
-  // }
-
   void _writeGetterElement(GetterElement e) {
     var variable = e.variable3;
     if (variable != null) {
@@ -1023,7 +998,8 @@
       // _writeMetadata(e.metadata);
       _writeSinceSdkVersion(e.sinceSdkVersion);
       _writeCodeRange(e);
-      // _writeElements('typeParameters', e.typeParameters2, _writeTypeParameterElement);
+      _writeElements(
+          'typeParameters', e.typeParameters2, _writeTypeParameterElement);
       _writeMacroDiagnostics(e);
       _writeFragmentReference(e.firstFragment, label: 'firstFragment');
 
@@ -1129,6 +1105,8 @@
       _writeFragmentReference(f.previousFragment, label: 'previousFragment');
       _writeFragmentReference(f.nextFragment, label: 'nextFragment');
 
+      _writeElements(
+          'typeParameters', f.typeParameters2, _writeTypeParameterFragment);
       _writeElements('fields', f.fields2, _writeFieldFragment);
       if (f is InterfaceFragment) {
         var constructors = f.constructors2;
@@ -1505,7 +1483,8 @@
       _writeSinceSdkVersion(e.sinceSdkVersion);
       // _writeTypeInferenceError(e);
 
-      // _writeTypeParameterElements(e.typeParameters2);
+      _writeElements(
+          'typeParameters', e.typeParameters2, _writeTypeParameterElement);
       _writeElements('parameters', e.parameters2, _writeFormalParameterElement);
       // _writeReturnType(e.returnType);
       // _writeNonSyntheticElement(e);
@@ -1544,7 +1523,8 @@
       _writeFragmentCodeRange(f);
       // _writeTypeInferenceError(f);
 
-      // _writeTypeParameterElements(f.typeParameters);
+      _writeElements(
+          'typeParameters', f.typeParameters2, _writeTypeParameterFragment);
       _writeElements(
           'parameters', f.parameters2, _writeFormalParameterFragment);
       // _writeReturnType(f.returnType);
@@ -1819,6 +1799,56 @@
     //   }
     // }
   }
+
+  void _writeTypeParameterElement(TypeParameterElement2 e) {
+    _sink.writeIndentedLine(() {
+      // _sink.write('${e.variance.name} ');
+      _writeElementName(e);
+    });
+
+    _sink.withIndent(() {
+      _writeCodeRange(e);
+
+      var bound = e.bound;
+      if (bound != null) {
+        _writeType('bound', bound);
+      }
+
+      // var defaultType = e.defaultType;
+      // if (defaultType != null) {
+      //   _writeType('defaultType', defaultType);
+      // }
+
+      _writeMetadata(e.metadata);
+    });
+
+    _assertNonSyntheticElementSelf(e);
+  }
+
+  void _writeTypeParameterFragment(TypeParameterFragment f) {
+    _sink.writeIndentedLine(() {
+      // _sink.write('${e.variance.name} ');
+      _writeFragmentName(f);
+    });
+
+    _sink.withIndent(() {
+      // _writeCodeRange(e);
+
+      // var bound = e.bound;
+      // if (bound != null) {
+      //   _writeType('bound', bound);
+      // }
+
+      // var defaultType = e.defaultType;
+      // if (defaultType != null) {
+      //   _writeType('defaultType', defaultType);
+      // }
+
+      _writeMetadata(f.metadata);
+    });
+
+    // _assertNonSyntheticElementSelf(f);
+  }
 }
 
 /// Writes the canonical text presentation of elements.
diff --git a/pkg/analyzer/test/src/summary/elements/class_test.dart b/pkg/analyzer/test/src/summary/elements/class_test.dart
index 23423d8..308b534 100644
--- a/pkg/analyzer/test/src/summary/elements/class_test.dart
+++ b/pkg/analyzer/test/src/summary/elements/class_test.dart
@@ -310,6 +310,9 @@
       classes
         class C @6
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            T @8
+            U @11
           constructors
             new @16
               reference: <testLibraryFragment>::@class::C::@constructor::new
@@ -318,6 +321,9 @@
     class C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+        U
       firstFragment: <testLibraryFragment>::@class::C
       constructors
         new
@@ -2396,6 +2402,9 @@
       classes
         class C @6
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            T @8
+            U @11
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::C::@constructor::new
@@ -2404,6 +2413,9 @@
     class C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+        U
       firstFragment: <testLibraryFragment>::@class::C
       constructors
         synthetic new
@@ -3247,6 +3259,8 @@
       classes
         class A @6
           reference: <testLibraryFragment>::@class::A
+          typeParameters
+            T @8
           constructors
             const new @21
               reference: <testLibraryFragment>::@class::A::@constructor::new
@@ -3302,6 +3316,8 @@
     class A
       reference: <testLibraryFragment>::@class::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::A
       constructors
         const new
@@ -5700,6 +5716,8 @@
                 substitution: {T: String}
         class B @76
           reference: <testLibraryFragment>::@class::B
+          typeParameters
+            T @78
           constructors
             new @95
               reference: <testLibraryFragment>::@class::B::@constructor::new
@@ -5735,6 +5753,8 @@
     class B
       reference: <testLibraryFragment>::@class::B
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::B
       supertype: A
       constructors
@@ -6133,6 +6153,9 @@
       classes
         class C @6
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            T @8
+            U @11
           constructors
             factory new @26
               reference: <testLibraryFragment>::@class::C::@constructor::new
@@ -6147,6 +6170,9 @@
               nameEnd: 52
         class D @64
           reference: <testLibraryFragment>::@class::D
+          typeParameters
+            T @66
+            U @69
           constructors
             named @94
               reference: <testLibraryFragment>::@class::D::@constructor::named
@@ -6160,6 +6186,9 @@
     class C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+        U
       firstFragment: <testLibraryFragment>::@class::C
       constructors
         factory new
@@ -6172,6 +6201,9 @@
     class D
       reference: <testLibraryFragment>::@class::D
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+        U
       firstFragment: <testLibraryFragment>::@class::D
       supertype: C<U, T>
       constructors
@@ -6257,6 +6289,9 @@
       classes
         class B @33
           reference: <testLibraryFragment>::@class::B
+          typeParameters
+            T @35
+            U @38
           constructors
             factory new @53
               reference: <testLibraryFragment>::@class::B::@constructor::new
@@ -6271,6 +6306,9 @@
               nameEnd: 79
         class C @91
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            T @93
+            U @96
           constructors
             named @121
               reference: <testLibraryFragment>::@class::C::@constructor::named
@@ -6281,6 +6319,9 @@
     class B
       reference: <testLibraryFragment>::@class::B
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+        U
       firstFragment: <testLibraryFragment>::@class::B
       constructors
         factory new
@@ -6293,6 +6334,9 @@
     class C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+        U
       firstFragment: <testLibraryFragment>::@class::C
       supertype: C<U, T>
         alias: <testLibraryFragment>::@typeAlias::A
@@ -6445,6 +6489,9 @@
       classes
         class C @25
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            T @27
+            U @30
           constructors
             factory new @45
               reference: <testLibraryFragment>::@class::C::@constructor::new
@@ -6461,6 +6508,9 @@
     class C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+        U
       firstFragment: <testLibraryFragment>::@class::C
       constructors
         factory new
@@ -6638,6 +6688,9 @@
       classes
         class C @32
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            T @34
+            U @37
           constructors
             factory new @52
               reference: <testLibraryFragment>::@class::C::@constructor::new
@@ -6654,6 +6707,9 @@
     class C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+        U
       firstFragment: <testLibraryFragment>::@class::C
       constructors
         factory new
@@ -6698,6 +6754,8 @@
       classes
         class C @6
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            E @8
           constructors
             factory new @23
               reference: <testLibraryFragment>::@class::C::@constructor::new
@@ -6706,6 +6764,8 @@
     class C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        E
       firstFragment: <testLibraryFragment>::@class::C
       constructors
         factory new
@@ -6760,6 +6820,8 @@
               enclosingFragment: <testLibraryFragment>::@class::D
         class C @17
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            E @19
           constructors
             factory new @34
               reference: <testLibraryFragment>::@class::C::@constructor::new
@@ -6776,6 +6838,8 @@
     class C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        E
       firstFragment: <testLibraryFragment>::@class::C
       constructors
         factory new
@@ -6937,6 +7001,9 @@
       classes
         class C @6
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            T @8
+            U @11
           constructors
             factory new @26
               reference: <testLibraryFragment>::@class::C::@constructor::new
@@ -6951,6 +7018,9 @@
               nameEnd: 46
         class D @58
           reference: <testLibraryFragment>::@class::D
+          typeParameters
+            T @60
+            U @63
           constructors
             new @86
               reference: <testLibraryFragment>::@class::D::@constructor::new
@@ -6962,6 +7032,9 @@
     class C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+        U
       firstFragment: <testLibraryFragment>::@class::C
       constructors
         factory new
@@ -6974,6 +7047,9 @@
     class D
       reference: <testLibraryFragment>::@class::D
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+        U
       firstFragment: <testLibraryFragment>::@class::D
       supertype: C<U, T>
       constructors
@@ -7053,6 +7129,9 @@
       classes
         class B @33
           reference: <testLibraryFragment>::@class::B
+          typeParameters
+            T @35
+            U @38
           constructors
             factory new @53
               reference: <testLibraryFragment>::@class::B::@constructor::new
@@ -7066,6 +7145,9 @@
               enclosingFragment: <testLibraryFragment>::@class::B
         class C @84
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            T @86
+            U @89
           constructors
             new @112
               reference: <testLibraryFragment>::@class::C::@constructor::new
@@ -7074,6 +7156,9 @@
     class B
       reference: <testLibraryFragment>::@class::B
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+        U
       firstFragment: <testLibraryFragment>::@class::B
       constructors
         factory new
@@ -7087,6 +7172,9 @@
     class C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+        U
       firstFragment: <testLibraryFragment>::@class::C
       supertype: B<U, T>
       constructors
@@ -7235,6 +7323,9 @@
       classes
         class C @25
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            T @27
+            U @30
           constructors
             factory new @45
               reference: <testLibraryFragment>::@class::C::@constructor::new
@@ -7251,6 +7342,9 @@
     class C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+        U
       firstFragment: <testLibraryFragment>::@class::C
       constructors
         factory new
@@ -7508,6 +7602,9 @@
       classes
         class C @32
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            T @34
+            U @37
           constructors
             factory new @52
               reference: <testLibraryFragment>::@class::C::@constructor::new
@@ -7524,6 +7621,9 @@
     class C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+        U
       firstFragment: <testLibraryFragment>::@class::C
       constructors
         factory new
@@ -7661,6 +7761,8 @@
       classes
         class C @6
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            E @8
           constructors
             factory new @23
               reference: <testLibraryFragment>::@class::C::@constructor::new
@@ -7669,6 +7771,8 @@
     class C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        E
       firstFragment: <testLibraryFragment>::@class::C
       constructors
         factory new
@@ -7910,6 +8014,8 @@
       classes
         class C @6
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            T @8
           constructors
             const named @23
               reference: <testLibraryFragment>::@class::C::@constructor::named
@@ -7936,6 +8042,8 @@
     class C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::C
       constructors
         const named
@@ -8132,6 +8240,8 @@
       classes
         class C @6
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            T @8
           constructors
             const new @21
               reference: <testLibraryFragment>::@class::C::@constructor::new
@@ -8153,6 +8263,8 @@
     class C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::C
       constructors
         const new
@@ -8278,6 +8390,8 @@
       classes
         class A @6
           reference: <testLibraryFragment>::@class::A
+          typeParameters
+            T @8
           constructors
             named @17
               reference: <testLibraryFragment>::@class::A::@constructor::named
@@ -8297,6 +8411,8 @@
     class A
       reference: <testLibraryFragment>::@class::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::A
       constructors
         named
@@ -10879,6 +10995,8 @@
       classes
         class A @6
           reference: <testLibraryFragment>::@class::A
+          typeParameters
+            T @8
           constructors
             const new @21
               reference: <testLibraryFragment>::@class::A::@constructor::new
@@ -10902,6 +11020,8 @@
     class A
       reference: <testLibraryFragment>::@class::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::A
       constructors
         const new
@@ -19064,6 +19184,9 @@
             f @12
               reference: <testLibraryFragment>::@class::C::@method::f
               enclosingFragment: <testLibraryFragment>::@class::C
+              typeParameters
+                T @14
+                U @17
               parameters
                 u @22
   classes
@@ -19078,6 +19201,9 @@
       methods
         f
           reference: <none>
+          typeParameters
+            T
+            U
           parameters
             requiredPositional u
               reference: <none>
@@ -19137,6 +19263,9 @@
       classes
         class C @6
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            T @8
+            U @11
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::C::@constructor::new
@@ -19145,6 +19274,9 @@
             f @20
               reference: <testLibraryFragment>::@class::C::@method::f
               enclosingFragment: <testLibraryFragment>::@class::C
+              typeParameters
+                V @22
+                W @25
               parameters
                 t @30
                 u @35
@@ -19153,6 +19285,9 @@
     class C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+        U
       firstFragment: <testLibraryFragment>::@class::C
       constructors
         synthetic new
@@ -19161,6 +19296,9 @@
       methods
         f
           reference: <none>
+          typeParameters
+            V
+            W
           parameters
             requiredPositional t
               reference: <none>
@@ -19224,6 +19362,9 @@
             f @15
               reference: <testLibraryFragment>::@class::C::@method::f
               enclosingFragment: <testLibraryFragment>::@class::C
+              typeParameters
+                T @17
+                U @20
               parameters
                 x @25
   classes
@@ -19238,6 +19379,9 @@
       methods
         f
           reference: <none>
+          typeParameters
+            T
+            U
           parameters
             requiredPositional x
               reference: <none>
@@ -19686,12 +19830,16 @@
               enclosingFragment: <testLibraryFragment>::@class::A
         class B @61
           reference: <testLibraryFragment>::@class::B
+          typeParameters
+            B1 @63
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::B::@constructor::new
               enclosingFragment: <testLibraryFragment>::@class::B
         class C @76
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            C1 @78
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::C::@constructor::new
@@ -19718,6 +19866,8 @@
     class B
       reference: <testLibraryFragment>::@class::B
       enclosingElement2: <testLibrary>
+      typeParameters
+        B1
       firstFragment: <testLibraryFragment>::@class::B
       constructors
         synthetic new
@@ -19726,6 +19876,8 @@
     class C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        C1
       firstFragment: <testLibraryFragment>::@class::C
       constructors
         synthetic new
@@ -19781,6 +19933,8 @@
       mixins
         mixin M @6
           reference: <testLibraryFragment>::@mixin::M
+          typeParameters
+            T @8
   classes
     class A
       reference: <testLibraryFragment>::@class::A
@@ -19795,6 +19949,8 @@
     mixin M
       reference: <testLibraryFragment>::@mixin::M
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@mixin::M
       superclassConstraints
         Object
@@ -19848,6 +20004,8 @@
       classes
         class A @30
           reference: <testLibraryFragment>::@class::A
+          typeParameters
+            T @32
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::A::@constructor::new
@@ -19861,6 +20019,8 @@
     class A
       reference: <testLibraryFragment>::@class::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::A
       supertype: Object
       constructors
@@ -20008,6 +20168,8 @@
       classes
         class C @6
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            T @8
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::C::@constructor::new
@@ -20016,6 +20178,9 @@
     class C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+          bound: dynamic
       firstFragment: <testLibraryFragment>::@class::C
       constructors
         synthetic new
@@ -20067,6 +20232,8 @@
       classes
         class C @6
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            T @8
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::C::@constructor::new
@@ -20075,6 +20242,9 @@
     class C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+          bound: dynamic
       firstFragment: <testLibraryFragment>::@class::C
       constructors
         synthetic new
@@ -20116,6 +20286,8 @@
       classes
         class C @6
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            T @8
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::C::@constructor::new
@@ -20124,6 +20296,9 @@
     class C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+          bound: C<dynamic>
       firstFragment: <testLibraryFragment>::@class::C
       constructors
         synthetic new
@@ -20175,12 +20350,16 @@
       classes
         class C @6
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            T @8
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::C::@constructor::new
               enclosingFragment: <testLibraryFragment>::@class::C
         class D @30
           reference: <testLibraryFragment>::@class::D
+          typeParameters
+            T @32
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::D::@constructor::new
@@ -20189,6 +20368,9 @@
     class C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+          bound: D<dynamic>
       firstFragment: <testLibraryFragment>::@class::C
       constructors
         synthetic new
@@ -20197,6 +20379,9 @@
     class D
       reference: <testLibraryFragment>::@class::D
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+          bound: C<dynamic>
       firstFragment: <testLibraryFragment>::@class::D
       constructors
         synthetic new
@@ -20322,12 +20507,16 @@
       classes
         class C @6
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            T @8
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::C::@constructor::new
               enclosingFragment: <testLibraryFragment>::@class::C
         class D @30
           reference: <testLibraryFragment>::@class::D
+          typeParameters
+            T @32
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::D::@constructor::new
@@ -20336,6 +20525,9 @@
     class C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+          bound: D<dynamic>
       firstFragment: <testLibraryFragment>::@class::C
       constructors
         synthetic new
@@ -20344,6 +20536,9 @@
     class D
       reference: <testLibraryFragment>::@class::D
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+          bound: D<dynamic>
       firstFragment: <testLibraryFragment>::@class::D
       constructors
         synthetic new
@@ -20394,12 +20589,16 @@
       classes
         class C @6
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            T @8
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::C::@constructor::new
               enclosingFragment: <testLibraryFragment>::@class::C
         class D @33
           reference: <testLibraryFragment>::@class::D
+          typeParameters
+            T @35
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::D::@constructor::new
@@ -20408,6 +20607,9 @@
     class C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+          bound: D<T>
       firstFragment: <testLibraryFragment>::@class::C
       constructors
         synthetic new
@@ -20416,6 +20618,8 @@
     class D
       reference: <testLibraryFragment>::@class::D
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::D
       constructors
         synthetic new
@@ -20469,12 +20673,16 @@
       classes
         class C @6
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            T @8
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::C::@constructor::new
               enclosingFragment: <testLibraryFragment>::@class::C
         class D @39
           reference: <testLibraryFragment>::@class::D
+          typeParameters
+            T @41
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::D::@constructor::new
@@ -20483,6 +20691,9 @@
     class C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+          bound: D<dynamic>
       firstFragment: <testLibraryFragment>::@class::C
       constructors
         synthetic new
@@ -20491,6 +20702,9 @@
     class D
       reference: <testLibraryFragment>::@class::D
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+          bound: D<T>
       firstFragment: <testLibraryFragment>::@class::D
       constructors
         synthetic new
@@ -20530,6 +20744,8 @@
       classes
         class C @6
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            T @8
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::C::@constructor::new
@@ -20538,6 +20754,9 @@
     class C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+          bound: void Function(T)
       firstFragment: <testLibraryFragment>::@class::C
       constructors
         synthetic new
@@ -20577,6 +20796,8 @@
       classes
         class C @6
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            T @8
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::C::@constructor::new
@@ -20585,6 +20806,9 @@
     class C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+          bound: T Function()
       firstFragment: <testLibraryFragment>::@class::C
       constructors
         synthetic new
@@ -20624,6 +20848,8 @@
       classes
         class C @6
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            T @8
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::C::@constructor::new
@@ -20632,6 +20858,9 @@
     class C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+          bound: void Function()
       firstFragment: <testLibraryFragment>::@class::C
       constructors
         synthetic new
@@ -20693,6 +20922,8 @@
       classes
         class C @6
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            T @8
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::C::@constructor::new
@@ -20701,6 +20932,9 @@
     class C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+          bound: dynamic
       firstFragment: <testLibraryFragment>::@class::C
       constructors
         synthetic new
@@ -20740,6 +20974,8 @@
       classes
         class C @6
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            T @8
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::C::@constructor::new
@@ -20748,6 +20984,9 @@
     class C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+          bound: C<dynamic>
       firstFragment: <testLibraryFragment>::@class::C
       constructors
         synthetic new
@@ -20843,12 +21082,16 @@
       classes
         class C @6
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            T @8
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::C::@constructor::new
               enclosingFragment: <testLibraryFragment>::@class::C
         class D @30
           reference: <testLibraryFragment>::@class::D
+          typeParameters
+            T @32
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::D::@constructor::new
@@ -20857,6 +21100,9 @@
     class C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+          bound: D<dynamic>
       firstFragment: <testLibraryFragment>::@class::C
       constructors
         synthetic new
@@ -20865,6 +21111,8 @@
     class D
       reference: <testLibraryFragment>::@class::D
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::D
       constructors
         synthetic new
@@ -20905,6 +21153,8 @@
       classes
         class C @6
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            T @8
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::C::@constructor::new
@@ -20913,6 +21163,8 @@
     class C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::C
       constructors
         synthetic new
@@ -24048,6 +24300,9 @@
                 substitution: {T1: int, T2: double}
         class D @40
           reference: <testLibraryFragment>::@class::D
+          typeParameters
+            T1 @42
+            T2 @46
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::D::@constructor::new
@@ -24066,6 +24321,9 @@
     class D
       reference: <testLibraryFragment>::@class::D
       enclosingElement2: <testLibrary>
+      typeParameters
+        T1
+        T2
       firstFragment: <testLibraryFragment>::@class::D
       constructors
         synthetic new
@@ -24106,12 +24364,16 @@
       classes
         class A @6
           reference: <testLibraryFragment>::@class::A
+          typeParameters
+            T @8
         class B @20
           reference: <testLibraryFragment>::@class::B
   classes
     class A
       reference: <testLibraryFragment>::@class::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::A
     class B
       reference: <testLibraryFragment>::@class::B
@@ -24163,6 +24425,8 @@
       classes
         class A @6
           reference: <testLibraryFragment>::@class::A
+          typeParameters
+            T @8
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::A::@constructor::new
@@ -24180,6 +24444,8 @@
     class A
       reference: <testLibraryFragment>::@class::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::A
       constructors
         synthetic new
@@ -24228,6 +24494,8 @@
       classes
         class A @6
           reference: <testLibraryFragment>::@class::A
+          typeParameters
+            T @8
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::A::@constructor::new
@@ -24236,6 +24504,8 @@
     class A
       reference: <testLibraryFragment>::@class::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::A
       constructors
         synthetic new
@@ -24315,6 +24585,9 @@
       classes
         class C @6
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            T @8
+            U @11
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::C::@constructor::new
@@ -24323,6 +24596,9 @@
     class C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+        U
       firstFragment: <testLibraryFragment>::@class::C
       constructors
         synthetic new
@@ -24373,6 +24649,9 @@
       classes
         class C @6
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            T @8
+            U @26
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::C::@constructor::new
@@ -24387,6 +24666,11 @@
     class C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+          bound: Object
+        U
+          bound: D
       firstFragment: <testLibraryFragment>::@class::C
       constructors
         synthetic new
@@ -24432,6 +24716,8 @@
       classes
         class C @6
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            T @8
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::C::@constructor::new
@@ -24440,6 +24726,9 @@
     class C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+          bound: dynamic
       firstFragment: <testLibraryFragment>::@class::C
       constructors
         synthetic new
@@ -24484,6 +24773,10 @@
       classes
         class C @6
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            T @8
+            U @21
+            V @24
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::C::@constructor::new
@@ -24492,6 +24785,12 @@
     class C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+          bound: dynamic
+        U
+        V
+          bound: dynamic
       firstFragment: <testLibraryFragment>::@class::C
       constructors
         synthetic new
@@ -24531,6 +24830,8 @@
       classes
         class A @6
           reference: <testLibraryFragment>::@class::A
+          typeParameters
+            T @8
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::A::@constructor::new
@@ -24539,6 +24840,9 @@
     class A
       reference: <testLibraryFragment>::@class::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+          bound: void Function(A<dynamic>)
       firstFragment: <testLibraryFragment>::@class::A
       constructors
         synthetic new
@@ -24578,6 +24882,8 @@
       classes
         class C @6
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            T @8
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::C::@constructor::new
@@ -24586,6 +24892,9 @@
     class C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+          bound: void Function<U extends C<dynamic>>()
       firstFragment: <testLibraryFragment>::@class::C
       constructors
         synthetic new
@@ -24645,6 +24954,8 @@
       classes
         class A @40
           reference: <testLibraryFragment>::@class::A
+          typeParameters
+            X @42
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::A::@constructor::new
@@ -24653,6 +24964,12 @@
     class A
       reference: <testLibraryFragment>::@class::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        X
+          bound: void Function(X)
+            alias: <testLibraryFragment>::@typeAlias::F
+              typeArguments
+                X
       firstFragment: <testLibraryFragment>::@class::A
       constructors
         synthetic new
@@ -24709,6 +25026,8 @@
       classes
         class A @36
           reference: <testLibraryFragment>::@class::A
+          typeParameters
+            X @38
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::A::@constructor::new
@@ -24717,6 +25036,12 @@
     class A
       reference: <testLibraryFragment>::@class::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        X
+          bound: X Function()
+            alias: <testLibraryFragment>::@typeAlias::F
+              typeArguments
+                X
       firstFragment: <testLibraryFragment>::@class::A
       constructors
         synthetic new
@@ -24776,6 +25101,8 @@
       classes
         class A @37
           reference: <testLibraryFragment>::@class::A
+          typeParameters
+            X @39
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::A::@constructor::new
@@ -24784,6 +25111,12 @@
     class A
       reference: <testLibraryFragment>::@class::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        X
+          bound: X Function(X)
+            alias: <testLibraryFragment>::@typeAlias::F
+              typeArguments
+                X
       firstFragment: <testLibraryFragment>::@class::A
       constructors
         synthetic new
@@ -24843,6 +25176,8 @@
       classes
         class A @37
           reference: <testLibraryFragment>::@class::A
+          typeParameters
+            X @39
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::A::@constructor::new
@@ -24851,6 +25186,12 @@
     class A
       reference: <testLibraryFragment>::@class::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        X
+          bound: X Function(X)
+            alias: <testLibraryFragment>::@typeAlias::F
+              typeArguments
+                X
       firstFragment: <testLibraryFragment>::@class::A
       constructors
         synthetic new
@@ -24890,6 +25231,8 @@
       classes
         class A @6
           reference: <testLibraryFragment>::@class::A
+          typeParameters
+            X @8
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::A::@constructor::new
@@ -24898,6 +25241,9 @@
     class A
       reference: <testLibraryFragment>::@class::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        X
+          bound: X Function(X)
       firstFragment: <testLibraryFragment>::@class::A
       constructors
         synthetic new
@@ -24937,6 +25283,8 @@
       classes
         class A @6
           reference: <testLibraryFragment>::@class::A
+          typeParameters
+            X @8
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::A::@constructor::new
@@ -24945,6 +25293,9 @@
     class A
       reference: <testLibraryFragment>::@class::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        X
+          bound: void Function(X)
       firstFragment: <testLibraryFragment>::@class::A
       constructors
         synthetic new
@@ -24984,6 +25335,8 @@
       classes
         class A @6
           reference: <testLibraryFragment>::@class::A
+          typeParameters
+            X @8
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::A::@constructor::new
@@ -24992,6 +25345,9 @@
     class A
       reference: <testLibraryFragment>::@class::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        X
+          bound: X Function()
       firstFragment: <testLibraryFragment>::@class::A
       constructors
         synthetic new
@@ -25031,6 +25387,8 @@
       classes
         class A @6
           reference: <testLibraryFragment>::@class::A
+          typeParameters
+            X @8
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::A::@constructor::new
@@ -25039,6 +25397,9 @@
     class A
       reference: <testLibraryFragment>::@class::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        X
+          bound: X Function()
       firstFragment: <testLibraryFragment>::@class::A
       constructors
         synthetic new
@@ -25093,6 +25454,8 @@
       classes
         class B @46
           reference: <testLibraryFragment>::@class::B
+          typeParameters
+            X @48
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::B::@constructor::new
@@ -25101,6 +25464,12 @@
     class B
       reference: <testLibraryFragment>::@class::B
       enclosingElement2: <testLibrary>
+      typeParameters
+        X
+          bound: List<void Function(X)>
+            alias: <testLibraryFragment>::@typeAlias::A
+              typeArguments
+                X
       firstFragment: <testLibraryFragment>::@class::B
       constructors
         synthetic new
@@ -25155,6 +25524,8 @@
       classes
         class B @35
           reference: <testLibraryFragment>::@class::B
+          typeParameters
+            X @37
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::B::@constructor::new
@@ -25163,6 +25534,12 @@
     class B
       reference: <testLibraryFragment>::@class::B
       enclosingElement2: <testLibrary>
+      typeParameters
+        X
+          bound: Map<X, int>
+            alias: <testLibraryFragment>::@typeAlias::A
+              typeArguments
+                X
       firstFragment: <testLibraryFragment>::@class::B
       constructors
         synthetic new
@@ -25202,6 +25579,9 @@
       classes
         class C @6
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            T @8
+            U @27
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::C::@constructor::new
@@ -25210,6 +25590,10 @@
     class C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+          bound: List<U>
+        U
       firstFragment: <testLibraryFragment>::@class::C
       constructors
         synthetic new
@@ -25249,6 +25633,9 @@
       classes
         class C @6
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            T @8
+            U @21
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::C::@constructor::new
@@ -25257,6 +25644,10 @@
     class C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+          bound: U
+        U
       firstFragment: <testLibraryFragment>::@class::C
       constructors
         synthetic new
@@ -25293,6 +25684,8 @@
       classes
         class C @6
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            T @11
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::C::@constructor::new
@@ -25301,6 +25694,8 @@
     class C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::C
       constructors
         synthetic new
@@ -25337,6 +25732,8 @@
       classes
         class C @6
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            T @12
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::C::@constructor::new
@@ -25345,6 +25742,8 @@
     class C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::C
       constructors
         synthetic new
@@ -25381,6 +25780,8 @@
       classes
         class C @6
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            T @14
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::C::@constructor::new
@@ -25389,6 +25790,8 @@
     class C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::C
       constructors
         synthetic new
@@ -25429,6 +25832,10 @@
       classes
         class C @6
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            T @14
+            U @20
+            V @27
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::C::@constructor::new
@@ -25437,6 +25844,10 @@
     class C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+        U
+        V
       firstFragment: <testLibraryFragment>::@class::C
       constructors
         synthetic new
@@ -26582,12 +26993,16 @@
       classes
         class A @6
           reference: <testLibraryFragment>::@class::A
+          typeParameters
+            T @8
           constructors
             new @27
               reference: <testLibraryFragment>::@class::A::@constructor::new
               enclosingFragment: <testLibraryFragment>::@class::A
         class B @61
           reference: <testLibraryFragment>::@class::B
+          typeParameters
+            E @63
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::B::@constructor::new
@@ -26618,6 +27033,9 @@
     class A
       reference: <testLibraryFragment>::@class::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+          bound: num
       firstFragment: <testLibraryFragment>::@class::A
       constructors
         new
@@ -26633,6 +27051,9 @@
     class alias B
       reference: <testLibraryFragment>::@class::B
       enclosingElement2: <testLibrary>
+      typeParameters
+        E
+          bound: num
       firstFragment: <testLibraryFragment>::@class::B
       supertype: A<E>
       constructors
@@ -27166,12 +27587,16 @@
               enclosingFragment: <testLibraryFragment>::@class::A
         class B @53
           reference: <testLibraryFragment>::@class::B
+          typeParameters
+            B1 @55
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::B::@constructor::new
               enclosingFragment: <testLibraryFragment>::@class::B
         class C @68
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            C1 @70
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::C::@constructor::new
@@ -27198,6 +27623,8 @@
     class B
       reference: <testLibraryFragment>::@class::B
       enclosingElement2: <testLibrary>
+      typeParameters
+        B1
       firstFragment: <testLibraryFragment>::@class::B
       constructors
         synthetic new
@@ -27206,6 +27633,8 @@
     class C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        C1
       firstFragment: <testLibraryFragment>::@class::C
       constructors
         synthetic new
@@ -27597,6 +28026,8 @@
       classes
         class C @6
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            T @8
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::C::@constructor::new
@@ -27625,6 +28056,9 @@
     class alias C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+          bound: C<dynamic>
       firstFragment: <testLibraryFragment>::@class::C
       supertype: D
       constructors
@@ -27710,6 +28144,8 @@
       classes
         class C @6
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            T @8
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::C::@constructor::new
@@ -27738,6 +28174,8 @@
     class alias C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::C
       supertype: D
       constructors
@@ -28610,6 +29048,8 @@
       classes
         class Base @6
           reference: <testLibraryFragment>::@class::Base
+          typeParameters
+            T @11
           constructors
             ctor @23
               reference: <testLibraryFragment>::@class::Base::@constructor::ctor
@@ -28656,6 +29096,8 @@
     class Base
       reference: <testLibraryFragment>::@class::Base
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::Base
       constructors
         ctor
@@ -28786,6 +29228,8 @@
       classes
         class Base @6
           reference: <testLibraryFragment>::@class::Base
+          typeParameters
+            T @11
           constructors
             ctor @23
               reference: <testLibraryFragment>::@class::Base::@constructor::ctor
@@ -28800,6 +29244,8 @@
               enclosingFragment: <testLibraryFragment>::@class::M
         class MixinApp @64
           reference: <testLibraryFragment>::@class::MixinApp
+          typeParameters
+            U @73
           constructors
             synthetic ctor @-1
               reference: <testLibraryFragment>::@class::MixinApp::@constructor::ctor
@@ -28832,6 +29278,8 @@
     class Base
       reference: <testLibraryFragment>::@class::Base
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::Base
       constructors
         ctor
@@ -28855,6 +29303,8 @@
     class alias MixinApp
       reference: <testLibraryFragment>::@class::MixinApp
       enclosingElement2: <testLibrary>
+      typeParameters
+        U
       firstFragment: <testLibraryFragment>::@class::MixinApp
       supertype: Base<List<U>>
       constructors
@@ -29610,6 +30060,8 @@
       classes
         class C @6
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            T @8
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::C::@constructor::new
@@ -29651,6 +30103,8 @@
     class C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::C
       constructors
         synthetic new
@@ -31483,12 +31937,16 @@
         class A @21
           reference: <testLibraryFragment>::@class::A
           nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          typeParameters
+            T1 @23
     <testLibrary>::@fragment::package:test/a.dart
       previousFragment: <testLibraryFragment>
       classes
         class A @35
           reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
           previousFragment: <testLibraryFragment>::@class::A
+          typeParameters
+            T2 @37
           constructors
             named @47
               reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@constructor::named
@@ -31499,6 +31957,8 @@
     class A
       reference: <testLibraryFragment>::@class::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T1
       firstFragment: <testLibraryFragment>::@class::A
       constructors
         named
@@ -34180,6 +34640,8 @@
         class A @21
           reference: <testLibraryFragment>::@class::A
           nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          typeParameters
+            T1 @23
           fields
             foo1 @34
               reference: <testLibraryFragment>::@class::A::@field::foo1
@@ -34206,6 +34668,8 @@
         class A @35
           reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
           previousFragment: <testLibraryFragment>::@class::A
+          typeParameters
+            T2 @37
           fields
             foo2 @48
               reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo2
@@ -34226,6 +34690,8 @@
     class A
       reference: <testLibraryFragment>::@class::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T1
       firstFragment: <testLibraryFragment>::@class::A
       fields
         foo1
@@ -35171,6 +35637,8 @@
         class A @21
           reference: <testLibraryFragment>::@class::A
           nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          typeParameters
+            T1 @23
           fields
             foo1 @-1
               reference: <testLibraryFragment>::@class::A::@field::foo1
@@ -35190,6 +35658,8 @@
         class A @35
           reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
           previousFragment: <testLibraryFragment>::@class::A
+          typeParameters
+            T2 @37
           fields
             foo2 @-1
               reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@field::foo2
@@ -35203,6 +35673,8 @@
     class A
       reference: <testLibraryFragment>::@class::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T1
       firstFragment: <testLibraryFragment>::@class::A
       fields
         synthetic foo1
@@ -36601,6 +37073,8 @@
         class A @21
           reference: <testLibraryFragment>::@class::A
           nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          typeParameters
+            T @23
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::A::@constructor::new
@@ -36617,8 +37091,12 @@
         class A @35
           reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
           previousFragment: <testLibraryFragment>::@class::A
+          typeParameters
+            T2 @37
         class I2 @68
           reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2
+          typeParameters
+            E @71
           constructors
             synthetic new @-1
               reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2::@constructor::new
@@ -36627,6 +37105,8 @@
     class A
       reference: <testLibraryFragment>::@class::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::A
       constructors
         synthetic new
@@ -36643,6 +37123,8 @@
     class I2
       reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2
       enclosingElement2: <testLibrary>
+      typeParameters
+        E
       firstFragment: <testLibrary>::@fragment::package:test/a.dart::@class::I2
       constructors
         synthetic new
@@ -36740,6 +37222,8 @@
         class A @21
           reference: <testLibraryFragment>::@class::A
           nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          typeParameters
+            T @23
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::A::@constructor::new
@@ -36756,8 +37240,13 @@
         class A @35
           reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
           previousFragment: <testLibraryFragment>::@class::A
+          typeParameters
+            T2 @37
+            T3 @41
         class I2 @72
           reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2
+          typeParameters
+            E @75
           constructors
             synthetic new @-1
               reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2::@constructor::new
@@ -36766,6 +37255,8 @@
     class A
       reference: <testLibraryFragment>::@class::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::A
       constructors
         synthetic new
@@ -36782,6 +37273,8 @@
     class I2
       reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2
       enclosingElement2: <testLibrary>
+      typeParameters
+        E
       firstFragment: <testLibrary>::@fragment::package:test/a.dart::@class::I2
       constructors
         synthetic new
@@ -38158,6 +38651,8 @@
         class A @21
           reference: <testLibraryFragment>::@class::A
           nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          typeParameters
+            T @23
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::A::@constructor::new
@@ -38172,6 +38667,8 @@
         class A @35
           reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
           previousFragment: <testLibraryFragment>::@class::A
+          typeParameters
+            T2 @37
           methods
             bar @48
               reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@method::bar
@@ -38180,6 +38677,8 @@
     class A
       reference: <testLibraryFragment>::@class::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::A
       constructors
         synthetic new
@@ -38277,6 +38776,8 @@
         class A @21
           reference: <testLibraryFragment>::@class::A
           nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          typeParameters
+            T @23
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::A::@constructor::new
@@ -38292,6 +38793,8 @@
         class A @35
           reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
           previousFragment: <testLibraryFragment>::@class::A
+          typeParameters
+            T2 @37
           methods
             augment foo @56
               reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo
@@ -38301,6 +38804,8 @@
     class A
       reference: <testLibraryFragment>::@class::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::A
       constructors
         synthetic new
@@ -38573,6 +39078,8 @@
       classes
         class B @36
           reference: <testLibraryFragment>::@class::B
+          typeParameters
+            S @38
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::B::@constructor::new
@@ -38580,6 +39087,8 @@
         class A @50
           reference: <testLibraryFragment>::@class::A
           nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          typeParameters
+            T1 @52
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::A::@constructor::new
@@ -38590,6 +39099,8 @@
       mixins
         mixin M1 @87
           reference: <testLibraryFragment>::@mixin::M1
+          typeParameters
+            U1 @90
     <testLibrary>::@fragment::package:test/a.dart
       previousFragment: <testLibraryFragment>
       nextFragment: <testLibrary>::@fragment::package:test/b.dart
@@ -38598,22 +39109,32 @@
           reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
           previousFragment: <testLibraryFragment>::@class::A
           nextFragment: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
+          typeParameters
+            T2 @37
       mixins
         mixin M2 @58
           reference: <testLibrary>::@fragment::package:test/a.dart::@mixin::M2
+          typeParameters
+            U2 @61
     <testLibrary>::@fragment::package:test/b.dart
       previousFragment: <testLibrary>::@fragment::package:test/a.dart
       classes
         class A @35
           reference: <testLibrary>::@fragment::package:test/b.dart::@classAugmentation::A
           previousFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          typeParameters
+            T3 @37
       mixins
         mixin M3 @58
           reference: <testLibrary>::@fragment::package:test/b.dart::@mixin::M3
+          typeParameters
+            U3 @61
   classes
     class B
       reference: <testLibraryFragment>::@class::B
       enclosingElement2: <testLibrary>
+      typeParameters
+        S
       firstFragment: <testLibraryFragment>::@class::B
       constructors
         synthetic new
@@ -38622,6 +39143,8 @@
     class A
       reference: <testLibraryFragment>::@class::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T1
       firstFragment: <testLibraryFragment>::@class::A
       supertype: B<T1>
       constructors
@@ -38633,18 +39156,24 @@
     mixin M1
       reference: <testLibraryFragment>::@mixin::M1
       enclosingElement2: <testLibrary>
+      typeParameters
+        U1
       firstFragment: <testLibraryFragment>::@mixin::M1
       superclassConstraints
         B<U1>
     mixin M2
       reference: <testLibrary>::@fragment::package:test/a.dart::@mixin::M2
       enclosingElement2: <testLibrary>
+      typeParameters
+        U2
       firstFragment: <testLibrary>::@fragment::package:test/a.dart::@mixin::M2
       superclassConstraints
         M1<U2>
     mixin M3
       reference: <testLibrary>::@fragment::package:test/b.dart::@mixin::M3
       enclosingElement2: <testLibrary>
+      typeParameters
+        U3
       firstFragment: <testLibrary>::@fragment::package:test/b.dart::@mixin::M3
       superclassConstraints
         M2<U3>
@@ -40868,6 +41397,8 @@
         class A @35
           reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
           previousFragment: <testLibraryFragment>::@class::A
+          typeParameters
+            T @37
           methods
             augment foo @57
               reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A::@methodAugmentation::foo
@@ -41641,6 +42172,8 @@
         class A @21
           reference: <testLibraryFragment>::@class::A
           nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          typeParameters
+            T @23
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::A::@constructor::new
@@ -41651,10 +42184,15 @@
         class A @35
           reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
           previousFragment: <testLibraryFragment>::@class::A
+          typeParameters
+            T @37
   classes
     class A
       reference: <testLibraryFragment>::@class::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+          bound: A<dynamic>
       firstFragment: <testLibraryFragment>::@class::A
       constructors
         synthetic new
@@ -41739,6 +42277,8 @@
       classes
         class A @21
           reference: <testLibraryFragment>::@class::A
+          typeParameters
+            T @23
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::A::@constructor::new
@@ -41746,6 +42286,8 @@
         class B @35
           reference: <testLibraryFragment>::@class::B
           nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::B
+          typeParameters
+            T1 @37
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::B::@constructor::new
@@ -41759,10 +42301,14 @@
         class B @35
           reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::B
           previousFragment: <testLibraryFragment>::@class::B
+          typeParameters
+            T2 @37
   classes
     class A
       reference: <testLibraryFragment>::@class::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::A
       constructors
         synthetic new
@@ -41771,6 +42317,8 @@
     class B
       reference: <testLibraryFragment>::@class::B
       enclosingElement2: <testLibrary>
+      typeParameters
+        T1
       firstFragment: <testLibraryFragment>::@class::B
       supertype: A<T1>
       constructors
@@ -42010,6 +42558,8 @@
         class A @21
           reference: <testLibraryFragment>::@class::A
           nextFragment: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
+          typeParameters
+            T @23
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::A::@constructor::new
@@ -42026,10 +42576,15 @@
         class A @35
           reference: <testLibrary>::@fragment::package:test/a.dart::@classAugmentation::A
           previousFragment: <testLibraryFragment>::@class::A
+          typeParameters
+            T @37
   classes
     class A
       reference: <testLibraryFragment>::@class::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+          bound: B
       firstFragment: <testLibraryFragment>::@class::A
       constructors
         synthetic new
diff --git a/pkg/analyzer/test/src/summary/elements/const_test.dart b/pkg/analyzer/test/src/summary/elements/const_test.dart
index 742e017..71a84c7 100644
--- a/pkg/analyzer/test/src/summary/elements/const_test.dart
+++ b/pkg/analyzer/test/src/summary/elements/const_test.dart
@@ -575,6 +575,8 @@
       classes
         class C @6
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            T @8
           fields
             t @23
               reference: <testLibraryFragment>::@class::C::@field::t
@@ -613,6 +615,8 @@
     class C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::C
       fields
         final t
@@ -1266,12 +1270,16 @@
       classes
         class P @6
           reference: <testLibraryFragment>::@class::P
+          typeParameters
+            T @8
           constructors
             const new @21
               reference: <testLibraryFragment>::@class::P::@constructor::new
               enclosingFragment: <testLibraryFragment>::@class::P
         class P1 @35
           reference: <testLibraryFragment>::@class::P1
+          typeParameters
+            T @38
           constructors
             const new @64
               reference: <testLibraryFragment>::@class::P1::@constructor::new
@@ -1281,6 +1289,8 @@
                 substitution: {T: T}
         class P2 @79
           reference: <testLibraryFragment>::@class::P2
+          typeParameters
+            T @82
           constructors
             const new @108
               reference: <testLibraryFragment>::@class::P2::@constructor::new
@@ -1301,6 +1311,8 @@
     class P
       reference: <testLibraryFragment>::@class::P
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::P
       constructors
         const new
@@ -1309,6 +1321,8 @@
     class P1
       reference: <testLibraryFragment>::@class::P1
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::P1
       supertype: P<T>
       constructors
@@ -1319,6 +1333,8 @@
     class P2
       reference: <testLibraryFragment>::@class::P2
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::P2
       supertype: P<T>
       constructors
@@ -2548,6 +2564,9 @@
       classes
         class C @6
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            K @8
+            V @11
           constructors
             const named @26
               reference: <testLibraryFragment>::@class::C::@constructor::named
@@ -2567,6 +2586,9 @@
     class C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        K
+        V
       firstFragment: <testLibraryFragment>::@class::C
       constructors
         const named
@@ -2886,6 +2908,9 @@
       classes
         class C @6
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            K @8
+            V @11
           constructors
             const new @24
               reference: <testLibraryFragment>::@class::C::@constructor::new
@@ -2903,6 +2928,9 @@
     class C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        K
+        V
       firstFragment: <testLibraryFragment>::@class::C
       constructors
         const new
@@ -3001,6 +3029,8 @@
       classes
         class A @6
           reference: <testLibraryFragment>::@class::A
+          typeParameters
+            T @8
           fields
             t @23
               reference: <testLibraryFragment>::@class::A::@field::t
@@ -3027,6 +3057,8 @@
     class A
       reference: <testLibraryFragment>::@class::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::A
       fields
         final t
@@ -3136,6 +3168,9 @@
       classes
         class C @6
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            K @8
+            V @11
           constructors
             const new @24
               reference: <testLibraryFragment>::@class::C::@constructor::new
@@ -3153,6 +3188,9 @@
     class C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        K
+        V
       firstFragment: <testLibraryFragment>::@class::C
       constructors
         const new
@@ -4217,6 +4255,8 @@
       classes
         class C @6
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            T @8
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::C::@constructor::new
@@ -4234,6 +4274,8 @@
     class C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::C
       constructors
         synthetic new
@@ -9147,6 +9189,8 @@
               enclosingFragment: <testLibraryFragment>::@class::C
         class D @17
           reference: <testLibraryFragment>::@class::D
+          typeParameters
+            T @19
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::D::@constructor::new
@@ -9251,6 +9295,8 @@
     class D
       reference: <testLibraryFragment>::@class::D
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::D
       constructors
         synthetic new
@@ -9819,6 +9865,8 @@
       classes
         class C @6
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            T @8
           fields
             f @21
               reference: <testLibraryFragment>::@class::C::@field::f
@@ -9836,6 +9884,8 @@
     class C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::C
       fields
         final f
diff --git a/pkg/analyzer/test/src/summary/elements/default_value_test.dart b/pkg/analyzer/test/src/summary/elements/default_value_test.dart
index e4d9606..3264f9a 100644
--- a/pkg/analyzer/test/src/summary/elements/default_value_test.dart
+++ b/pkg/analyzer/test/src/summary/elements/default_value_test.dart
@@ -63,6 +63,8 @@
       classes
         class A @6
           reference: <testLibraryFragment>::@class::A
+          typeParameters
+            T @8
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::A::@constructor::new
@@ -78,6 +80,8 @@
     class A
       reference: <testLibraryFragment>::@class::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::A
       constructors
         synthetic new
@@ -311,6 +315,8 @@
       classes
         class A @6
           reference: <testLibraryFragment>::@class::A
+          typeParameters
+            T @8
           constructors
             const new @21
               reference: <testLibraryFragment>::@class::A::@constructor::new
@@ -332,6 +338,8 @@
     class A
       reference: <testLibraryFragment>::@class::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::A
       constructors
         const new
@@ -783,6 +791,9 @@
       classes
         class B @6
           reference: <testLibraryFragment>::@class::B
+          typeParameters
+            T1 @8
+            T2 @12
           constructors
             const new @26
               reference: <testLibraryFragment>::@class::B::@constructor::new
@@ -803,6 +814,9 @@
     class B
       reference: <testLibraryFragment>::@class::B
       enclosingElement2: <testLibrary>
+      typeParameters
+        T1
+        T2
       firstFragment: <testLibraryFragment>::@class::B
       constructors
         const new
@@ -890,12 +904,16 @@
       classes
         class B @6
           reference: <testLibraryFragment>::@class::B
+          typeParameters
+            T @8
           constructors
             const new @21
               reference: <testLibraryFragment>::@class::B::@constructor::new
               enclosingFragment: <testLibraryFragment>::@class::B
         class C @34
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            T @36
           constructors
             const new @49
               reference: <testLibraryFragment>::@class::C::@constructor::new
@@ -904,6 +922,8 @@
     class B
       reference: <testLibraryFragment>::@class::B
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::B
       constructors
         const new
@@ -912,6 +932,8 @@
     class C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::C
       constructors
         const new
@@ -1002,18 +1024,24 @@
       classes
         class A @15
           reference: <testLibraryFragment>::@class::A
+          typeParameters
+            T @17
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::A::@constructor::new
               enclosingFragment: <testLibraryFragment>::@class::A
         class B @29
           reference: <testLibraryFragment>::@class::B
+          typeParameters
+            T @31
           constructors
             const new @60
               reference: <testLibraryFragment>::@class::B::@constructor::new
               enclosingFragment: <testLibraryFragment>::@class::B
         class C @73
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            T @75
           constructors
             const new @114
               reference: <testLibraryFragment>::@class::C::@constructor::new
@@ -1022,6 +1050,8 @@
     abstract class A
       reference: <testLibraryFragment>::@class::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::A
       constructors
         synthetic new
@@ -1030,6 +1060,8 @@
     class B
       reference: <testLibraryFragment>::@class::B
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::B
       constructors
         const new
@@ -1038,6 +1070,8 @@
     class C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::C
       constructors
         const new
@@ -1109,6 +1143,8 @@
       classes
         class B @6
           reference: <testLibraryFragment>::@class::B
+          typeParameters
+            T @8
           constructors
             const new @21
               reference: <testLibraryFragment>::@class::B::@constructor::new
@@ -1117,6 +1153,8 @@
     class B
       reference: <testLibraryFragment>::@class::B
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::B
       constructors
         const new
@@ -1193,6 +1231,8 @@
       classes
         class B @6
           reference: <testLibraryFragment>::@class::B
+          typeParameters
+            T @8
           constructors
             const new @21
               reference: <testLibraryFragment>::@class::B::@constructor::new
@@ -1207,12 +1247,16 @@
             foo @45
               reference: <testLibraryFragment>::@class::C::@method::foo
               enclosingFragment: <testLibraryFragment>::@class::C
+              typeParameters
+                T @49
               parameters
                 default b @58
   classes
     class B
       reference: <testLibraryFragment>::@class::B
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::B
       constructors
         const new
@@ -1229,6 +1273,8 @@
       methods
         foo
           reference: <none>
+          typeParameters
+            T
           parameters
             optionalPositional b
               reference: <none>
@@ -1310,12 +1356,17 @@
       classes
         class B @6
           reference: <testLibraryFragment>::@class::B
+          typeParameters
+            T1 @8
+            T2 @12
           constructors
             const new @26
               reference: <testLibraryFragment>::@class::B::@constructor::new
               enclosingFragment: <testLibraryFragment>::@class::B
         class C @39
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            E1 @41
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::C::@constructor::new
@@ -1324,12 +1375,17 @@
             foo @54
               reference: <testLibraryFragment>::@class::C::@method::foo
               enclosingFragment: <testLibraryFragment>::@class::C
+              typeParameters
+                E2 @58
               parameters
                 default b @73
   classes
     class B
       reference: <testLibraryFragment>::@class::B
       enclosingElement2: <testLibrary>
+      typeParameters
+        T1
+        T2
       firstFragment: <testLibraryFragment>::@class::B
       constructors
         const new
@@ -1338,6 +1394,8 @@
     class C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        E1
       firstFragment: <testLibraryFragment>::@class::C
       constructors
         synthetic new
@@ -1346,6 +1404,8 @@
       methods
         foo
           reference: <none>
+          typeParameters
+            E2
           parameters
             optionalPositional b
               reference: <none>
@@ -1422,12 +1482,16 @@
       classes
         class B @6
           reference: <testLibraryFragment>::@class::B
+          typeParameters
+            T @8
           constructors
             const new @21
               reference: <testLibraryFragment>::@class::B::@constructor::new
               enclosingFragment: <testLibraryFragment>::@class::B
         class C @34
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            T @36
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::C::@constructor::new
@@ -1442,6 +1506,8 @@
     class B
       reference: <testLibraryFragment>::@class::B
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::B
       constructors
         const new
@@ -1450,6 +1516,8 @@
     class C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::C
       constructors
         synthetic new
diff --git a/pkg/analyzer/test/src/summary/elements/enum_test.dart b/pkg/analyzer/test/src/summary/elements/enum_test.dart
index dbe5ccb..b8b3b28 100644
--- a/pkg/analyzer/test/src/summary/elements/enum_test.dart
+++ b/pkg/analyzer/test/src/summary/elements/enum_test.dart
@@ -355,6 +355,8 @@
       enums
         enum E @5
           reference: <testLibraryFragment>::@enum::E
+          typeParameters
+            T @7
           fields
             enumConstant int @14
               reference: <testLibraryFragment>::@enum::E::@field::int
@@ -386,6 +388,8 @@
     enum E
       reference: <testLibraryFragment>::@enum::E
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@enum::E
       supertype: Enum
       fields
@@ -650,6 +654,8 @@
       enums
         enum E @5
           reference: <testLibraryFragment>::@enum::E
+          typeParameters
+            T @7
           fields
             enumConstant v @14
               reference: <testLibraryFragment>::@enum::E::@field::v
@@ -674,6 +680,8 @@
     enum E
       reference: <testLibraryFragment>::@enum::E
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@enum::E
       supertype: Enum
       fields
@@ -2649,6 +2657,8 @@
       enums
         enum E @5
           reference: <testLibraryFragment>::@enum::E
+          typeParameters
+            T @7
           fields
             enumConstant v @14
               reference: <testLibraryFragment>::@enum::E::@field::v
@@ -2705,6 +2715,8 @@
     enum E
       reference: <testLibraryFragment>::@enum::E
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@enum::E
       supertype: Enum
       fields
@@ -3689,6 +3701,8 @@
       classes
         class I @6
           reference: <testLibraryFragment>::@class::I
+          typeParameters
+            T @8
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::I::@constructor::new
@@ -3696,6 +3710,8 @@
       enums
         enum E @19
           reference: <testLibraryFragment>::@enum::E
+          typeParameters
+            U @21
           fields
             enumConstant v @44
               reference: <testLibraryFragment>::@enum::E::@field::v
@@ -3720,6 +3736,8 @@
     class I
       reference: <testLibraryFragment>::@class::I
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::I
       constructors
         synthetic new
@@ -3729,6 +3747,8 @@
     enum E
       reference: <testLibraryFragment>::@enum::E
       enclosingElement2: <testLibrary>
+      typeParameters
+        U
       firstFragment: <testLibraryFragment>::@enum::E
       supertype: Enum
       fields
@@ -4026,6 +4046,8 @@
       enums
         enum E @5
           reference: <testLibraryFragment>::@enum::E
+          typeParameters
+            T @7
           fields
             enumConstant v @14
               reference: <testLibraryFragment>::@enum::E::@field::v
@@ -4050,6 +4072,8 @@
             foo @23
               reference: <testLibraryFragment>::@enum::E::@method::foo
               enclosingFragment: <testLibraryFragment>::@enum::E
+              typeParameters
+                U @27
               parameters
                 t @32
                 u @37
@@ -4057,6 +4081,8 @@
     enum E
       reference: <testLibraryFragment>::@enum::E
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@enum::E
       supertype: Enum
       fields
@@ -4088,6 +4114,8 @@
       methods
         foo
           reference: <none>
+          typeParameters
+            U
           parameters
             requiredPositional t
               reference: <none>
@@ -4667,8 +4695,12 @@
       mixins
         mixin M1 @6
           reference: <testLibraryFragment>::@mixin::M1
+          typeParameters
+            T @9
         mixin M2 @21
           reference: <testLibraryFragment>::@mixin::M2
+          typeParameters
+            T @24
   enums
     enum E
       reference: <testLibraryFragment>::@enum::E
@@ -4705,12 +4737,16 @@
     mixin M1
       reference: <testLibraryFragment>::@mixin::M1
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@mixin::M1
       superclassConstraints
         Object
     mixin M2
       reference: <testLibraryFragment>::@mixin::M2
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@mixin::M2
       superclassConstraints
         M1<T>
@@ -4956,6 +4992,8 @@
       enums
         enum E @5
           reference: <testLibraryFragment>::@enum::E
+          typeParameters
+            T @7
           fields
             enumConstant v @14
               reference: <testLibraryFragment>::@enum::E::@field::v
@@ -4980,6 +5018,8 @@
     enum E
       reference: <testLibraryFragment>::@enum::E
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@enum::E
       supertype: Enum
       fields
@@ -5091,6 +5131,9 @@
       enums
         enum E @5
           reference: <testLibraryFragment>::@enum::E
+          typeParameters
+            T @7
+            U @22
           fields
             enumConstant v @39
               reference: <testLibraryFragment>::@enum::E::@field::v
@@ -5115,6 +5158,11 @@
     enum E
       reference: <testLibraryFragment>::@enum::E
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+          bound: num
+        U
+          bound: T
       firstFragment: <testLibraryFragment>::@enum::E
       supertype: Enum
       fields
@@ -5193,6 +5241,8 @@
       enums
         enum E @5
           reference: <testLibraryFragment>::@enum::E
+          typeParameters
+            T @7
           fields
             values @-1
               reference: <testLibraryFragment>::@enum::E::@field::values
@@ -5210,6 +5260,9 @@
     enum E
       reference: <testLibraryFragment>::@enum::E
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+          bound: dynamic
       firstFragment: <testLibraryFragment>::@enum::E
       supertype: Enum
       fields
@@ -5284,6 +5337,10 @@
       enums
         enum E @5
           reference: <testLibraryFragment>::@enum::E
+          typeParameters
+            T @7
+            U @20
+            V @35
           fields
             values @-1
               reference: <testLibraryFragment>::@enum::E::@field::values
@@ -5301,6 +5358,13 @@
     enum E
       reference: <testLibraryFragment>::@enum::E
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+          bound: dynamic
+        U
+          bound: num
+        V
+          bound: dynamic
       firstFragment: <testLibraryFragment>::@enum::E
       supertype: Enum
       fields
@@ -5369,6 +5433,8 @@
       enums
         enum E @5
           reference: <testLibraryFragment>::@enum::E
+          typeParameters
+            T @7
           fields
             values @-1
               reference: <testLibraryFragment>::@enum::E::@field::values
@@ -5386,6 +5452,9 @@
     enum E
       reference: <testLibraryFragment>::@enum::E
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+          bound: void Function(E<dynamic>)
       firstFragment: <testLibraryFragment>::@enum::E
       supertype: Enum
       fields
@@ -5453,6 +5522,8 @@
       enums
         enum E @5
           reference: <testLibraryFragment>::@enum::E
+          typeParameters
+            T @10
           fields
             values @-1
               reference: <testLibraryFragment>::@enum::E::@field::values
@@ -5470,6 +5541,8 @@
     enum E
       reference: <testLibraryFragment>::@enum::E
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@enum::E
       supertype: Enum
       fields
@@ -5537,6 +5610,8 @@
       enums
         enum E @5
           reference: <testLibraryFragment>::@enum::E
+          typeParameters
+            T @11
           fields
             values @-1
               reference: <testLibraryFragment>::@enum::E::@field::values
@@ -5554,6 +5629,8 @@
     enum E
       reference: <testLibraryFragment>::@enum::E
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@enum::E
       supertype: Enum
       fields
@@ -5621,6 +5698,8 @@
       enums
         enum E @5
           reference: <testLibraryFragment>::@enum::E
+          typeParameters
+            T @13
           fields
             values @-1
               reference: <testLibraryFragment>::@enum::E::@field::values
@@ -5638,6 +5717,8 @@
     enum E
       reference: <testLibraryFragment>::@enum::E
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@enum::E
       supertype: Enum
       fields
@@ -5709,6 +5790,10 @@
       enums
         enum E @5
           reference: <testLibraryFragment>::@enum::E
+          typeParameters
+            T @13
+            U @19
+            V @26
           fields
             values @-1
               reference: <testLibraryFragment>::@enum::E::@field::values
@@ -5726,6 +5811,10 @@
     enum E
       reference: <testLibraryFragment>::@enum::E
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+        U
+        V
       firstFragment: <testLibraryFragment>::@enum::E
       supertype: Enum
       fields
@@ -8076,6 +8165,16 @@
       enums
         enum E @26
           reference: <testLibraryFragment>::@enum::E
+          typeParameters
+            T @33
+              metadata
+                Annotation
+                  atSign: @ @28
+                  name: SimpleIdentifier
+                    token: foo @29
+                    staticElement: <testLibraryFragment>::@getter::foo
+                    staticType: null
+                  element: <testLibraryFragment>::@getter::foo
           fields
             enumConstant v @40
               reference: <testLibraryFragment>::@enum::E::@field::v
@@ -8128,6 +8227,16 @@
     enum E
       reference: <testLibraryFragment>::@enum::E
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+          metadata
+            Annotation
+              atSign: @ @28
+              name: SimpleIdentifier
+                token: foo @29
+                staticElement: <testLibraryFragment>::@getter::foo
+                staticType: null
+              element: <testLibraryFragment>::@getter::foo
       firstFragment: <testLibraryFragment>::@enum::E
       supertype: Enum
       fields
@@ -8293,6 +8402,16 @@
       enums
         enum E @19
           reference: <testLibraryFragment>::@enum::E
+          typeParameters
+            T @24
+              metadata
+                Annotation
+                  atSign: @ @21
+                  name: SimpleIdentifier
+                    token: a @22
+                    staticElement: <testLibraryFragment>::@getter::a
+                    staticType: null
+                  element: <testLibraryFragment>::@getter::a
           fields
             enumConstant v @31
               reference: <testLibraryFragment>::@enum::E::@field::v
@@ -8326,6 +8445,16 @@
     enum E
       reference: <testLibraryFragment>::@enum::E
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+          metadata
+            Annotation
+              atSign: @ @21
+              name: SimpleIdentifier
+                token: a @22
+                staticElement: <testLibraryFragment>::@getter::a
+                staticType: null
+              element: <testLibraryFragment>::@getter::a
       firstFragment: <testLibraryFragment>::@enum::E
       supertype: Enum
       fields
@@ -10966,6 +11095,8 @@
         enum A @34
           reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
           previousFragment: <testLibraryFragment>::@enum::A
+          typeParameters
+            T @36
           fields
             enumConstant v @51
               reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@fieldAugmentation::v
@@ -11268,6 +11399,8 @@
         enum A @20
           reference: <testLibraryFragment>::@enum::A
           nextFragment: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          typeParameters
+            T1 @22
           fields
             enumConstant v @30
               reference: <testLibraryFragment>::@enum::A::@field::v
@@ -11290,6 +11423,8 @@
         enum A @34
           reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
           previousFragment: <testLibraryFragment>::@enum::A
+          typeParameters
+            T2 @36
           constructors
             const named @53
               reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@constructor::named
@@ -11300,6 +11435,8 @@
     enum A
       reference: <testLibraryFragment>::@enum::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T1
       firstFragment: <testLibraryFragment>::@enum::A
       supertype: Enum
       fields
@@ -14207,6 +14344,8 @@
         enum A @20
           reference: <testLibraryFragment>::@enum::A
           nextFragment: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          typeParameters
+            T1 @22
           fields
             enumConstant v @30
               reference: <testLibraryFragment>::@enum::A::@field::v
@@ -14240,6 +14379,8 @@
         enum A @34
           reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
           previousFragment: <testLibraryFragment>::@enum::A
+          typeParameters
+            T2 @36
           fields
             foo2 @54
               reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@field::foo2
@@ -14253,6 +14394,8 @@
     enum A
       reference: <testLibraryFragment>::@enum::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T1
       firstFragment: <testLibraryFragment>::@enum::A
       supertype: Enum
       fields
@@ -15063,6 +15206,8 @@
         enum A @20
           reference: <testLibraryFragment>::@enum::A
           nextFragment: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          typeParameters
+            T1 @22
           fields
             enumConstant v @30
               reference: <testLibraryFragment>::@enum::A::@field::v
@@ -15096,6 +15241,8 @@
         enum A @34
           reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
           previousFragment: <testLibraryFragment>::@enum::A
+          typeParameters
+            T2 @36
           fields
             foo2 @-1
               reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@field::foo2
@@ -15109,6 +15256,8 @@
     enum A
       reference: <testLibraryFragment>::@enum::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T1
       firstFragment: <testLibraryFragment>::@enum::A
       supertype: Enum
       fields
@@ -17090,6 +17239,8 @@
         enum A @20
           reference: <testLibraryFragment>::@enum::A
           nextFragment: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          typeParameters
+            T @22
           fields
             enumConstant v @43
               reference: <testLibraryFragment>::@enum::A::@field::v
@@ -17115,6 +17266,8 @@
       classes
         class I2 @67
           reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2
+          typeParameters
+            E @70
           constructors
             synthetic new @-1
               reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2::@constructor::new
@@ -17123,6 +17276,8 @@
         enum A @34
           reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
           previousFragment: <testLibraryFragment>::@enum::A
+          typeParameters
+            T2 @36
   classes
     class I1
       reference: <testLibraryFragment>::@class::I1
@@ -17135,6 +17290,8 @@
     class I2
       reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2
       enclosingElement2: <testLibrary>
+      typeParameters
+        E
       firstFragment: <testLibrary>::@fragment::package:test/a.dart::@class::I2
       constructors
         synthetic new
@@ -17144,6 +17301,8 @@
     enum A
       reference: <testLibraryFragment>::@enum::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@enum::A
       supertype: Enum
       fields
@@ -17304,6 +17463,8 @@
         enum A @20
           reference: <testLibraryFragment>::@enum::A
           nextFragment: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          typeParameters
+            T @22
           fields
             enumConstant v @43
               reference: <testLibraryFragment>::@enum::A::@field::v
@@ -17329,6 +17490,8 @@
       classes
         class I2 @71
           reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2
+          typeParameters
+            E @74
           constructors
             synthetic new @-1
               reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2::@constructor::new
@@ -17337,6 +17500,9 @@
         enum A @34
           reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
           previousFragment: <testLibraryFragment>::@enum::A
+          typeParameters
+            T2 @36
+            T3 @40
   classes
     class I1
       reference: <testLibraryFragment>::@class::I1
@@ -17349,6 +17515,8 @@
     class I2
       reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2
       enclosingElement2: <testLibrary>
+      typeParameters
+        E
       firstFragment: <testLibrary>::@fragment::package:test/a.dart::@class::I2
       constructors
         synthetic new
@@ -17358,6 +17526,8 @@
     enum A
       reference: <testLibraryFragment>::@enum::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@enum::A
       supertype: Enum
       fields
@@ -18687,6 +18857,8 @@
         enum A @20
           reference: <testLibraryFragment>::@enum::A
           nextFragment: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          typeParameters
+            T @22
           fields
             enumConstant v @29
               reference: <testLibraryFragment>::@enum::A::@field::v
@@ -18717,6 +18889,8 @@
         enum A @34
           reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
           previousFragment: <testLibraryFragment>::@enum::A
+          typeParameters
+            T2 @36
           methods
             bar @48
               reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@method::bar
@@ -18725,6 +18899,8 @@
     enum A
       reference: <testLibraryFragment>::@enum::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@enum::A
       supertype: Enum
       fields
@@ -18875,6 +19051,8 @@
         enum A @20
           reference: <testLibraryFragment>::@enum::A
           nextFragment: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          typeParameters
+            T @22
           fields
             enumConstant v @29
               reference: <testLibraryFragment>::@enum::A::@field::v
@@ -18906,6 +19084,8 @@
         enum A @34
           reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
           previousFragment: <testLibraryFragment>::@enum::A
+          typeParameters
+            T2 @36
           methods
             augment foo @56
               reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A::@methodAugmentation::foo
@@ -18915,6 +19095,8 @@
     enum A
       reference: <testLibraryFragment>::@enum::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@enum::A
       supertype: Enum
       fields
@@ -19295,6 +19477,8 @@
         enum A @35
           reference: <testLibraryFragment>::@enum::A
           nextFragment: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          typeParameters
+            T1 @37
           fields
             enumConstant v @57
               reference: <testLibraryFragment>::@enum::A::@field::v
@@ -19318,6 +19502,8 @@
       mixins
         mixin M1 @74
           reference: <testLibraryFragment>::@mixin::M1
+          typeParameters
+            U1 @77
     <testLibrary>::@fragment::package:test/a.dart
       previousFragment: <testLibraryFragment>
       nextFragment: <testLibrary>::@fragment::package:test/b.dart
@@ -19326,22 +19512,32 @@
           reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
           previousFragment: <testLibraryFragment>::@enum::A
           nextFragment: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A
+          typeParameters
+            T2 @36
       mixins
         mixin M2 @57
           reference: <testLibrary>::@fragment::package:test/a.dart::@mixin::M2
+          typeParameters
+            U2 @60
     <testLibrary>::@fragment::package:test/b.dart
       previousFragment: <testLibrary>::@fragment::package:test/a.dart
       enums
         enum A @34
           reference: <testLibrary>::@fragment::package:test/b.dart::@enumAugmentation::A
           previousFragment: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          typeParameters
+            T3 @36
       mixins
         mixin M3 @57
           reference: <testLibrary>::@fragment::package:test/b.dart::@mixin::M3
+          typeParameters
+            U3 @60
   enums
     enum A
       reference: <testLibraryFragment>::@enum::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T1
       firstFragment: <testLibraryFragment>::@enum::A
       supertype: Enum
       fields
@@ -19374,18 +19570,24 @@
     mixin M1
       reference: <testLibraryFragment>::@mixin::M1
       enclosingElement2: <testLibrary>
+      typeParameters
+        U1
       firstFragment: <testLibraryFragment>::@mixin::M1
       superclassConstraints
         Object
     mixin M2
       reference: <testLibrary>::@fragment::package:test/a.dart::@mixin::M2
       enclosingElement2: <testLibrary>
+      typeParameters
+        U2
       firstFragment: <testLibrary>::@fragment::package:test/a.dart::@mixin::M2
       superclassConstraints
         M1<U2>
     mixin M3
       reference: <testLibrary>::@fragment::package:test/b.dart::@mixin::M3
       enclosingElement2: <testLibrary>
+      typeParameters
+        U3
       firstFragment: <testLibrary>::@fragment::package:test/b.dart::@mixin::M3
       superclassConstraints
         M2<U3>
@@ -21925,6 +22127,8 @@
         enum A @20
           reference: <testLibraryFragment>::@enum::A
           nextFragment: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
+          typeParameters
+            T @22
           fields
             enumConstant v @39
               reference: <testLibraryFragment>::@enum::A::@field::v
@@ -21951,6 +22155,8 @@
         enum A @34
           reference: <testLibrary>::@fragment::package:test/a.dart::@enumAugmentation::A
           previousFragment: <testLibraryFragment>::@enum::A
+          typeParameters
+            T @36
   classes
     class B
       reference: <testLibraryFragment>::@class::B
@@ -21964,6 +22170,9 @@
     enum A
       reference: <testLibraryFragment>::@enum::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+          bound: B
       firstFragment: <testLibraryFragment>::@enum::A
       supertype: Enum
       fields
diff --git a/pkg/analyzer/test/src/summary/elements/extension_test.dart b/pkg/analyzer/test/src/summary/elements/extension_test.dart
index 7a94b48..85d7a88 100644
--- a/pkg/analyzer/test/src/summary/elements/extension_test.dart
+++ b/pkg/analyzer/test/src/summary/elements/extension_test.dart
@@ -151,10 +151,15 @@
       extensions
         extension E @10
           reference: <testLibraryFragment>::@extension::E
+          typeParameters
+            T @12
   extensions
     extension E
       reference: <testLibraryFragment>::@extension::E
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+          bound: num
       firstFragment: <testLibraryFragment>::@extension::E
 ''');
   }
@@ -186,10 +191,14 @@
       extensions
         extension E @10
           reference: <testLibraryFragment>::@extension::E
+          typeParameters
+            T @12
   extensions
     extension E
       reference: <testLibraryFragment>::@extension::E
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@extension::E
 ''');
   }
@@ -287,6 +296,16 @@
       extensions
         extension E @31
           reference: <testLibraryFragment>::@extension::E
+          typeParameters
+            T @38
+              metadata
+                Annotation
+                  atSign: @ @33
+                  name: SimpleIdentifier
+                    token: foo @34
+                    staticElement: <testLibraryFragment>::@getter::foo
+                    staticType: null
+                  element: <testLibraryFragment>::@getter::foo
           fields
             foo @65
               reference: <testLibraryFragment>::@extension::E::@field::foo
@@ -321,6 +340,16 @@
     extension E
       reference: <testLibraryFragment>::@extension::E
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+          metadata
+            Annotation
+              atSign: @ @33
+              name: SimpleIdentifier
+                token: foo @34
+                staticElement: <testLibraryFragment>::@getter::foo
+                staticType: null
+              element: <testLibraryFragment>::@getter::foo
       firstFragment: <testLibraryFragment>::@extension::E
       fields
         static const foo
@@ -2318,6 +2347,8 @@
         extension A @25
           reference: <testLibraryFragment>::@extension::A
           nextFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
+          typeParameters
+            T1 @27
           fields
             foo1 @-1
               reference: <testLibraryFragment>::@extension::A::@field::foo1
@@ -2333,6 +2364,8 @@
         extension A @39
           reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
           previousFragment: <testLibraryFragment>::@extension::A
+          typeParameters
+            T2 @41
           fields
             foo2 @-1
               reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@field::foo2
@@ -2346,6 +2379,8 @@
     extension A
       reference: <testLibraryFragment>::@extension::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T1
       firstFragment: <testLibraryFragment>::@extension::A
       fields
         synthetic foo1
@@ -3473,6 +3508,8 @@
         extension A @25
           reference: <testLibraryFragment>::@extension::A
           nextFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
+          typeParameters
+            T @27
           methods
             foo @43
               reference: <testLibraryFragment>::@extension::A::@method::foo
@@ -3483,6 +3520,8 @@
         extension A @39
           reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
           previousFragment: <testLibraryFragment>::@extension::A
+          typeParameters
+            T2 @41
           methods
             bar @52
               reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@method::bar
@@ -3491,6 +3530,8 @@
     extension A
       reference: <testLibraryFragment>::@extension::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@extension::A
       methods
         foo
@@ -3579,6 +3620,8 @@
         extension A @25
           reference: <testLibraryFragment>::@extension::A
           nextFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
+          typeParameters
+            T @27
           methods
             foo @43
               reference: <testLibraryFragment>::@extension::A::@method::foo
@@ -3590,6 +3633,8 @@
         extension A @39
           reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
           previousFragment: <testLibraryFragment>::@extension::A
+          typeParameters
+            T2 @41
           methods
             augment foo @60
               reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@methodAugmentation::foo
@@ -3599,6 +3644,8 @@
     extension A
       reference: <testLibraryFragment>::@extension::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@extension::A
       methods
         foo
@@ -3701,6 +3748,8 @@
         extension A @39
           reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A
           previousFragment: <testLibraryFragment>::@extension::A
+          typeParameters
+            T @41
           methods
             augment foo @61
               reference: <testLibrary>::@fragment::package:test/a.dart::@extensionAugmentation::A::@methodAugmentation::foo
diff --git a/pkg/analyzer/test/src/summary/elements/extension_type_test.dart b/pkg/analyzer/test/src/summary/elements/extension_type_test.dart
index e613b6c..c98f069 100644
--- a/pkg/analyzer/test/src/summary/elements/extension_type_test.dart
+++ b/pkg/analyzer/test/src/summary/elements/extension_type_test.dart
@@ -1842,6 +1842,8 @@
       extensionTypes
         extension type A @15
           reference: <testLibraryFragment>::@extensionType::A
+          typeParameters
+            T @17
           fields
             it @22
               reference: <testLibraryFragment>::@extensionType::A::@field::it
@@ -1855,6 +1857,8 @@
     extension type A
       reference: <testLibraryFragment>::@extensionType::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@extensionType::A
       typeErasure: T
       fields
@@ -2514,6 +2518,8 @@
       extensionTypes
         extension type A @15
           reference: <testLibraryFragment>::@extensionType::A
+          typeParameters
+            T @17
           fields
             it @34
               reference: <testLibraryFragment>::@extensionType::A::@field::it
@@ -2527,6 +2533,9 @@
     extension type A
       reference: <testLibraryFragment>::@extensionType::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+          bound: A<dynamic>
       firstFragment: <testLibraryFragment>::@extensionType::A
       typeErasure: int
       fields
@@ -3119,6 +3128,8 @@
       extensionTypes
         extension type A @15
           reference: <testLibraryFragment>::@extensionType::A
+          typeParameters
+            T @17
           fields
             it @22
               reference: <testLibraryFragment>::@extensionType::A::@field::it
@@ -3143,6 +3154,8 @@
     extension type A
       reference: <testLibraryFragment>::@extensionType::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@extensionType::A
       typeErasure: T
       fields
@@ -3410,6 +3423,9 @@
       extensionTypes
         extension type A @15
           reference: <testLibraryFragment>::@extensionType::A
+          typeParameters
+            T @17
+            U @32
           fields
             it @45
               reference: <testLibraryFragment>::@extensionType::A::@field::it
@@ -3427,6 +3443,10 @@
     extension type A
       reference: <testLibraryFragment>::@extensionType::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+          bound: num
+        U
       firstFragment: <testLibraryFragment>::@extensionType::A
       typeErasure: Map<T, U>
       fields
@@ -4031,6 +4051,8 @@
         extension type A @30
           reference: <testLibraryFragment>::@extensionType::A
           nextFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+          typeParameters
+            T1 @32
           fields
             it @40
               reference: <testLibraryFragment>::@extensionType::A::@field::it
@@ -4050,6 +4072,8 @@
         extension type A @44
           reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
           previousFragment: <testLibraryFragment>::@extensionType::A
+          typeParameters
+            T2 @46
           constructors
             named @64
               reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@constructor::named
@@ -4060,6 +4084,8 @@
     extension type A
       reference: <testLibraryFragment>::@extensionType::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T1
       firstFragment: <testLibraryFragment>::@extensionType::A
       typeErasure: int
       fields
@@ -6188,6 +6214,8 @@
         extension type A @30
           reference: <testLibraryFragment>::@extensionType::A
           nextFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+          typeParameters
+            T1 @32
           fields
             it @40
               reference: <testLibraryFragment>::@extensionType::A::@field::it
@@ -6214,6 +6242,8 @@
         extension type A @44
           reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
           previousFragment: <testLibraryFragment>::@extensionType::A
+          typeParameters
+            T2 @46
           fields
             foo2 @-1
               reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@field::foo2
@@ -6227,6 +6257,8 @@
     extension type A
       reference: <testLibraryFragment>::@extensionType::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T1
       firstFragment: <testLibraryFragment>::@extensionType::A
       typeErasure: int
       fields
@@ -7877,6 +7909,8 @@
         extension type A @30
           reference: <testLibraryFragment>::@extensionType::A
           nextFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+          typeParameters
+            T @32
           fields
             it @39
               reference: <testLibraryFragment>::@extensionType::A::@field::it
@@ -7911,8 +7945,12 @@
         extension type A @44
           reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
           previousFragment: <testLibraryFragment>::@extensionType::A
+          typeParameters
+            T2 @46
         extension type I2 @94
           reference: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2
+          typeParameters
+            E @97
           fields
             it @104
               reference: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@field::it
@@ -7930,6 +7968,8 @@
     extension type A
       reference: <testLibraryFragment>::@extensionType::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@extensionType::A
       typeErasure: int
       fields
@@ -7980,6 +8020,8 @@
     extension type I2
       reference: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2
       enclosingElement2: <testLibrary>
+      typeParameters
+        E
       firstFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2
       typeErasure: int
       fields
@@ -8149,6 +8191,8 @@
         extension type A @30
           reference: <testLibraryFragment>::@extensionType::A
           nextFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+          typeParameters
+            T @32
           fields
             it @39
               reference: <testLibraryFragment>::@extensionType::A::@field::it
@@ -8183,8 +8227,13 @@
         extension type A @44
           reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
           previousFragment: <testLibraryFragment>::@extensionType::A
+          typeParameters
+            T2 @46
+            T3 @50
         extension type I2 @98
           reference: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2
+          typeParameters
+            E @101
           fields
             it @108
               reference: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2::@field::it
@@ -8202,6 +8251,8 @@
     extension type A
       reference: <testLibraryFragment>::@extensionType::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@extensionType::A
       typeErasure: int
       fields
@@ -8252,6 +8303,8 @@
     extension type I2
       reference: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2
       enclosingElement2: <testLibrary>
+      typeParameters
+        E
       firstFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionType::I2
       typeErasure: int
       fields
@@ -8906,6 +8959,8 @@
         extension type A @30
           reference: <testLibraryFragment>::@extensionType::A
           nextFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+          typeParameters
+            T @32
           fields
             it @39
               reference: <testLibraryFragment>::@extensionType::A::@field::it
@@ -8929,6 +8984,8 @@
         extension type A @44
           reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
           previousFragment: <testLibraryFragment>::@extensionType::A
+          typeParameters
+            T2 @46
           methods
             bar @65
               reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@method::bar
@@ -8937,6 +8994,8 @@
     extension type A
       reference: <testLibraryFragment>::@extensionType::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@extensionType::A
       typeErasure: int
       fields
@@ -9072,6 +9131,8 @@
         extension type A @30
           reference: <testLibraryFragment>::@extensionType::A
           nextFragment: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
+          typeParameters
+            T @32
           fields
             it @39
               reference: <testLibraryFragment>::@extensionType::A::@field::it
@@ -9096,6 +9157,8 @@
         extension type A @44
           reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
           previousFragment: <testLibraryFragment>::@extensionType::A
+          typeParameters
+            T2 @46
           methods
             augment foo @73
               reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@methodAugmentation::foo
@@ -9105,6 +9168,8 @@
     extension type A
       reference: <testLibraryFragment>::@extensionType::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@extensionType::A
       typeErasure: int
       fields
@@ -9267,6 +9332,8 @@
         extension type A @44
           reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A
           previousFragment: <testLibraryFragment>::@extensionType::A
+          typeParameters
+            T @46
           methods
             augment foo @74
               reference: <testLibrary>::@fragment::package:test/a.dart::@extensionTypeAugmentation::A::@methodAugmentation::foo
diff --git a/pkg/analyzer/test/src/summary/elements/formal_parameter_test.dart b/pkg/analyzer/test/src/summary/elements/formal_parameter_test.dart
index 0da12fd..38e54ca 100644
--- a/pkg/analyzer/test/src/summary/elements/formal_parameter_test.dart
+++ b/pkg/analyzer/test/src/summary/elements/formal_parameter_test.dart
@@ -309,6 +309,8 @@
       classes
         class A @6
           reference: <testLibraryFragment>::@class::A
+          typeParameters
+            T @8
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::A::@constructor::new
@@ -321,6 +323,8 @@
                 t @34
         class B @48
           reference: <testLibraryFragment>::@class::B
+          typeParameters
+            T @50
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::B::@constructor::new
@@ -338,6 +342,8 @@
     class A
       reference: <testLibraryFragment>::@class::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::A
       constructors
         synthetic new
@@ -354,6 +360,8 @@
     class B
       reference: <testLibraryFragment>::@class::B
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::B
       supertype: A<T>
       constructors
@@ -610,6 +618,9 @@
       classes
         class C @6
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            A @8
+            B @11
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::C::@constructor::new
@@ -624,6 +635,9 @@
     class C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        A
+        B
       firstFragment: <testLibraryFragment>::@class::C
       constructors
         synthetic new
diff --git a/pkg/analyzer/test/src/summary/elements/function_type_annotation_test.dart b/pkg/analyzer/test/src/summary/elements/function_type_annotation_test.dart
index 6916b9a..d93566e 100644
--- a/pkg/analyzer/test/src/summary/elements/function_type_annotation_test.dart
+++ b/pkg/analyzer/test/src/summary/elements/function_type_annotation_test.dart
@@ -489,6 +489,8 @@
       classes
         class A @6
           reference: <testLibraryFragment>::@class::A
+          typeParameters
+            T @8
           constructors
             const new @21
               reference: <testLibraryFragment>::@class::A::@constructor::new
@@ -503,6 +505,8 @@
     class A
       reference: <testLibraryFragment>::@class::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::A
       constructors
         const new
@@ -614,6 +618,8 @@
       classes
         class A @6
           reference: <testLibraryFragment>::@class::A
+          typeParameters
+            T @8
           constructors
             const new @21
               reference: <testLibraryFragment>::@class::A::@constructor::new
@@ -680,6 +686,8 @@
     class A
       reference: <testLibraryFragment>::@class::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::A
       constructors
         const new
@@ -804,6 +812,8 @@
       classes
         class A @6
           reference: <testLibraryFragment>::@class::A
+          typeParameters
+            T @8
           constructors
             const new @21
               reference: <testLibraryFragment>::@class::A::@constructor::new
@@ -821,6 +831,8 @@
     class A
       reference: <testLibraryFragment>::@class::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::A
       constructors
         const new
@@ -935,6 +947,8 @@
       classes
         class A @6
           reference: <testLibraryFragment>::@class::A
+          typeParameters
+            T @8
           constructors
             const new @21
               reference: <testLibraryFragment>::@class::A::@constructor::new
@@ -952,6 +966,8 @@
     class A
       reference: <testLibraryFragment>::@class::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::A
       constructors
         const new
@@ -1066,6 +1082,8 @@
       classes
         class A @6
           reference: <testLibraryFragment>::@class::A
+          typeParameters
+            T @8
           constructors
             const new @21
               reference: <testLibraryFragment>::@class::A::@constructor::new
@@ -1083,6 +1101,8 @@
     class A
       reference: <testLibraryFragment>::@class::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::A
       constructors
         const new
@@ -1191,6 +1211,8 @@
       classes
         class A @6
           reference: <testLibraryFragment>::@class::A
+          typeParameters
+            T @8
           constructors
             const new @21
               reference: <testLibraryFragment>::@class::A::@constructor::new
@@ -1208,6 +1230,8 @@
     class A
       reference: <testLibraryFragment>::@class::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::A
       constructors
         const new
@@ -1257,10 +1281,15 @@
       mixins
         mixin B @6
           reference: <testLibraryFragment>::@mixin::B
+          typeParameters
+            X @8
   mixins
     mixin B
       reference: <testLibraryFragment>::@mixin::B
       enclosingElement2: <testLibrary>
+      typeParameters
+        X
+          bound: void Function()
       firstFragment: <testLibraryFragment>::@mixin::B
       superclassConstraints
         Object
@@ -1325,6 +1354,8 @@
       classes
         class A @6
           reference: <testLibraryFragment>::@class::A
+          typeParameters
+            T @8
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::A::@constructor::new
@@ -1352,6 +1383,8 @@
     class A
       reference: <testLibraryFragment>::@class::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::A
       constructors
         synthetic new
diff --git a/pkg/analyzer/test/src/summary/elements/metadata_test.dart b/pkg/analyzer/test/src/summary/elements/metadata_test.dart
index 51d697e..338db11 100644
--- a/pkg/analyzer/test/src/summary/elements/metadata_test.dart
+++ b/pkg/analyzer/test/src/summary/elements/metadata_test.dart
@@ -637,6 +637,16 @@
       classes
         class C @27
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            T @34
+              metadata
+                Annotation
+                  atSign: @ @29
+                  name: SimpleIdentifier
+                    token: foo @30
+                    staticElement: <testLibraryFragment>::@getter::foo
+                    staticType: null
+                  element: <testLibraryFragment>::@getter::foo
           fields
             foo @54
               reference: <testLibraryFragment>::@class::C::@field::foo
@@ -675,6 +685,16 @@
     class C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+          metadata
+            Annotation
+              atSign: @ @29
+              name: SimpleIdentifier
+                token: foo @30
+                staticElement: <testLibraryFragment>::@getter::foo
+                staticType: null
+              element: <testLibraryFragment>::@getter::foo
       firstFragment: <testLibraryFragment>::@class::C
       fields
         static const foo
@@ -1173,6 +1193,8 @@
       classes
         class A @6
           reference: <testLibraryFragment>::@class::A
+          typeParameters
+            T @8
           constructors
             const named @23
               reference: <testLibraryFragment>::@class::A::@constructor::named
@@ -1189,6 +1211,8 @@
     class A
       reference: <testLibraryFragment>::@class::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::A
       constructors
         const named
@@ -1281,6 +1305,8 @@
       classes
         class A @6
           reference: <testLibraryFragment>::@class::A
+          typeParameters
+            T @8
           constructors
             const named @23
               reference: <testLibraryFragment>::@class::A::@constructor::named
@@ -1297,6 +1323,8 @@
     class A
       reference: <testLibraryFragment>::@class::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::A
       constructors
         const named
@@ -1385,6 +1413,8 @@
       classes
         class A @6
           reference: <testLibraryFragment>::@class::A
+          typeParameters
+            T @8
           constructors
             const named @23
               reference: <testLibraryFragment>::@class::A::@constructor::named
@@ -1401,6 +1431,8 @@
     class A
       reference: <testLibraryFragment>::@class::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::A
       constructors
         const named
@@ -1842,6 +1874,8 @@
               nameEnd: 25
         class C @50
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            T @52
           constructors
             synthetic const named @-1
               reference: <testLibraryFragment>::@class::C::@constructor::named
@@ -1880,6 +1914,8 @@
     class alias C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::C
       supertype: A
       constructors
@@ -2057,6 +2093,8 @@
       classes
         class A @6
           reference: <testLibraryFragment>::@class::A
+          typeParameters
+            T @8
           constructors
             const new @21
               reference: <testLibraryFragment>::@class::A::@constructor::new
@@ -2071,6 +2109,8 @@
     class A
       reference: <testLibraryFragment>::@class::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::A
       constructors
         const new
@@ -2154,6 +2194,8 @@
       classes
         class A @6
           reference: <testLibraryFragment>::@class::A
+          typeParameters
+            T @8
           constructors
             const new @21
               reference: <testLibraryFragment>::@class::A::@constructor::new
@@ -2168,6 +2210,8 @@
     class A
       reference: <testLibraryFragment>::@class::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::A
       constructors
         const new
@@ -2562,6 +2606,8 @@
               enclosingFragment: <testLibraryFragment>::@class::A
         class C @44
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            T @46
           constructors
             synthetic const new @-1
               reference: <testLibraryFragment>::@class::C::@constructor::new
@@ -2595,6 +2641,8 @@
     class alias C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::C
       supertype: A
       constructors
@@ -5225,6 +5273,16 @@
       mixins
         mixin M @27
           reference: <testLibraryFragment>::@mixin::M
+          typeParameters
+            T @34
+              metadata
+                Annotation
+                  atSign: @ @29
+                  name: SimpleIdentifier
+                    token: foo @30
+                    staticElement: <testLibraryFragment>::@getter::foo
+                    staticType: null
+                  element: <testLibraryFragment>::@getter::foo
           fields
             foo @54
               reference: <testLibraryFragment>::@mixin::M::@field::foo
@@ -5259,6 +5317,16 @@
     mixin M
       reference: <testLibraryFragment>::@mixin::M
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+          metadata
+            Annotation
+              atSign: @ @29
+              name: SimpleIdentifier
+                token: foo @30
+                staticElement: <testLibraryFragment>::@getter::foo
+                staticType: null
+              element: <testLibraryFragment>::@getter::foo
       firstFragment: <testLibraryFragment>::@mixin::M
       superclassConstraints
         Object
@@ -5484,6 +5552,16 @@
       classes
         class A @27
           reference: <testLibraryFragment>::@class::A
+          typeParameters
+            T @34
+              metadata
+                Annotation
+                  atSign: @ @29
+                  name: SimpleIdentifier
+                    token: foo @30
+                    staticElement: <testLibraryFragment>::@getter::foo
+                    staticType: null
+                  element: <testLibraryFragment>::@getter::foo
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::A::@constructor::new
@@ -5501,6 +5579,16 @@
     class A
       reference: <testLibraryFragment>::@class::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+          metadata
+            Annotation
+              atSign: @ @29
+              name: SimpleIdentifier
+                token: foo @30
+                staticElement: <testLibraryFragment>::@getter::foo
+                staticType: null
+              element: <testLibraryFragment>::@getter::foo
       firstFragment: <testLibraryFragment>::@class::A
       constructors
         synthetic new
@@ -5889,6 +5977,16 @@
                     staticElement: <testLibraryFragment>::@getter::foo
                     staticType: null
                   element: <testLibraryFragment>::@getter::foo
+              typeParameters
+                T @52
+                  metadata
+                    Annotation
+                      atSign: @ @47
+                      name: SimpleIdentifier
+                        token: foo @48
+                        staticElement: <testLibraryFragment>::@getter::foo
+                        staticType: null
+                      element: <testLibraryFragment>::@getter::foo
               parameters
                 a @64
                   metadata
@@ -5928,6 +6026,16 @@
                 staticElement: <testLibraryFragment>::@getter::foo
                 staticType: null
               element: <testLibraryFragment>::@getter::foo
+          typeParameters
+            T
+              metadata
+                Annotation
+                  atSign: @ @47
+                  name: SimpleIdentifier
+                    token: foo @48
+                    staticElement: <testLibraryFragment>::@getter::foo
+                    staticType: null
+                  element: <testLibraryFragment>::@getter::foo
           parameters
             requiredPositional a
               reference: <none>
@@ -6225,6 +6333,16 @@
               enclosingFragment: <testLibraryFragment>::@class::A
         class B @50
           reference: <testLibraryFragment>::@class::B
+          typeParameters
+            T @57
+              metadata
+                Annotation
+                  atSign: @ @52
+                  name: SimpleIdentifier
+                    token: foo @53
+                    staticElement: <testLibraryFragment>::@getter::foo
+                    staticType: null
+                  element: <testLibraryFragment>::@getter::foo
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::B::@constructor::new
@@ -6261,6 +6379,16 @@
     class alias B
       reference: <testLibraryFragment>::@class::B
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+          metadata
+            Annotation
+              atSign: @ @52
+              name: SimpleIdentifier
+                token: foo @53
+                staticElement: <testLibraryFragment>::@getter::foo
+                staticType: null
+              element: <testLibraryFragment>::@getter::foo
       firstFragment: <testLibraryFragment>::@class::B
       supertype: A
       constructors
@@ -6626,6 +6754,16 @@
       extensions
         extension E @31
           reference: <testLibraryFragment>::@extension::E
+          typeParameters
+            T @38
+              metadata
+                Annotation
+                  atSign: @ @33
+                  name: SimpleIdentifier
+                    token: foo @34
+                    staticElement: <testLibraryFragment>::@getter::foo
+                    staticType: null
+                  element: <testLibraryFragment>::@getter::foo
       topLevelVariables
         const foo @6
           reference: <testLibraryFragment>::@topLevelVariable::foo
@@ -6639,6 +6777,16 @@
     extension E
       reference: <testLibraryFragment>::@extension::E
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+          metadata
+            Annotation
+              atSign: @ @33
+              name: SimpleIdentifier
+                token: foo @34
+                staticElement: <testLibraryFragment>::@getter::foo
+                staticType: null
+              element: <testLibraryFragment>::@getter::foo
       firstFragment: <testLibraryFragment>::@extension::E
   topLevelVariables
     const foo
@@ -7045,6 +7193,16 @@
       mixins
         mixin A @27
           reference: <testLibraryFragment>::@mixin::A
+          typeParameters
+            T @34
+              metadata
+                Annotation
+                  atSign: @ @29
+                  name: SimpleIdentifier
+                    token: foo @30
+                    staticElement: <testLibraryFragment>::@getter::foo
+                    staticType: null
+                  element: <testLibraryFragment>::@getter::foo
       topLevelVariables
         const foo @6
           reference: <testLibraryFragment>::@topLevelVariable::foo
@@ -7058,6 +7216,16 @@
     mixin A
       reference: <testLibraryFragment>::@mixin::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+          metadata
+            Annotation
+              atSign: @ @29
+              name: SimpleIdentifier
+                token: foo @30
+                staticElement: <testLibraryFragment>::@getter::foo
+                staticType: null
+              element: <testLibraryFragment>::@getter::foo
       firstFragment: <testLibraryFragment>::@mixin::A
       superclassConstraints
         Object
@@ -9036,6 +9204,16 @@
       classes
         class C @22
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            T @27
+              metadata
+                Annotation
+                  atSign: @ @24
+                  name: SimpleIdentifier
+                    token: a @25
+                    staticElement: <testLibraryFragment>::@getter::a
+                    staticType: null
+                  element: <testLibraryFragment>::@getter::a
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::C::@constructor::new
@@ -9053,6 +9231,16 @@
     class C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+          metadata
+            Annotation
+              atSign: @ @24
+              name: SimpleIdentifier
+                token: a @25
+                staticElement: <testLibraryFragment>::@getter::a
+                staticType: null
+              element: <testLibraryFragment>::@getter::a
       firstFragment: <testLibraryFragment>::@class::C
       constructors
         synthetic new
@@ -9153,6 +9341,16 @@
       classes
         class C @22
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            T @27
+              metadata
+                Annotation
+                  atSign: @ @24
+                  name: SimpleIdentifier
+                    token: a @25
+                    staticElement: <testLibraryFragment>::@getter::a
+                    staticType: null
+                  element: <testLibraryFragment>::@getter::a
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::C::@constructor::new
@@ -9190,6 +9388,16 @@
     class alias C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+          metadata
+            Annotation
+              atSign: @ @24
+              name: SimpleIdentifier
+                token: a @25
+                staticElement: <testLibraryFragment>::@getter::a
+                staticType: null
+              element: <testLibraryFragment>::@getter::a
       firstFragment: <testLibraryFragment>::@class::C
       supertype: D
       constructors
diff --git a/pkg/analyzer/test/src/summary/elements/mixin_test.dart b/pkg/analyzer/test/src/summary/elements/mixin_test.dart
index 64eb781..fcac61c 100644
--- a/pkg/analyzer/test/src/summary/elements/mixin_test.dart
+++ b/pkg/analyzer/test/src/summary/elements/mixin_test.dart
@@ -162,6 +162,9 @@
       mixins
         mixin M @51
           reference: <testLibraryFragment>::@mixin::M
+          typeParameters
+            T @53
+            U @68
           fields
             f @101
               reference: <testLibraryFragment>::@mixin::M::@field::f
@@ -237,6 +240,10 @@
     mixin M
       reference: <testLibraryFragment>::@mixin::M
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+          bound: num
+        U
       firstFragment: <testLibraryFragment>::@mixin::M
       superclassConstraints
         A
@@ -712,6 +719,8 @@
       classes
         class A @6
           reference: <testLibraryFragment>::@class::A
+          typeParameters
+            T @8
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::A::@constructor::new
@@ -728,10 +737,14 @@
       mixins
         mixin M @20
           reference: <testLibraryFragment>::@mixin::M
+          typeParameters
+            U @22
   classes
     class A
       reference: <testLibraryFragment>::@class::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::A
       constructors
         synthetic new
@@ -751,6 +764,8 @@
     mixin M
       reference: <testLibraryFragment>::@mixin::M
       enclosingElement2: <testLibrary>
+      typeParameters
+        U
       firstFragment: <testLibraryFragment>::@mixin::M
       superclassConstraints
         A<U>
@@ -833,12 +848,16 @@
       classes
         class A @6
           reference: <testLibraryFragment>::@class::A
+          typeParameters
+            T @8
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::A::@constructor::new
               enclosingFragment: <testLibraryFragment>::@class::A
         class B @20
           reference: <testLibraryFragment>::@class::B
+          typeParameters
+            T @22
           constructors
             synthetic const new @-1
               reference: <testLibraryFragment>::@class::B::@constructor::new
@@ -870,6 +889,8 @@
     class A
       reference: <testLibraryFragment>::@class::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::A
       constructors
         synthetic new
@@ -878,6 +899,8 @@
     class alias B
       reference: <testLibraryFragment>::@class::B
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::B
       supertype: Object
       constructors
@@ -994,18 +1017,24 @@
       classes
         class A1 @6
           reference: <testLibraryFragment>::@class::A1
+          typeParameters
+            T @9
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::A1::@constructor::new
               enclosingFragment: <testLibraryFragment>::@class::A1
         class A2 @21
           reference: <testLibraryFragment>::@class::A2
+          typeParameters
+            T @24
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::A2::@constructor::new
               enclosingFragment: <testLibraryFragment>::@class::A2
         class B @36
           reference: <testLibraryFragment>::@class::B
+          typeParameters
+            T @38
           constructors
             synthetic const new @-1
               reference: <testLibraryFragment>::@class::B::@constructor::new
@@ -1041,6 +1070,8 @@
     class A1
       reference: <testLibraryFragment>::@class::A1
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::A1
       constructors
         synthetic new
@@ -1049,6 +1080,8 @@
     class A2
       reference: <testLibraryFragment>::@class::A2
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::A2
       constructors
         synthetic new
@@ -1057,6 +1090,8 @@
     class alias B
       reference: <testLibraryFragment>::@class::B
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::B
       supertype: Object
       constructors
@@ -1140,6 +1175,8 @@
       classes
         class A @6
           reference: <testLibraryFragment>::@class::A
+          typeParameters
+            T @8
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::A::@constructor::new
@@ -1156,10 +1193,15 @@
       mixins
         mixin M @20
           reference: <testLibraryFragment>::@mixin::M
+          typeParameters
+            T @22
+            U @25
   classes
     class A
       reference: <testLibraryFragment>::@class::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::A
       constructors
         synthetic new
@@ -1179,6 +1221,9 @@
     mixin M
       reference: <testLibraryFragment>::@mixin::M
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+        U
       firstFragment: <testLibraryFragment>::@mixin::M
       superclassConstraints
         A<T Function(U)>
@@ -1239,6 +1284,8 @@
       classes
         class A @15
           reference: <testLibraryFragment>::@class::A
+          typeParameters
+            T @17
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::A::@constructor::new
@@ -1255,10 +1302,14 @@
       mixins
         mixin M @29
           reference: <testLibraryFragment>::@mixin::M
+          typeParameters
+            T @31
   classes
     abstract class A
       reference: <testLibraryFragment>::@class::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::A
       constructors
         synthetic new
@@ -1278,6 +1329,8 @@
     mixin M
       reference: <testLibraryFragment>::@mixin::M
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@mixin::M
       superclassConstraints
         A<List<T>>
@@ -1356,6 +1409,8 @@
       classes
         class I @6
           reference: <testLibraryFragment>::@class::I
+          typeParameters
+            X @8
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::I::@constructor::new
@@ -1379,12 +1434,18 @@
       mixins
         mixin M1 @20
           reference: <testLibraryFragment>::@mixin::M1
+          typeParameters
+            T @23
         mixin M2 @43
           reference: <testLibraryFragment>::@mixin::M2
+          typeParameters
+            T @46
   classes
     class I
       reference: <testLibraryFragment>::@class::I
       enclosingElement2: <testLibrary>
+      typeParameters
+        X
       firstFragment: <testLibraryFragment>::@class::I
       constructors
         synthetic new
@@ -1404,12 +1465,16 @@
     mixin M1
       reference: <testLibraryFragment>::@mixin::M1
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@mixin::M1
       superclassConstraints
         I<T>
     mixin M2
       reference: <testLibraryFragment>::@mixin::M2
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@mixin::M2
       superclassConstraints
         I<T>
@@ -1486,6 +1551,8 @@
       classes
         class S @62
           reference: <testLibraryFragment>::@class::S
+          typeParameters
+            T3 @64
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::S::@constructor::new
@@ -1502,10 +1569,15 @@
       mixins
         mixin M @6
           reference: <testLibraryFragment>::@mixin::M
+          typeParameters
+            T @8
+            U @11
   classes
     class S
       reference: <testLibraryFragment>::@class::S
       enclosingElement2: <testLibrary>
+      typeParameters
+        T3
       firstFragment: <testLibraryFragment>::@class::S
       constructors
         synthetic new
@@ -1525,6 +1597,9 @@
     mixin M
       reference: <testLibraryFragment>::@mixin::M
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+        U
       firstFragment: <testLibraryFragment>::@mixin::M
       superclassConstraints
         S<T>
@@ -1612,6 +1687,8 @@
       classes
         class S @88
           reference: <testLibraryFragment>::@class::S
+          typeParameters
+            T4 @90
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::S::@constructor::new
@@ -1628,10 +1705,15 @@
       mixins
         mixin M @6
           reference: <testLibraryFragment>::@mixin::M
+          typeParameters
+            T @8
+            U @11
   classes
     class S
       reference: <testLibraryFragment>::@class::S
       enclosingElement2: <testLibrary>
+      typeParameters
+        T4
       firstFragment: <testLibraryFragment>::@class::S
       constructors
         synthetic new
@@ -1651,6 +1733,9 @@
     mixin M
       reference: <testLibraryFragment>::@mixin::M
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+        U
       firstFragment: <testLibraryFragment>::@mixin::M
       superclassConstraints
         S<T>
@@ -2187,10 +2272,14 @@
       mixins
         mixin M @6
           reference: <testLibraryFragment>::@mixin::M
+          typeParameters
+            T @11
   mixins
     mixin M
       reference: <testLibraryFragment>::@mixin::M
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@mixin::M
       superclassConstraints
         Object
@@ -2223,10 +2312,14 @@
       mixins
         mixin M @6
           reference: <testLibraryFragment>::@mixin::M
+          typeParameters
+            T @12
   mixins
     mixin M
       reference: <testLibraryFragment>::@mixin::M
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@mixin::M
       superclassConstraints
         Object
@@ -2259,10 +2352,14 @@
       mixins
         mixin M @6
           reference: <testLibraryFragment>::@mixin::M
+          typeParameters
+            T @14
   mixins
     mixin M
       reference: <testLibraryFragment>::@mixin::M
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@mixin::M
       superclassConstraints
         Object
@@ -2299,10 +2396,18 @@
       mixins
         mixin M @6
           reference: <testLibraryFragment>::@mixin::M
+          typeParameters
+            T @14
+            U @20
+            V @27
   mixins
     mixin M
       reference: <testLibraryFragment>::@mixin::M
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+        U
+        V
       firstFragment: <testLibraryFragment>::@mixin::M
       superclassConstraints
         Object
@@ -4249,6 +4354,8 @@
         mixin A @21
           reference: <testLibraryFragment>::@mixin::A
           nextFragment: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+          typeParameters
+            T1 @23
           fields
             foo1 @34
               reference: <testLibraryFragment>::@mixin::A::@field::foo1
@@ -4271,6 +4378,8 @@
         mixin A @35
           reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
           previousFragment: <testLibraryFragment>::@mixin::A
+          typeParameters
+            T2 @37
           fields
             foo2 @48
               reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@field::foo2
@@ -4291,6 +4400,8 @@
     mixin A
       reference: <testLibraryFragment>::@mixin::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T1
       firstFragment: <testLibraryFragment>::@mixin::A
       superclassConstraints
         Object
@@ -4590,6 +4701,8 @@
         mixin A @21
           reference: <testLibraryFragment>::@mixin::A
           nextFragment: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+          typeParameters
+            T1 @23
           fields
             foo1 @-1
               reference: <testLibraryFragment>::@mixin::A::@field::foo1
@@ -4605,6 +4718,8 @@
         mixin A @35
           reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
           previousFragment: <testLibraryFragment>::@mixin::A
+          typeParameters
+            T2 @37
           fields
             foo2 @-1
               reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@field::foo2
@@ -4618,6 +4733,8 @@
     mixin A
       reference: <testLibraryFragment>::@mixin::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T1
       firstFragment: <testLibraryFragment>::@mixin::A
       superclassConstraints
         Object
@@ -6093,6 +6210,8 @@
         mixin A @21
           reference: <testLibraryFragment>::@mixin::A
           nextFragment: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+          typeParameters
+            T @23
           methods
             foo @32
               reference: <testLibraryFragment>::@mixin::A::@method::foo
@@ -6103,6 +6222,8 @@
         mixin A @35
           reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
           previousFragment: <testLibraryFragment>::@mixin::A
+          typeParameters
+            T2 @37
           methods
             bar @48
               reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@method::bar
@@ -6111,6 +6232,8 @@
     mixin A
       reference: <testLibraryFragment>::@mixin::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@mixin::A
       superclassConstraints
         Object
@@ -6204,6 +6327,8 @@
         mixin A @21
           reference: <testLibraryFragment>::@mixin::A
           nextFragment: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+          typeParameters
+            T @23
           methods
             foo @32
               reference: <testLibraryFragment>::@mixin::A::@method::foo
@@ -6215,6 +6340,8 @@
         mixin A @35
           reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
           previousFragment: <testLibraryFragment>::@mixin::A
+          typeParameters
+            T2 @37
           methods
             augment foo @56
               reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@methodAugmentation::foo
@@ -6224,6 +6351,8 @@
     mixin A
       reference: <testLibraryFragment>::@mixin::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@mixin::A
       superclassConstraints
         Object
@@ -6331,6 +6460,8 @@
         mixin A @35
           reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
           previousFragment: <testLibraryFragment>::@mixin::A
+          typeParameters
+            T @37
           methods
             augment foo @57
               reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A::@methodAugmentation::foo
@@ -7356,11 +7487,15 @@
         mixin A @21
           reference: <testLibraryFragment>::@mixin::A
           nextFragment: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+          typeParameters
+            T @23
     <testLibrary>::@fragment::package:test/a.dart
       previousFragment: <testLibraryFragment>
       classes
         class I2 @60
           reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2
+          typeParameters
+            E @63
           constructors
             synthetic new @-1
               reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2::@constructor::new
@@ -7369,6 +7504,8 @@
         mixin A @35
           reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
           previousFragment: <testLibraryFragment>::@mixin::A
+          typeParameters
+            T2 @37
   classes
     class I1
       reference: <testLibraryFragment>::@class::I1
@@ -7381,6 +7518,8 @@
     class I2
       reference: <testLibrary>::@fragment::package:test/a.dart::@class::I2
       enclosingElement2: <testLibrary>
+      typeParameters
+        E
       firstFragment: <testLibrary>::@fragment::package:test/a.dart::@class::I2
       constructors
         synthetic new
@@ -7390,6 +7529,8 @@
     mixin A
       reference: <testLibraryFragment>::@mixin::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@mixin::A
       superclassConstraints
         I1
@@ -8356,16 +8497,23 @@
         mixin A @21
           reference: <testLibraryFragment>::@mixin::A
           nextFragment: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
+          typeParameters
+            T @23
     <testLibrary>::@fragment::package:test/a.dart
       previousFragment: <testLibraryFragment>
       mixins
         mixin A @35
           reference: <testLibrary>::@fragment::package:test/a.dart::@mixinAugmentation::A
           previousFragment: <testLibraryFragment>::@mixin::A
+          typeParameters
+            T @37
   mixins
     mixin A
       reference: <testLibraryFragment>::@mixin::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+          bound: A<dynamic>
       firstFragment: <testLibraryFragment>::@mixin::A
       superclassConstraints
         Object
diff --git a/pkg/analyzer/test/src/summary/elements/offsets_test.dart b/pkg/analyzer/test/src/summary/elements/offsets_test.dart
index fffef8c..f5644b8 100644
--- a/pkg/analyzer/test/src/summary/elements/offsets_test.dart
+++ b/pkg/analyzer/test/src/summary/elements/offsets_test.dart
@@ -4113,6 +4113,8 @@
       classes
         class A @6
           reference: <testLibraryFragment>::@class::A
+          typeParameters
+            T @8
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::A::@constructor::new
@@ -4123,6 +4125,10 @@
       enclosingElement2: <testLibrary>
       codeOffset: 0
       codeLength: 13
+      typeParameters
+        T
+          codeOffset: 8
+          codeLength: 1
       firstFragment: <testLibraryFragment>::@class::A
       constructors
         synthetic new
@@ -4467,6 +4473,8 @@
             foo @17
               reference: <testLibraryFragment>::@class::A::@method::foo
               enclosingFragment: <testLibraryFragment>::@class::A
+              typeParameters
+                T @21
               parameters
                 a @28
   classes
@@ -4481,6 +4489,8 @@
       methods
         foo
           reference: <none>
+          typeParameters
+            T
           parameters
             requiredPositional a
               reference: <none>
@@ -4604,6 +4614,8 @@
       classes
         class A @6
           reference: <testLibraryFragment>::@class::A
+          typeParameters
+            T @8
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::A::@constructor::new
@@ -4612,6 +4624,8 @@
     class A
       reference: <testLibraryFragment>::@class::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::A
       constructors
         synthetic new
@@ -4647,10 +4661,14 @@
       extensions
         extension E @10
           reference: <testLibraryFragment>::@extension::E
+          typeParameters
+            T @12
   extensions
     extension E
       reference: <testLibraryFragment>::@extension::E
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@extension::E
 ''');
   }
@@ -4831,10 +4849,14 @@
       mixins
         mixin M @6
           reference: <testLibraryFragment>::@mixin::M
+          typeParameters
+            T @8
   mixins
     mixin M
       reference: <testLibraryFragment>::@mixin::M
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@mixin::M
       superclassConstraints
         Object
diff --git a/pkg/analyzer/test/src/summary/elements/record_type_test.dart b/pkg/analyzer/test/src/summary/elements/record_type_test.dart
index b1a31fd..0a2cb42 100644
--- a/pkg/analyzer/test/src/summary/elements/record_type_test.dart
+++ b/pkg/analyzer/test/src/summary/elements/record_type_test.dart
@@ -325,6 +325,8 @@
       classes
         class A @6
           reference: <testLibraryFragment>::@class::A
+          typeParameters
+            T @8
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::A::@constructor::new
@@ -333,6 +335,9 @@
     class A
       reference: <testLibraryFragment>::@class::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+          bound: (int, String)
       firstFragment: <testLibraryFragment>::@class::A
       constructors
         synthetic new
diff --git a/pkg/analyzer/test/src/summary/elements/top_level_variable_test.dart b/pkg/analyzer/test/src/summary/elements/top_level_variable_test.dart
index 7a436f5..a9aef1b 100644
--- a/pkg/analyzer/test/src/summary/elements/top_level_variable_test.dart
+++ b/pkg/analyzer/test/src/summary/elements/top_level_variable_test.dart
@@ -3554,6 +3554,8 @@
       classes
         class A @6
           reference: <testLibraryFragment>::@class::A
+          typeParameters
+            T @8
           constructors
             const new @21
               reference: <testLibraryFragment>::@class::A::@constructor::new
@@ -3571,6 +3573,8 @@
     class A
       reference: <testLibraryFragment>::@class::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::A
       constructors
         const new
diff --git a/pkg/analyzer/test/src/summary/elements/type_alias_test.dart b/pkg/analyzer/test/src/summary/elements/type_alias_test.dart
index 33b6f9e..ce103ae 100644
--- a/pkg/analyzer/test/src/summary/elements/type_alias_test.dart
+++ b/pkg/analyzer/test/src/summary/elements/type_alias_test.dart
@@ -1893,6 +1893,8 @@
       classes
         class C @38
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            T @40
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::C::@constructor::new
@@ -1901,6 +1903,9 @@
     class C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+          bound: C<T>
       firstFragment: <testLibraryFragment>::@class::C
       constructors
         synthetic new
@@ -1952,6 +1957,8 @@
       classes
         class C @36
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            T @38
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::C::@constructor::new
@@ -1960,6 +1967,9 @@
     class C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+          bound: C<T>
       firstFragment: <testLibraryFragment>::@class::C
       constructors
         synthetic new
@@ -2008,6 +2018,8 @@
       classes
         class C @32
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            T @34
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::C::@constructor::new
@@ -2016,6 +2028,9 @@
     class C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+          bound: C<T>
       firstFragment: <testLibraryFragment>::@class::C
       constructors
         synthetic new
@@ -2129,6 +2144,8 @@
       classes
         class C @27
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            T @29
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::C::@constructor::new
@@ -2137,6 +2154,9 @@
     class C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+          bound: C<T>
       firstFragment: <testLibraryFragment>::@class::C
       constructors
         synthetic new
@@ -2185,6 +2205,8 @@
       classes
         class C @21
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            T @23
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::C::@constructor::new
@@ -2193,6 +2215,9 @@
     class C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+          bound: C<T>
       firstFragment: <testLibraryFragment>::@class::C
       constructors
         synthetic new
@@ -3102,6 +3127,9 @@
       classes
         class A @32
           reference: <testLibraryFragment>::@class::A
+          typeParameters
+            T @34
+            U @37
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::A::@constructor::new
@@ -3116,6 +3144,9 @@
     class A
       reference: <testLibraryFragment>::@class::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+        U
       firstFragment: <testLibraryFragment>::@class::A
       constructors
         synthetic new
@@ -3197,6 +3228,8 @@
       classes
         class A @28
           reference: <testLibraryFragment>::@class::A
+          typeParameters
+            T @30
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::A::@constructor::new
@@ -3223,6 +3256,8 @@
     class A
       reference: <testLibraryFragment>::@class::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::A
       constructors
         synthetic new
@@ -3324,6 +3359,8 @@
       classes
         class A @28
           reference: <testLibraryFragment>::@class::A
+          typeParameters
+            T @30
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::A::@constructor::new
@@ -3350,6 +3387,8 @@
     class A
       reference: <testLibraryFragment>::@class::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::A
       constructors
         synthetic new
@@ -3547,6 +3586,8 @@
               enclosingFragment: <testLibraryFragment>::@class::B
         class C @46
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            U @48
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::C::@constructor::new
@@ -3571,6 +3612,8 @@
     class C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        U
       firstFragment: <testLibraryFragment>::@class::C
       constructors
         synthetic new
@@ -3721,6 +3764,8 @@
       classes
         class A @26
           reference: <testLibraryFragment>::@class::A
+          typeParameters
+            T @28
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::A::@constructor::new
@@ -3735,6 +3780,8 @@
     class A
       reference: <testLibraryFragment>::@class::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::A
       constructors
         synthetic new
@@ -3812,6 +3859,8 @@
       classes
         class A @27
           reference: <testLibraryFragment>::@class::A
+          typeParameters
+            T @29
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::A::@constructor::new
@@ -3831,6 +3880,8 @@
     class A
       reference: <testLibraryFragment>::@class::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::A
       constructors
         synthetic new
@@ -3923,6 +3974,8 @@
       classes
         class A @27
           reference: <testLibraryFragment>::@class::A
+          typeParameters
+            T @29
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::A::@constructor::new
@@ -3942,6 +3995,8 @@
     class A
       reference: <testLibraryFragment>::@class::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::A
       constructors
         synthetic new
@@ -4068,6 +4123,8 @@
       classes
         class A @26
           reference: <testLibraryFragment>::@class::A
+          typeParameters
+            T @28
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::A::@constructor::new
@@ -4085,6 +4142,8 @@
     class A
       reference: <testLibraryFragment>::@class::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::A
       constructors
         synthetic new
@@ -4157,6 +4216,8 @@
       classes
         class A @24
           reference: <testLibraryFragment>::@class::A
+          typeParameters
+            T @26
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::A::@constructor::new
@@ -4174,6 +4235,8 @@
     class A
       reference: <testLibraryFragment>::@class::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::A
       constructors
         synthetic new
@@ -4286,6 +4349,8 @@
       classes
         class A @27
           reference: <testLibraryFragment>::@class::A
+          typeParameters
+            T @29
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::A::@constructor::new
@@ -4300,6 +4365,8 @@
     class A
       reference: <testLibraryFragment>::@class::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::A
       constructors
         synthetic new
@@ -4364,6 +4431,8 @@
       classes
         class A @27
           reference: <testLibraryFragment>::@class::A
+          typeParameters
+            T @29
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::A::@constructor::new
@@ -4381,6 +4450,8 @@
     class A
       reference: <testLibraryFragment>::@class::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::A
       constructors
         synthetic new
diff --git a/pkg/analyzer/test/src/summary/elements/type_inference_test.dart b/pkg/analyzer/test/src/summary/elements/type_inference_test.dart
index 6d71334..01d2370 100644
--- a/pkg/analyzer/test/src/summary/elements/type_inference_test.dart
+++ b/pkg/analyzer/test/src/summary/elements/type_inference_test.dart
@@ -185,6 +185,8 @@
       classes
         class C @6
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            T @8
           fields
             f @21
               reference: <testLibraryFragment>::@class::C::@field::f
@@ -202,6 +204,8 @@
     class C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::C
       fields
         final f
@@ -326,12 +330,17 @@
       classes
         class C @43
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            V @45
           constructors
             const new @58
               reference: <testLibraryFragment>::@class::C::@constructor::new
               enclosingFragment: <testLibraryFragment>::@class::C
         class D @77
           reference: <testLibraryFragment>::@class::D
+          typeParameters
+            T @79
+            U @81
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::D::@constructor::new
@@ -349,6 +358,8 @@
     class C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        V
       firstFragment: <testLibraryFragment>::@class::C
       constructors
         const new
@@ -364,6 +375,9 @@
     class D
       reference: <testLibraryFragment>::@class::D
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+        U
       firstFragment: <testLibraryFragment>::@class::D
       constructors
         synthetic new
@@ -482,6 +496,8 @@
               enclosingFragment: <testLibraryFragment>::@class::C
         class D @66
           reference: <testLibraryFragment>::@class::D
+          typeParameters
+            T @68
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::D::@constructor::new
@@ -512,6 +528,8 @@
     class D
       reference: <testLibraryFragment>::@class::D
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::D
       constructors
         synthetic new
@@ -621,6 +639,8 @@
               superConstructor: <testLibraryFragment>::@class::A::@constructor::new
         class S @40
           reference: <testLibraryFragment>::@class::S
+          typeParameters
+            T @42
           constructors
             new @59
               reference: <testLibraryFragment>::@class::S::@constructor::new
@@ -663,6 +683,9 @@
     class S
       reference: <testLibraryFragment>::@class::S
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+          bound: A
       firstFragment: <testLibraryFragment>::@class::S
       constructors
         new
@@ -1492,6 +1515,9 @@
       classes
         class C @6
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            U @8
+            V @11
           fields
             x @24
               reference: <testLibraryFragment>::@class::C::@field::x
@@ -1509,6 +1535,9 @@
     class C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        U
+        V
       firstFragment: <testLibraryFragment>::@class::C
       fields
         final x
@@ -1575,6 +1604,9 @@
       classes
         class C @6
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            U @8
+            V @11
           fields
             x @-1
               reference: <testLibraryFragment>::@class::C::@field::x
@@ -1592,6 +1624,9 @@
     class C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        U
+        V
       firstFragment: <testLibraryFragment>::@class::C
       fields
         synthetic x
@@ -1659,6 +1694,8 @@
       classes
         class C @6
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            T @8
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::C::@constructor::new
@@ -1667,10 +1704,15 @@
             f @15
               reference: <testLibraryFragment>::@class::C::@method::f
               enclosingFragment: <testLibraryFragment>::@class::C
+              typeParameters
+                U @17
+                V @20
   classes
     class C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::C
       constructors
         synthetic new
@@ -1679,6 +1721,9 @@
       methods
         f
           reference: <none>
+          typeParameters
+            U
+            V
           firstFragment: <testLibraryFragment>::@class::C::@method::f
 ''');
   }
@@ -1734,6 +1779,9 @@
       classes
         class C @6
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            U @8
+            V @11
           fields
             x @-1
               reference: <testLibraryFragment>::@class::C::@field::x
@@ -1753,6 +1801,9 @@
     class C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        U
+        V
       firstFragment: <testLibraryFragment>::@class::C
       fields
         synthetic x
@@ -1901,6 +1952,8 @@
       classes
         class C @6
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            P @8
           constructors
             factory new @35
               reference: <testLibraryFragment>::@class::C::@constructor::new
@@ -1930,6 +1983,9 @@
     class C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        P
+          bound: num
       firstFragment: <testLibraryFragment>::@class::C
       constructors
         factory new
@@ -3270,6 +3326,8 @@
       classes
         class C @6
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            T @8
           fields
             v @37
               reference: <testLibraryFragment>::@class::C::@field::v
@@ -3295,6 +3353,9 @@
                 _v @-1
         class D @57
           reference: <testLibraryFragment>::@class::D
+          typeParameters
+            U @59
+            V @62
           fields
             v @-1
               reference: <testLibraryFragment>::@class::D::@field::v
@@ -3312,6 +3373,8 @@
     class C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::C
       supertype: D<int, T>
       fields
@@ -3344,6 +3407,9 @@
     abstract class D
       reference: <testLibraryFragment>::@class::D
       enclosingElement2: <testLibrary>
+      typeParameters
+        U
+        V
       firstFragment: <testLibraryFragment>::@class::D
       fields
         synthetic v
@@ -3537,6 +3603,9 @@
       classes
         class C @6
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            T @8
+            U @11
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::C::@constructor::new
@@ -3553,6 +3622,9 @@
                 g @50
         class D @73
           reference: <testLibraryFragment>::@class::D
+          typeParameters
+            V @75
+            W @78
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::D::@constructor::new
@@ -3568,6 +3640,9 @@
     class C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+        U
       firstFragment: <testLibraryFragment>::@class::C
       supertype: D<U, int>
       constructors
@@ -3589,6 +3664,9 @@
     abstract class D
       reference: <testLibraryFragment>::@class::D
       enclosingElement2: <testLibrary>
+      typeParameters
+        V
+        W
       firstFragment: <testLibraryFragment>::@class::D
       constructors
         synthetic new
@@ -5883,6 +5961,8 @@
       classes
         class A @6
           reference: <testLibraryFragment>::@class::A
+          typeParameters
+            T @8
           fields
             value @17
               reference: <testLibraryFragment>::@class::A::@field::value
@@ -5929,6 +6009,8 @@
     class A
       reference: <testLibraryFragment>::@class::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::A
       fields
         value
@@ -6118,6 +6200,8 @@
       classes
         class A @6
           reference: <testLibraryFragment>::@class::A
+          typeParameters
+            T @8
           fields
             value @17
               reference: <testLibraryFragment>::@class::A::@field::value
@@ -6140,6 +6224,8 @@
                 _value @-1
         class B @51
           reference: <testLibraryFragment>::@class::B
+          typeParameters
+            T @53
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::B::@constructor::new
@@ -6188,6 +6274,8 @@
     class A
       reference: <testLibraryFragment>::@class::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::A
       fields
         value
@@ -6222,6 +6310,8 @@
     class alias B
       reference: <testLibraryFragment>::@class::B
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::B
       supertype: A<T>
       constructors
@@ -6328,6 +6418,8 @@
       classes
         class A @6
           reference: <testLibraryFragment>::@class::A
+          typeParameters
+            T @8
           fields
             f @19
               reference: <testLibraryFragment>::@class::A::@field::f
@@ -6352,6 +6444,8 @@
     class A
       reference: <testLibraryFragment>::@class::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::A
       fields
         f
@@ -7407,6 +7501,8 @@
               superConstructor: <testLibraryFragment>::@class::A::@constructor::new
         class C @40
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            T @42
           fields
             f @67
               reference: <testLibraryFragment>::@class::C::@field::f
@@ -7458,6 +7554,9 @@
     class C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+          bound: A
       firstFragment: <testLibraryFragment>::@class::C
       fields
         final f
@@ -7712,6 +7811,8 @@
       classes
         class C @6
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            T @8
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::C::@constructor::new
@@ -7749,6 +7850,9 @@
     class C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+          bound: dynamic
       firstFragment: <testLibraryFragment>::@class::C
       constructors
         synthetic new
@@ -7960,6 +8064,8 @@
       classes
         class C @6
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            T @8
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::C::@constructor::new
@@ -7974,6 +8080,8 @@
     class C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::C
       constructors
         synthetic new
@@ -8185,6 +8293,8 @@
       classes
         class C @6
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            T @8
           fields
             t @17
               reference: <testLibraryFragment>::@class::C::@field::t
@@ -8209,6 +8319,8 @@
     class C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::C
       fields
         t
@@ -8288,6 +8400,8 @@
       classes
         class C @6
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            T @8
           fields
             t @18
               reference: <testLibraryFragment>::@class::C::@field::t
@@ -8312,6 +8426,8 @@
     class C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::C
       fields
         t
@@ -10112,6 +10228,9 @@
       classes
         class C @6
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            T @8
+            U @11
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::C::@constructor::new
@@ -10136,6 +10255,9 @@
     class C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+        U
       firstFragment: <testLibraryFragment>::@class::C
       constructors
         synthetic new
@@ -10213,6 +10335,9 @@
       classes
         class C @6
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            T @8
+            U @11
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::C::@constructor::new
@@ -10237,6 +10362,9 @@
     class C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+        U
       firstFragment: <testLibraryFragment>::@class::C
       constructors
         synthetic new
diff --git a/pkg/analyzer/test/src/summary/elements/types_test.dart b/pkg/analyzer/test/src/summary/elements/types_test.dart
index 17ce2eb..fe1195c 100644
--- a/pkg/analyzer/test/src/summary/elements/types_test.dart
+++ b/pkg/analyzer/test/src/summary/elements/types_test.dart
@@ -440,6 +440,9 @@
       classes
         class C @6
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            T @8
+            U @11
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::C::@constructor::new
@@ -448,6 +451,9 @@
             m @30
               reference: <testLibraryFragment>::@class::C::@method::m
               enclosingFragment: <testLibraryFragment>::@class::C
+              typeParameters
+                V @32
+                W @35
               parameters
                 v @40
                 w @45
@@ -455,6 +461,9 @@
     class C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+        U
       firstFragment: <testLibraryFragment>::@class::C
       constructors
         synthetic new
@@ -463,6 +472,9 @@
       methods
         static m
           reference: <none>
+          typeParameters
+            V
+            W
           parameters
             requiredPositional v
               reference: <none>
@@ -1410,6 +1422,9 @@
       classes
         class C @6
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            S @8
+            T @23
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::C::@constructor::new
@@ -1434,6 +1449,11 @@
     class C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        S
+          bound: num
+        T
+          bound: C<S, T>
       firstFragment: <testLibraryFragment>::@class::C
       constructors
         synthetic new
@@ -1558,6 +1578,8 @@
       classes
         class C @6
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            T @8
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::C::@constructor::new
@@ -1617,6 +1639,9 @@
     class C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+          bound: C<T>
       firstFragment: <testLibraryFragment>::@class::C
       constructors
         synthetic new
@@ -1748,6 +1773,9 @@
       classes
         class C @6
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            T @8
+            U @27
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::C::@constructor::new
@@ -1772,6 +1800,11 @@
     class C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+          bound: C<T, U>
+        U
+          bound: num
       firstFragment: <testLibraryFragment>::@class::C
       constructors
         synthetic new
@@ -2047,12 +2080,17 @@
       classes
         class A @6
           reference: <testLibraryFragment>::@class::A
+          typeParameters
+            T @8
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::A::@constructor::new
               enclosingFragment: <testLibraryFragment>::@class::A
         class B @20
           reference: <testLibraryFragment>::@class::B
+          typeParameters
+            T @22
+            U @48
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::B::@constructor::new
@@ -2077,6 +2115,8 @@
     class A
       reference: <testLibraryFragment>::@class::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::A
       constructors
         synthetic new
@@ -2085,6 +2125,11 @@
     class B
       reference: <testLibraryFragment>::@class::B
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+          bound: int Function()
+        U
+          bound: A<T>
       firstFragment: <testLibraryFragment>::@class::B
       constructors
         synthetic new
@@ -2276,6 +2321,8 @@
       classes
         class A @6
           reference: <testLibraryFragment>::@class::A
+          typeParameters
+            R @8
           fields
             values @31
               reference: <testLibraryFragment>::@class::A::@field::values
@@ -2291,6 +2338,8 @@
               enclosingFragment: <testLibraryFragment>::@class::A
         class B @55
           reference: <testLibraryFragment>::@class::B
+          typeParameters
+            T @57
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::B::@constructor::new
@@ -2299,6 +2348,9 @@
     class A
       reference: <testLibraryFragment>::@class::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        R
+          bound: B<num>
       firstFragment: <testLibraryFragment>::@class::A
       fields
         final values
@@ -2319,6 +2371,9 @@
     class B
       reference: <testLibraryFragment>::@class::B
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+          bound: num
       firstFragment: <testLibraryFragment>::@class::B
       constructors
         synthetic new
@@ -2376,6 +2431,8 @@
       classes
         class C @6
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            T @8
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::C::@constructor::new
@@ -2400,6 +2457,9 @@
     class C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+          bound: num
       firstFragment: <testLibraryFragment>::@class::C
       constructors
         synthetic new
@@ -3075,6 +3135,9 @@
       classes
         class C @6
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            T @8
+            U @11
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::C::@constructor::new
@@ -3083,10 +3146,16 @@
             g @23
               reference: <testLibraryFragment>::@class::C::@method::g
               enclosingFragment: <testLibraryFragment>::@class::C
+              typeParameters
+                V @25
+                W @28
   classes
     class C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+        U
       firstFragment: <testLibraryFragment>::@class::C
       constructors
         synthetic new
@@ -3095,6 +3164,9 @@
       methods
         g
           reference: <none>
+          typeParameters
+            V
+            W
           firstFragment: <testLibraryFragment>::@class::C::@method::g
 ''');
   }
@@ -3152,6 +3224,9 @@
       classes
         class C @6
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            T @8
+            U @11
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::C::@constructor::new
@@ -3160,10 +3235,16 @@
             g @23
               reference: <testLibraryFragment>::@class::C::@method::g
               enclosingFragment: <testLibraryFragment>::@class::C
+              typeParameters
+                V @25
+                W @28
   classes
     class C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+        U
       firstFragment: <testLibraryFragment>::@class::C
       constructors
         synthetic new
@@ -3172,6 +3253,9 @@
       methods
         g
           reference: <none>
+          typeParameters
+            V
+            W
           firstFragment: <testLibraryFragment>::@class::C::@method::g
 ''');
   }
@@ -3426,6 +3510,9 @@
       classes
         class C @6
           reference: <testLibraryFragment>::@class::C
+          typeParameters
+            T @8
+            U @11
           fields
             v @22
               reference: <testLibraryFragment>::@class::C::@field::v
@@ -3450,6 +3537,9 @@
     class C
       reference: <testLibraryFragment>::@class::C
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+        U
       firstFragment: <testLibraryFragment>::@class::C
       fields
         v
diff --git a/pkg/analyzer/test/src/summary/macro_test.dart b/pkg/analyzer/test/src/summary/macro_test.dart
index 677e752..a97713b 100644
--- a/pkg/analyzer/test/src/summary/macro_test.dart
+++ b/pkg/analyzer/test/src/summary/macro_test.dart
@@ -7653,6 +7653,8 @@
             foo @97
               reference: <testLibraryFragment>::@class::A::@method::foo
               enclosingFragment: <testLibraryFragment>::@class::A
+              typeParameters
+                T @101
   classes
     class A
       reference: <testLibraryFragment>::@class::A
@@ -7661,6 +7663,8 @@
       methods
         foo
           reference: <none>
+          typeParameters
+            T
           firstFragment: <testLibraryFragment>::@class::A::@method::foo
 ''');
   }
@@ -7726,10 +7730,18 @@
       classes
         class A @80
           reference: <testLibraryFragment>::@class::A
+          typeParameters
+            T @82
+            U @85
+            V @88
   classes
     class A
       reference: <testLibraryFragment>::@class::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
+        U
+        V
       firstFragment: <testLibraryFragment>::@class::A
 ''');
   }
@@ -8168,10 +8180,14 @@
       mixins
         mixin A @80
           reference: <testLibraryFragment>::@mixin::A
+          typeParameters
+            T @82
   mixins
     mixin A
       reference: <testLibraryFragment>::@mixin::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@mixin::A
       superclassConstraints
         Object
diff --git a/pkg/analyzer/test/src/summary/top_level_inference_test.dart b/pkg/analyzer/test/src/summary/top_level_inference_test.dart
index 3c82806..50f644e 100644
--- a/pkg/analyzer/test/src/summary/top_level_inference_test.dart
+++ b/pkg/analyzer/test/src/summary/top_level_inference_test.dart
@@ -13616,6 +13616,8 @@
       classes
         class A @15
           reference: <testLibraryFragment>::@class::A
+          typeParameters
+            E @17
           fields
             x @26
               reference: <testLibraryFragment>::@class::A::@field::x
@@ -13664,6 +13666,8 @@
                 _z @-1
         class B @51
           reference: <testLibraryFragment>::@class::B
+          typeParameters
+            T @53
           fields
             x @80
               reference: <testLibraryFragment>::@class::B::@field::x
@@ -13704,6 +13708,8 @@
     abstract class A
       reference: <testLibraryFragment>::@class::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        E
       firstFragment: <testLibraryFragment>::@class::A
       fields
         x
@@ -13772,6 +13778,8 @@
     class B
       reference: <testLibraryFragment>::@class::B
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::B
       fields
         x
@@ -14573,6 +14581,8 @@
       classes
         class A @15
           reference: <testLibraryFragment>::@class::A
+          typeParameters
+            E @17
           fields
             x @-1
               reference: <testLibraryFragment>::@class::A::@field::x
@@ -14602,6 +14612,8 @@
               enclosingFragment: <testLibraryFragment>::@class::A
         class B @63
           reference: <testLibraryFragment>::@class::B
+          typeParameters
+            T @65
           fields
             x @92
               reference: <testLibraryFragment>::@class::B::@field::x
@@ -14642,6 +14654,8 @@
     abstract class A
       reference: <testLibraryFragment>::@class::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        E
       firstFragment: <testLibraryFragment>::@class::A
       fields
         synthetic x
@@ -14682,6 +14696,8 @@
     class B
       reference: <testLibraryFragment>::@class::B
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::B
       fields
         x
@@ -15205,6 +15221,8 @@
       classes
         class A @15
           reference: <testLibraryFragment>::@class::A
+          typeParameters
+            T @17
           fields
             x @-1
               reference: <testLibraryFragment>::@class::A::@field::x
@@ -15220,6 +15238,8 @@
               enclosingFragment: <testLibraryFragment>::@class::A
         class B @50
           reference: <testLibraryFragment>::@class::B
+          typeParameters
+            T @52
           fields
             x @-1
               reference: <testLibraryFragment>::@class::B::@field::x
@@ -15252,6 +15272,8 @@
     abstract class A
       reference: <testLibraryFragment>::@class::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::A
       fields
         synthetic x
@@ -15272,6 +15294,8 @@
     abstract class B
       reference: <testLibraryFragment>::@class::B
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::B
       fields
         synthetic x
@@ -17662,6 +17686,8 @@
       classes
         class A @23
           reference: <testLibraryFragment>::@class::A
+          typeParameters
+            T @25
           fields
             x @-1
               reference: <testLibraryFragment>::@class::A::@field::x
@@ -17711,6 +17737,8 @@
     class A
       reference: <testLibraryFragment>::@class::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::A
       fields
         synthetic x
@@ -19012,6 +19040,8 @@
       classes
         class A @6
           reference: <testLibraryFragment>::@class::A
+          typeParameters
+            T @8
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::A::@constructor::new
@@ -19024,6 +19054,8 @@
                 a @24
         class B @38
           reference: <testLibraryFragment>::@class::B
+          typeParameters
+            E @40
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::B::@constructor::new
@@ -19053,6 +19085,8 @@
     class A
       reference: <testLibraryFragment>::@class::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::A
       constructors
         synthetic new
@@ -19069,6 +19103,8 @@
     class B
       reference: <testLibraryFragment>::@class::B
       enclosingElement2: <testLibrary>
+      typeParameters
+        E
       firstFragment: <testLibraryFragment>::@class::B
       constructors
         synthetic new
@@ -19191,6 +19227,9 @@
       classes
         class A @6
           reference: <testLibraryFragment>::@class::A
+          typeParameters
+            K @8
+            V @11
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::A::@constructor::new
@@ -19203,6 +19242,8 @@
                 a @24
         class B @38
           reference: <testLibraryFragment>::@class::B
+          typeParameters
+            T @40
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::B::@constructor::new
@@ -19232,6 +19273,9 @@
     class A
       reference: <testLibraryFragment>::@class::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        K
+        V
       firstFragment: <testLibraryFragment>::@class::A
       constructors
         synthetic new
@@ -19248,6 +19292,8 @@
     class B
       reference: <testLibraryFragment>::@class::B
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::B
       constructors
         synthetic new
@@ -19999,6 +20045,9 @@
       classes
         class A @6
           reference: <testLibraryFragment>::@class::A
+          typeParameters
+            K @8
+            V @11
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::A::@constructor::new
@@ -20011,6 +20060,8 @@
                 a @24
         class B @38
           reference: <testLibraryFragment>::@class::B
+          typeParameters
+            T @40
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::B::@constructor::new
@@ -20037,6 +20088,9 @@
     class A
       reference: <testLibraryFragment>::@class::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        K
+        V
       firstFragment: <testLibraryFragment>::@class::A
       constructors
         synthetic new
@@ -20053,6 +20107,8 @@
     class B
       reference: <testLibraryFragment>::@class::B
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::B
       supertype: A<int, T>
       constructors
@@ -20652,6 +20708,9 @@
       classes
         class A @6
           reference: <testLibraryFragment>::@class::A
+          typeParameters
+            K @8
+            V @11
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::A::@constructor::new
@@ -20683,6 +20742,9 @@
     class A
       reference: <testLibraryFragment>::@class::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        K
+        V
       firstFragment: <testLibraryFragment>::@class::A
       constructors
         synthetic new
@@ -21184,6 +21246,9 @@
       classes
         class A @6
           reference: <testLibraryFragment>::@class::A
+          typeParameters
+            K @8
+            V @11
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::A::@constructor::new
@@ -21196,6 +21261,8 @@
                 a @24
         class B @38
           reference: <testLibraryFragment>::@class::B
+          typeParameters
+            T @40
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::B::@constructor::new
@@ -21222,6 +21289,9 @@
     class A
       reference: <testLibraryFragment>::@class::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        K
+        V
       firstFragment: <testLibraryFragment>::@class::A
       constructors
         synthetic new
@@ -21238,6 +21308,8 @@
     class B
       reference: <testLibraryFragment>::@class::B
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::B
       supertype: A<int, T>
       constructors
@@ -21328,6 +21400,9 @@
       classes
         class A @15
           reference: <testLibraryFragment>::@class::A
+          typeParameters
+            K @17
+            V @20
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::A::@constructor::new
@@ -21354,6 +21429,9 @@
     abstract class A
       reference: <testLibraryFragment>::@class::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        K
+        V
       firstFragment: <testLibraryFragment>::@class::A
       constructors
         synthetic new
@@ -21580,6 +21658,9 @@
       classes
         class A @15
           reference: <testLibraryFragment>::@class::A
+          typeParameters
+            K @17
+            V @20
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::A::@constructor::new
@@ -21592,6 +21673,9 @@
                 a @33
         class B @54
           reference: <testLibraryFragment>::@class::B
+          typeParameters
+            T1 @56
+            T2 @60
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::B::@constructor::new
@@ -21615,6 +21699,9 @@
     abstract class A
       reference: <testLibraryFragment>::@class::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        K
+        V
       firstFragment: <testLibraryFragment>::@class::A
       constructors
         synthetic new
@@ -21631,6 +21718,9 @@
     abstract class B
       reference: <testLibraryFragment>::@class::B
       enclosingElement2: <testLibrary>
+      typeParameters
+        T1
+        T2
       firstFragment: <testLibraryFragment>::@class::B
       supertype: A<T2, T1>
       constructors
@@ -21976,6 +22066,9 @@
       classes
         class A @6
           reference: <testLibraryFragment>::@class::A
+          typeParameters
+            K @8
+            V @11
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::A::@constructor::new
@@ -21988,6 +22081,8 @@
                 a @24
         class B @38
           reference: <testLibraryFragment>::@class::B
+          typeParameters
+            T @40
           constructors
             synthetic new @-1
               reference: <testLibraryFragment>::@class::B::@constructor::new
@@ -22017,6 +22112,9 @@
     class A
       reference: <testLibraryFragment>::@class::A
       enclosingElement2: <testLibrary>
+      typeParameters
+        K
+        V
       firstFragment: <testLibraryFragment>::@class::A
       constructors
         synthetic new
@@ -22033,6 +22131,8 @@
     class B
       reference: <testLibraryFragment>::@class::B
       enclosingElement2: <testLibrary>
+      typeParameters
+        T
       firstFragment: <testLibraryFragment>::@class::B
       constructors
         synthetic new