diff --git a/pkg/analyzer/lib/src/dart/analysis/driver.dart b/pkg/analyzer/lib/src/dart/analysis/driver.dart
index 71c167c..2865d23 100644
--- a/pkg/analyzer/lib/src/dart/analysis/driver.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/driver.dart
@@ -93,7 +93,7 @@
   /**
    * The version of data format, should be incremented on every format change.
    */
-  static const int DATA_VERSION = 82;
+  static const int DATA_VERSION = 83;
 
   /**
    * The number of exception contexts allowed to write. Once this field is
diff --git a/pkg/analyzer/lib/src/summary/format.dart b/pkg/analyzer/lib/src/summary/format.dart
index 918e06e..5c6d947 100644
--- a/pkg/analyzer/lib/src/summary/format.dart
+++ b/pkg/analyzer/lib/src/summary/format.dart
@@ -16038,8 +16038,6 @@
   int _functionTypedef;
   List<LinkedNodeTypeBuilder> _functionTypedefTypeArguments;
   List<LinkedNodeTypeTypeParameterBuilder> _functionTypeParameters;
-  int _genericTypeAliasReference;
-  List<LinkedNodeTypeBuilder> _genericTypeAliasTypeArguments;
   int _interfaceClass;
   List<LinkedNodeTypeBuilder> _interfaceTypeArguments;
   idl.LinkedNodeTypeKind _kind;
@@ -16089,22 +16087,6 @@
   }
 
   @override
-  int get genericTypeAliasReference => _genericTypeAliasReference ??= 0;
-
-  set genericTypeAliasReference(int value) {
-    assert(value == null || value >= 0);
-    this._genericTypeAliasReference = value;
-  }
-
-  @override
-  List<LinkedNodeTypeBuilder> get genericTypeAliasTypeArguments =>
-      _genericTypeAliasTypeArguments ??= <LinkedNodeTypeBuilder>[];
-
-  set genericTypeAliasTypeArguments(List<LinkedNodeTypeBuilder> value) {
-    this._genericTypeAliasTypeArguments = value;
-  }
-
-  @override
   int get interfaceClass => _interfaceClass ??= 0;
 
   /// Reference to a [LinkedNodeReferences].
@@ -16158,8 +16140,6 @@
       int functionTypedef,
       List<LinkedNodeTypeBuilder> functionTypedefTypeArguments,
       List<LinkedNodeTypeTypeParameterBuilder> functionTypeParameters,
-      int genericTypeAliasReference,
-      List<LinkedNodeTypeBuilder> genericTypeAliasTypeArguments,
       int interfaceClass,
       List<LinkedNodeTypeBuilder> interfaceTypeArguments,
       idl.LinkedNodeTypeKind kind,
@@ -16171,8 +16151,6 @@
         _functionTypedef = functionTypedef,
         _functionTypedefTypeArguments = functionTypedefTypeArguments,
         _functionTypeParameters = functionTypeParameters,
-        _genericTypeAliasReference = genericTypeAliasReference,
-        _genericTypeAliasTypeArguments = genericTypeAliasTypeArguments,
         _interfaceClass = interfaceClass,
         _interfaceTypeArguments = interfaceTypeArguments,
         _kind = kind,
@@ -16186,7 +16164,6 @@
     _functionReturnType?.flushInformative();
     _functionTypedefTypeArguments?.forEach((b) => b.flushInformative());
     _functionTypeParameters?.forEach((b) => b.flushInformative());
-    _genericTypeAliasTypeArguments?.forEach((b) => b.flushInformative());
     _interfaceTypeArguments?.forEach((b) => b.flushInformative());
   }
 
@@ -16222,15 +16199,6 @@
     signature.addInt(this._kind == null ? 0 : this._kind.index);
     signature.addInt(this._typeParameterElement ?? 0);
     signature.addInt(this._typeParameterId ?? 0);
-    signature.addInt(this._genericTypeAliasReference ?? 0);
-    if (this._genericTypeAliasTypeArguments == null) {
-      signature.addInt(0);
-    } else {
-      signature.addInt(this._genericTypeAliasTypeArguments.length);
-      for (var x in this._genericTypeAliasTypeArguments) {
-        x?.collectApiSignature(signature);
-      }
-    }
     signature.addInt(
         this._nullabilitySuffix == null ? 0 : this._nullabilitySuffix.index);
     signature.addInt(this._functionTypedef ?? 0);
@@ -16249,7 +16217,6 @@
     fb.Offset offset_functionReturnType;
     fb.Offset offset_functionTypedefTypeArguments;
     fb.Offset offset_functionTypeParameters;
-    fb.Offset offset_genericTypeAliasTypeArguments;
     fb.Offset offset_interfaceTypeArguments;
     if (!(_functionFormalParameters == null ||
         _functionFormalParameters.isEmpty)) {
@@ -16270,13 +16237,6 @@
       offset_functionTypeParameters = fbBuilder.writeList(
           _functionTypeParameters.map((b) => b.finish(fbBuilder)).toList());
     }
-    if (!(_genericTypeAliasTypeArguments == null ||
-        _genericTypeAliasTypeArguments.isEmpty)) {
-      offset_genericTypeAliasTypeArguments = fbBuilder.writeList(
-          _genericTypeAliasTypeArguments
-              .map((b) => b.finish(fbBuilder))
-              .toList());
-    }
     if (!(_interfaceTypeArguments == null || _interfaceTypeArguments.isEmpty)) {
       offset_interfaceTypeArguments = fbBuilder.writeList(
           _interfaceTypeArguments.map((b) => b.finish(fbBuilder)).toList());
@@ -16289,20 +16249,14 @@
       fbBuilder.addOffset(1, offset_functionReturnType);
     }
     if (_functionTypedef != null && _functionTypedef != 0) {
-      fbBuilder.addUint32(11, _functionTypedef);
+      fbBuilder.addUint32(9, _functionTypedef);
     }
     if (offset_functionTypedefTypeArguments != null) {
-      fbBuilder.addOffset(12, offset_functionTypedefTypeArguments);
+      fbBuilder.addOffset(10, offset_functionTypedefTypeArguments);
     }
     if (offset_functionTypeParameters != null) {
       fbBuilder.addOffset(2, offset_functionTypeParameters);
     }
-    if (_genericTypeAliasReference != null && _genericTypeAliasReference != 0) {
-      fbBuilder.addUint32(8, _genericTypeAliasReference);
-    }
-    if (offset_genericTypeAliasTypeArguments != null) {
-      fbBuilder.addOffset(9, offset_genericTypeAliasTypeArguments);
-    }
     if (_interfaceClass != null && _interfaceClass != 0) {
       fbBuilder.addUint32(3, _interfaceClass);
     }
@@ -16314,7 +16268,7 @@
     }
     if (_nullabilitySuffix != null &&
         _nullabilitySuffix != idl.EntityRefNullabilitySuffix.starOrIrrelevant) {
-      fbBuilder.addUint8(10, _nullabilitySuffix.index);
+      fbBuilder.addUint8(8, _nullabilitySuffix.index);
     }
     if (_typeParameterElement != null && _typeParameterElement != 0) {
       fbBuilder.addUint32(6, _typeParameterElement);
@@ -16347,8 +16301,6 @@
   int _functionTypedef;
   List<idl.LinkedNodeType> _functionTypedefTypeArguments;
   List<idl.LinkedNodeTypeTypeParameter> _functionTypeParameters;
-  int _genericTypeAliasReference;
-  List<idl.LinkedNodeType> _genericTypeAliasTypeArguments;
   int _interfaceClass;
   List<idl.LinkedNodeType> _interfaceTypeArguments;
   idl.LinkedNodeTypeKind _kind;
@@ -16376,7 +16328,7 @@
   @override
   int get functionTypedef {
     _functionTypedef ??=
-        const fb.Uint32Reader().vTableGet(_bc, _bcOffset, 11, 0);
+        const fb.Uint32Reader().vTableGet(_bc, _bcOffset, 9, 0);
     return _functionTypedef;
   }
 
@@ -16384,7 +16336,7 @@
   List<idl.LinkedNodeType> get functionTypedefTypeArguments {
     _functionTypedefTypeArguments ??=
         const fb.ListReader<idl.LinkedNodeType>(const _LinkedNodeTypeReader())
-            .vTableGet(_bc, _bcOffset, 12, const <idl.LinkedNodeType>[]);
+            .vTableGet(_bc, _bcOffset, 10, const <idl.LinkedNodeType>[]);
     return _functionTypedefTypeArguments;
   }
 
@@ -16399,21 +16351,6 @@
   }
 
   @override
-  int get genericTypeAliasReference {
-    _genericTypeAliasReference ??=
-        const fb.Uint32Reader().vTableGet(_bc, _bcOffset, 8, 0);
-    return _genericTypeAliasReference;
-  }
-
-  @override
-  List<idl.LinkedNodeType> get genericTypeAliasTypeArguments {
-    _genericTypeAliasTypeArguments ??=
-        const fb.ListReader<idl.LinkedNodeType>(const _LinkedNodeTypeReader())
-            .vTableGet(_bc, _bcOffset, 9, const <idl.LinkedNodeType>[]);
-    return _genericTypeAliasTypeArguments;
-  }
-
-  @override
   int get interfaceClass {
     _interfaceClass ??= const fb.Uint32Reader().vTableGet(_bc, _bcOffset, 3, 0);
     return _interfaceClass;
@@ -16437,7 +16374,7 @@
   @override
   idl.EntityRefNullabilitySuffix get nullabilitySuffix {
     _nullabilitySuffix ??= const _EntityRefNullabilitySuffixReader().vTableGet(
-        _bc, _bcOffset, 10, idl.EntityRefNullabilitySuffix.starOrIrrelevant);
+        _bc, _bcOffset, 8, idl.EntityRefNullabilitySuffix.starOrIrrelevant);
     return _nullabilitySuffix;
   }
 
@@ -16473,12 +16410,6 @@
     if (functionTypeParameters.isNotEmpty)
       _result["functionTypeParameters"] =
           functionTypeParameters.map((_value) => _value.toJson()).toList();
-    if (genericTypeAliasReference != 0)
-      _result["genericTypeAliasReference"] = genericTypeAliasReference;
-    if (genericTypeAliasTypeArguments.isNotEmpty)
-      _result["genericTypeAliasTypeArguments"] = genericTypeAliasTypeArguments
-          .map((_value) => _value.toJson())
-          .toList();
     if (interfaceClass != 0) _result["interfaceClass"] = interfaceClass;
     if (interfaceTypeArguments.isNotEmpty)
       _result["interfaceTypeArguments"] =
@@ -16500,8 +16431,6 @@
         "functionTypedef": functionTypedef,
         "functionTypedefTypeArguments": functionTypedefTypeArguments,
         "functionTypeParameters": functionTypeParameters,
-        "genericTypeAliasReference": genericTypeAliasReference,
-        "genericTypeAliasTypeArguments": genericTypeAliasTypeArguments,
         "interfaceClass": interfaceClass,
         "interfaceTypeArguments": interfaceTypeArguments,
         "kind": kind,
diff --git a/pkg/analyzer/lib/src/summary/format.fbs b/pkg/analyzer/lib/src/summary/format.fbs
index 1683748..caaf7d3 100644
--- a/pkg/analyzer/lib/src/summary/format.fbs
+++ b/pkg/analyzer/lib/src/summary/format.fbs
@@ -1997,16 +1997,12 @@
   functionReturnType:LinkedNodeType (id: 1);
 
   /// The typedef this function type is created for.
-  functionTypedef:uint (id: 11);
+  functionTypedef:uint (id: 9);
 
-  functionTypedefTypeArguments:[LinkedNodeType] (id: 12);
+  functionTypedefTypeArguments:[LinkedNodeType] (id: 10);
 
   functionTypeParameters:[LinkedNodeTypeTypeParameter] (id: 2);
 
-  genericTypeAliasReference:uint (id: 8);
-
-  genericTypeAliasTypeArguments:[LinkedNodeType] (id: 9);
-
   /// Reference to a [LinkedNodeReferences].
   interfaceClass:uint (id: 3);
 
@@ -2014,7 +2010,7 @@
 
   kind:LinkedNodeTypeKind (id: 5);
 
-  nullabilitySuffix:EntityRefNullabilitySuffix (id: 10);
+  nullabilitySuffix:EntityRefNullabilitySuffix (id: 8);
 
   typeParameterElement:uint (id: 6);
 
diff --git a/pkg/analyzer/lib/src/summary/idl.dart b/pkg/analyzer/lib/src/summary/idl.dart
index 3b7d660..1034e2b 100644
--- a/pkg/analyzer/lib/src/summary/idl.dart
+++ b/pkg/analyzer/lib/src/summary/idl.dart
@@ -1904,21 +1904,15 @@
   LinkedNodeType get functionReturnType;
 
   /// The typedef this function type is created for.
-  @Id(11)
+  @Id(9)
   int get functionTypedef;
 
-  @Id(12)
+  @Id(10)
   List<LinkedNodeType> get functionTypedefTypeArguments;
 
   @Id(2)
   List<LinkedNodeTypeTypeParameter> get functionTypeParameters;
 
-  @Id(8)
-  int get genericTypeAliasReference;
-
-  @Id(9)
-  List<LinkedNodeType> get genericTypeAliasTypeArguments;
-
   /// Reference to a [LinkedNodeReferences].
   @Id(3)
   int get interfaceClass;
@@ -1929,7 +1923,7 @@
   @Id(5)
   LinkedNodeTypeKind get kind;
 
-  @Id(10)
+  @Id(8)
   EntityRefNullabilitySuffix get nullabilitySuffix;
 
   @Id(6)
