Extract informative data from linked data.

So, that when changes to code that don't affect APIs are made, we
can use already linked bundles, and fuse it with informative data to
create elements with actual offsets and comments.

R=brianwilkerson@google.com, paulberry@google.com

Change-Id: Ia0aa8af3c734b2cff497b49363064a26d601ebf1
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/105142
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
diff --git a/pkg/analyzer/lib/src/dart/analysis/file_state.dart b/pkg/analyzer/lib/src/dart/analysis/file_state.dart
index a0e0eb6..1976c01 100644
--- a/pkg/analyzer/lib/src/dart/analysis/file_state.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/file_state.dart
@@ -29,6 +29,7 @@
 import 'package:analyzer/src/summary/name_filter.dart';
 import 'package:analyzer/src/summary/package_bundle_reader.dart';
 import 'package:analyzer/src/summary/summarize_ast.dart';
+import 'package:analyzer/src/summary2/informative_data.dart';
 import 'package:convert/convert.dart';
 import 'package:crypto/crypto.dart';
 import 'package:front_end/src/fasta/scanner/token.dart';
@@ -340,6 +341,11 @@
   UnlinkedUnit get unlinked => _unlinked;
 
   /**
+   * The [UnlinkedUnit2] of the file.
+   */
+  UnlinkedUnit2 get unlinked2 => _unlinked2;
+
+  /**
    * Return the [uri] string.
    */
   String get uriStr => uri.toString();
@@ -776,6 +782,7 @@
         hasPartOfDirective = true;
       }
     }
+    var informativeData = createInformativeData(unit);
     return UnlinkedUnit2Builder(
       apiSignature: contentSignature,
       exports: exports,
@@ -784,6 +791,7 @@
       hasLibraryDirective: hasLibraryDirective,
       hasPartOfDirective: hasPartOfDirective,
       lineStarts: unit.lineInfo.lineStarts,
+      informativeData: informativeData,
     );
   }
 
diff --git a/pkg/analyzer/lib/src/dart/analysis/library_context.dart b/pkg/analyzer/lib/src/dart/analysis/library_context.dart
index 8411d9f..a29ea93 100644
--- a/pkg/analyzer/lib/src/dart/analysis/library_context.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/library_context.dart
@@ -332,6 +332,17 @@
       );
       counterLoadedLibraries += bundle.libraries.length;
 
+      // Set informative data.
+      for (var libraryFile in cycle.libraries) {
+        for (var unitFile in libraryFile.libraryFiles) {
+          elementFactory.setInformativeData(
+            libraryFile.uriStr,
+            unitFile.uriStr,
+            unitFile.unlinked2.informativeData,
+          );
+        }
+      }
+
       // If the first bundle, with dart:core, create the type provider.
       if (!hasDartCoreBeforeBundle && elementFactory.hasDartCore) {
         _createElementFactoryTypeProvider();
diff --git a/pkg/analyzer/lib/src/summary/format.dart b/pkg/analyzer/lib/src/summary/format.dart
index 043be91..c9f3506 100644
--- a/pkg/analyzer/lib/src/summary/format.dart
+++ b/pkg/analyzer/lib/src/summary/format.dart
@@ -4723,7 +4723,6 @@
     implements idl.LinkedNode {
   LinkedNodeTypeBuilder _variantField_24;
   List<LinkedNodeBuilder> _variantField_2;
-  LinkedNodeBuilder _variantField_11;
   List<LinkedNodeBuilder> _variantField_4;
   LinkedNodeBuilder _variantField_6;
   LinkedNodeBuilder _variantField_7;
@@ -4737,29 +4736,29 @@
   LinkedNodeBuilder _variantField_12;
   List<LinkedNodeBuilder> _variantField_5;
   LinkedNodeBuilder _variantField_13;
-  int _variantField_33;
-  int _variantField_32;
-  List<String> _variantField_35;
+  List<String> _variantField_33;
   idl.LinkedNodeCommentType _variantField_29;
   List<LinkedNodeBuilder> _variantField_3;
-  int _variantField_19;
   LinkedNodeBuilder _variantField_10;
   idl.LinkedNodeFormalParameterKind _variantField_26;
   double _variantField_21;
   LinkedNodeTypeBuilder _variantField_25;
   int _flags;
   String _variantField_1;
+  int _variantField_36;
   int _variantField_16;
   String _variantField_30;
   LinkedNodeBuilder _variantField_14;
   idl.LinkedNodeKind _kind;
-  List<String> _variantField_36;
+  List<String> _variantField_34;
   String _name;
   String _variantField_20;
   bool _variantField_31;
-  idl.UnlinkedTokenType _variantField_38;
-  TopLevelInferenceErrorBuilder _variantField_34;
+  idl.UnlinkedTokenType _variantField_35;
+  TopLevelInferenceErrorBuilder _variantField_32;
+  LinkedNodeBuilder _variantField_11;
   String _variantField_22;
+  int _variantField_19;
 
   @override
   LinkedNodeTypeBuilder get actualReturnType {
@@ -5102,57 +5101,6 @@
   }
 
   @override
-  LinkedNodeBuilder get annotatedNode_comment {
-    assert(kind == idl.LinkedNodeKind.classDeclaration ||
-        kind == idl.LinkedNodeKind.classTypeAlias ||
-        kind == idl.LinkedNodeKind.constructorDeclaration ||
-        kind == idl.LinkedNodeKind.declaredIdentifier ||
-        kind == idl.LinkedNodeKind.enumDeclaration ||
-        kind == idl.LinkedNodeKind.enumConstantDeclaration ||
-        kind == idl.LinkedNodeKind.exportDirective ||
-        kind == idl.LinkedNodeKind.fieldDeclaration ||
-        kind == idl.LinkedNodeKind.functionDeclaration ||
-        kind == idl.LinkedNodeKind.functionTypeAlias ||
-        kind == idl.LinkedNodeKind.genericTypeAlias ||
-        kind == idl.LinkedNodeKind.importDirective ||
-        kind == idl.LinkedNodeKind.libraryDirective ||
-        kind == idl.LinkedNodeKind.methodDeclaration ||
-        kind == idl.LinkedNodeKind.mixinDeclaration ||
-        kind == idl.LinkedNodeKind.partDirective ||
-        kind == idl.LinkedNodeKind.partOfDirective ||
-        kind == idl.LinkedNodeKind.topLevelVariableDeclaration ||
-        kind == idl.LinkedNodeKind.typeParameter ||
-        kind == idl.LinkedNodeKind.variableDeclaration ||
-        kind == idl.LinkedNodeKind.variableDeclarationList);
-    return _variantField_11;
-  }
-
-  set annotatedNode_comment(LinkedNodeBuilder value) {
-    assert(kind == idl.LinkedNodeKind.classDeclaration ||
-        kind == idl.LinkedNodeKind.classTypeAlias ||
-        kind == idl.LinkedNodeKind.constructorDeclaration ||
-        kind == idl.LinkedNodeKind.declaredIdentifier ||
-        kind == idl.LinkedNodeKind.enumDeclaration ||
-        kind == idl.LinkedNodeKind.enumConstantDeclaration ||
-        kind == idl.LinkedNodeKind.exportDirective ||
-        kind == idl.LinkedNodeKind.fieldDeclaration ||
-        kind == idl.LinkedNodeKind.functionDeclaration ||
-        kind == idl.LinkedNodeKind.functionTypeAlias ||
-        kind == idl.LinkedNodeKind.genericTypeAlias ||
-        kind == idl.LinkedNodeKind.importDirective ||
-        kind == idl.LinkedNodeKind.libraryDirective ||
-        kind == idl.LinkedNodeKind.methodDeclaration ||
-        kind == idl.LinkedNodeKind.mixinDeclaration ||
-        kind == idl.LinkedNodeKind.partDirective ||
-        kind == idl.LinkedNodeKind.partOfDirective ||
-        kind == idl.LinkedNodeKind.topLevelVariableDeclaration ||
-        kind == idl.LinkedNodeKind.typeParameter ||
-        kind == idl.LinkedNodeKind.variableDeclaration ||
-        kind == idl.LinkedNodeKind.variableDeclarationList);
-    _variantField_11 = value;
-  }
-
-  @override
   List<LinkedNodeBuilder> get annotatedNode_metadata {
     assert(kind == idl.LinkedNodeKind.classDeclaration ||
         kind == idl.LinkedNodeKind.classTypeAlias ||
@@ -6579,12 +6527,6 @@
   }
 
   @override
-  int get constructorDeclaration_returnTypeOffset {
-    assert(kind == idl.LinkedNodeKind.constructorDeclaration);
-    return _variantField_17 ??= 0;
-  }
-
-  @override
   int get genericFunctionType_id {
     assert(kind == idl.LinkedNodeKind.genericFunctionType);
     return _variantField_17 ??= 0;
@@ -6596,12 +6538,6 @@
     _variantField_17 = value;
   }
 
-  set constructorDeclaration_returnTypeOffset(int value) {
-    assert(kind == idl.LinkedNodeKind.constructorDeclaration);
-    assert(value == null || value >= 0);
-    _variantField_17 = value;
-  }
-
   set genericFunctionType_id(int value) {
     assert(kind == idl.LinkedNodeKind.genericFunctionType);
     assert(value == null || value >= 0);
@@ -7301,98 +7237,14 @@
   }
 
   @override
-  int get codeLength {
-    assert(kind == idl.LinkedNodeKind.classDeclaration ||
-        kind == idl.LinkedNodeKind.classTypeAlias ||
-        kind == idl.LinkedNodeKind.compilationUnit ||
-        kind == idl.LinkedNodeKind.constructorDeclaration ||
-        kind == idl.LinkedNodeKind.defaultFormalParameter ||
-        kind == idl.LinkedNodeKind.enumDeclaration ||
-        kind == idl.LinkedNodeKind.fieldFormalParameter ||
-        kind == idl.LinkedNodeKind.functionDeclaration ||
-        kind == idl.LinkedNodeKind.functionTypeAlias ||
-        kind == idl.LinkedNodeKind.functionTypedFormalParameter ||
-        kind == idl.LinkedNodeKind.genericTypeAlias ||
-        kind == idl.LinkedNodeKind.methodDeclaration ||
-        kind == idl.LinkedNodeKind.mixinDeclaration ||
-        kind == idl.LinkedNodeKind.simpleFormalParameter ||
-        kind == idl.LinkedNodeKind.typeParameter ||
-        kind == idl.LinkedNodeKind.variableDeclaration);
-    return _variantField_33 ??= 0;
-  }
-
-  set codeLength(int value) {
-    assert(kind == idl.LinkedNodeKind.classDeclaration ||
-        kind == idl.LinkedNodeKind.classTypeAlias ||
-        kind == idl.LinkedNodeKind.compilationUnit ||
-        kind == idl.LinkedNodeKind.constructorDeclaration ||
-        kind == idl.LinkedNodeKind.defaultFormalParameter ||
-        kind == idl.LinkedNodeKind.enumDeclaration ||
-        kind == idl.LinkedNodeKind.fieldFormalParameter ||
-        kind == idl.LinkedNodeKind.functionDeclaration ||
-        kind == idl.LinkedNodeKind.functionTypeAlias ||
-        kind == idl.LinkedNodeKind.functionTypedFormalParameter ||
-        kind == idl.LinkedNodeKind.genericTypeAlias ||
-        kind == idl.LinkedNodeKind.methodDeclaration ||
-        kind == idl.LinkedNodeKind.mixinDeclaration ||
-        kind == idl.LinkedNodeKind.simpleFormalParameter ||
-        kind == idl.LinkedNodeKind.typeParameter ||
-        kind == idl.LinkedNodeKind.variableDeclaration);
-    assert(value == null || value >= 0);
-    _variantField_33 = value;
-  }
-
-  @override
-  int get codeOffset {
-    assert(kind == idl.LinkedNodeKind.classDeclaration ||
-        kind == idl.LinkedNodeKind.classTypeAlias ||
-        kind == idl.LinkedNodeKind.compilationUnit ||
-        kind == idl.LinkedNodeKind.constructorDeclaration ||
-        kind == idl.LinkedNodeKind.defaultFormalParameter ||
-        kind == idl.LinkedNodeKind.enumDeclaration ||
-        kind == idl.LinkedNodeKind.fieldFormalParameter ||
-        kind == idl.LinkedNodeKind.functionDeclaration ||
-        kind == idl.LinkedNodeKind.functionTypeAlias ||
-        kind == idl.LinkedNodeKind.functionTypedFormalParameter ||
-        kind == idl.LinkedNodeKind.genericTypeAlias ||
-        kind == idl.LinkedNodeKind.methodDeclaration ||
-        kind == idl.LinkedNodeKind.mixinDeclaration ||
-        kind == idl.LinkedNodeKind.simpleFormalParameter ||
-        kind == idl.LinkedNodeKind.typeParameter ||
-        kind == idl.LinkedNodeKind.variableDeclaration);
-    return _variantField_32 ??= 0;
-  }
-
-  set codeOffset(int value) {
-    assert(kind == idl.LinkedNodeKind.classDeclaration ||
-        kind == idl.LinkedNodeKind.classTypeAlias ||
-        kind == idl.LinkedNodeKind.compilationUnit ||
-        kind == idl.LinkedNodeKind.constructorDeclaration ||
-        kind == idl.LinkedNodeKind.defaultFormalParameter ||
-        kind == idl.LinkedNodeKind.enumDeclaration ||
-        kind == idl.LinkedNodeKind.fieldFormalParameter ||
-        kind == idl.LinkedNodeKind.functionDeclaration ||
-        kind == idl.LinkedNodeKind.functionTypeAlias ||
-        kind == idl.LinkedNodeKind.functionTypedFormalParameter ||
-        kind == idl.LinkedNodeKind.genericTypeAlias ||
-        kind == idl.LinkedNodeKind.methodDeclaration ||
-        kind == idl.LinkedNodeKind.mixinDeclaration ||
-        kind == idl.LinkedNodeKind.simpleFormalParameter ||
-        kind == idl.LinkedNodeKind.typeParameter ||
-        kind == idl.LinkedNodeKind.variableDeclaration);
-    assert(value == null || value >= 0);
-    _variantField_32 = value;
-  }
-
-  @override
   List<String> get comment_tokens {
     assert(kind == idl.LinkedNodeKind.comment);
-    return _variantField_35 ??= <String>[];
+    return _variantField_33 ??= <String>[];
   }
 
   set comment_tokens(List<String> value) {
     assert(kind == idl.LinkedNodeKind.comment);
-    _variantField_35 = value;
+    _variantField_33 = value;
   }
 
   @override
@@ -7466,34 +7318,6 @@
   }
 
   @override
-  int get constructorDeclaration_periodOffset {
-    assert(kind == idl.LinkedNodeKind.constructorDeclaration);
-    return _variantField_19 ??= 0;
-  }
-
-  @override
-  int get uriBasedDirective_uriElement {
-    assert(kind == idl.LinkedNodeKind.exportDirective ||
-        kind == idl.LinkedNodeKind.importDirective ||
-        kind == idl.LinkedNodeKind.partDirective);
-    return _variantField_19 ??= 0;
-  }
-
-  set constructorDeclaration_periodOffset(int value) {
-    assert(kind == idl.LinkedNodeKind.constructorDeclaration);
-    assert(value == null || value >= 0);
-    _variantField_19 = value;
-  }
-
-  set uriBasedDirective_uriElement(int value) {
-    assert(kind == idl.LinkedNodeKind.exportDirective ||
-        kind == idl.LinkedNodeKind.importDirective ||
-        kind == idl.LinkedNodeKind.partDirective);
-    assert(value == null || value >= 0);
-    _variantField_19 = value;
-  }
-
-  @override
   LinkedNodeBuilder get constructorDeclaration_returnType {
     assert(kind == idl.LinkedNodeKind.constructorDeclaration);
     return _variantField_10;
@@ -7615,63 +7439,79 @@
   }
 
   @override
+  int get informativeId {
+    assert(kind == idl.LinkedNodeKind.classDeclaration ||
+        kind == idl.LinkedNodeKind.classTypeAlias ||
+        kind == idl.LinkedNodeKind.compilationUnit ||
+        kind == idl.LinkedNodeKind.compilationUnit ||
+        kind == idl.LinkedNodeKind.constructorDeclaration ||
+        kind == idl.LinkedNodeKind.defaultFormalParameter ||
+        kind == idl.LinkedNodeKind.enumConstantDeclaration ||
+        kind == idl.LinkedNodeKind.enumDeclaration ||
+        kind == idl.LinkedNodeKind.exportDirective ||
+        kind == idl.LinkedNodeKind.fieldDeclaration ||
+        kind == idl.LinkedNodeKind.fieldFormalParameter ||
+        kind == idl.LinkedNodeKind.functionDeclaration ||
+        kind == idl.LinkedNodeKind.functionTypedFormalParameter ||
+        kind == idl.LinkedNodeKind.functionTypeAlias ||
+        kind == idl.LinkedNodeKind.genericTypeAlias ||
+        kind == idl.LinkedNodeKind.importDirective ||
+        kind == idl.LinkedNodeKind.libraryDirective ||
+        kind == idl.LinkedNodeKind.methodDeclaration ||
+        kind == idl.LinkedNodeKind.mixinDeclaration ||
+        kind == idl.LinkedNodeKind.partDirective ||
+        kind == idl.LinkedNodeKind.partOfDirective ||
+        kind == idl.LinkedNodeKind.simpleFormalParameter ||
+        kind == idl.LinkedNodeKind.topLevelVariableDeclaration ||
+        kind == idl.LinkedNodeKind.typeParameter ||
+        kind == idl.LinkedNodeKind.variableDeclaration ||
+        kind == idl.LinkedNodeKind.variableDeclarationList);
+    return _variantField_36 ??= 0;
+  }
+
+  set informativeId(int value) {
+    assert(kind == idl.LinkedNodeKind.classDeclaration ||
+        kind == idl.LinkedNodeKind.classTypeAlias ||
+        kind == idl.LinkedNodeKind.compilationUnit ||
+        kind == idl.LinkedNodeKind.compilationUnit ||
+        kind == idl.LinkedNodeKind.constructorDeclaration ||
+        kind == idl.LinkedNodeKind.defaultFormalParameter ||
+        kind == idl.LinkedNodeKind.enumConstantDeclaration ||
+        kind == idl.LinkedNodeKind.enumDeclaration ||
+        kind == idl.LinkedNodeKind.exportDirective ||
+        kind == idl.LinkedNodeKind.fieldDeclaration ||
+        kind == idl.LinkedNodeKind.fieldFormalParameter ||
+        kind == idl.LinkedNodeKind.functionDeclaration ||
+        kind == idl.LinkedNodeKind.functionTypedFormalParameter ||
+        kind == idl.LinkedNodeKind.functionTypeAlias ||
+        kind == idl.LinkedNodeKind.genericTypeAlias ||
+        kind == idl.LinkedNodeKind.importDirective ||
+        kind == idl.LinkedNodeKind.libraryDirective ||
+        kind == idl.LinkedNodeKind.methodDeclaration ||
+        kind == idl.LinkedNodeKind.mixinDeclaration ||
+        kind == idl.LinkedNodeKind.partDirective ||
+        kind == idl.LinkedNodeKind.partOfDirective ||
+        kind == idl.LinkedNodeKind.simpleFormalParameter ||
+        kind == idl.LinkedNodeKind.topLevelVariableDeclaration ||
+        kind == idl.LinkedNodeKind.typeParameter ||
+        kind == idl.LinkedNodeKind.variableDeclaration ||
+        kind == idl.LinkedNodeKind.variableDeclarationList);
+    assert(value == null || value >= 0);
+    _variantField_36 = value;
+  }
+
+  @override
   int get integerLiteral_value {
     assert(kind == idl.LinkedNodeKind.integerLiteral);
     return _variantField_16 ??= 0;
   }
 
-  @override
-  int get nameOffset {
-    assert(kind == idl.LinkedNodeKind.classDeclaration ||
-        kind == idl.LinkedNodeKind.classTypeAlias ||
-        kind == idl.LinkedNodeKind.constructorDeclaration ||
-        kind == idl.LinkedNodeKind.enumConstantDeclaration ||
-        kind == idl.LinkedNodeKind.enumDeclaration ||
-        kind == idl.LinkedNodeKind.exportDirective ||
-        kind == idl.LinkedNodeKind.fieldFormalParameter ||
-        kind == idl.LinkedNodeKind.functionDeclaration ||
-        kind == idl.LinkedNodeKind.functionTypedFormalParameter ||
-        kind == idl.LinkedNodeKind.functionTypeAlias ||
-        kind == idl.LinkedNodeKind.genericTypeAlias ||
-        kind == idl.LinkedNodeKind.importDirective ||
-        kind == idl.LinkedNodeKind.methodDeclaration ||
-        kind == idl.LinkedNodeKind.mixinDeclaration ||
-        kind == idl.LinkedNodeKind.partDirective ||
-        kind == idl.LinkedNodeKind.simpleFormalParameter ||
-        kind == idl.LinkedNodeKind.typeParameter ||
-        kind == idl.LinkedNodeKind.variableDeclaration);
-    return _variantField_16 ??= 0;
-  }
-
   set integerLiteral_value(int value) {
     assert(kind == idl.LinkedNodeKind.integerLiteral);
     assert(value == null || value >= 0);
     _variantField_16 = value;
   }
 
-  set nameOffset(int value) {
-    assert(kind == idl.LinkedNodeKind.classDeclaration ||
-        kind == idl.LinkedNodeKind.classTypeAlias ||
-        kind == idl.LinkedNodeKind.constructorDeclaration ||
-        kind == idl.LinkedNodeKind.enumConstantDeclaration ||
-        kind == idl.LinkedNodeKind.enumDeclaration ||
-        kind == idl.LinkedNodeKind.exportDirective ||
-        kind == idl.LinkedNodeKind.fieldFormalParameter ||
-        kind == idl.LinkedNodeKind.functionDeclaration ||
-        kind == idl.LinkedNodeKind.functionTypedFormalParameter ||
-        kind == idl.LinkedNodeKind.functionTypeAlias ||
-        kind == idl.LinkedNodeKind.genericTypeAlias ||
-        kind == idl.LinkedNodeKind.importDirective ||
-        kind == idl.LinkedNodeKind.methodDeclaration ||
-        kind == idl.LinkedNodeKind.mixinDeclaration ||
-        kind == idl.LinkedNodeKind.partDirective ||
-        kind == idl.LinkedNodeKind.simpleFormalParameter ||
-        kind == idl.LinkedNodeKind.typeParameter ||
-        kind == idl.LinkedNodeKind.variableDeclaration);
-    assert(value == null || value >= 0);
-    _variantField_16 = value;
-  }
-
   @override
   String get interpolationString_value {
     assert(kind == idl.LinkedNodeKind.interpolationString);
@@ -7691,14 +7531,6 @@
   }
 
   @override
-  LinkedNodeBuilder get normalFormalParameter_comment {
-    assert(kind == idl.LinkedNodeKind.fieldFormalParameter ||
-        kind == idl.LinkedNodeKind.functionTypedFormalParameter ||
-        kind == idl.LinkedNodeKind.simpleFormalParameter);
-    return _variantField_14;
-  }
-
-  @override
   LinkedNodeBuilder get uriBasedDirective_uri {
     assert(kind == idl.LinkedNodeKind.exportDirective ||
         kind == idl.LinkedNodeKind.importDirective ||
@@ -7712,13 +7544,6 @@
     _variantField_14 = value;
   }
 
-  set normalFormalParameter_comment(LinkedNodeBuilder value) {
-    assert(kind == idl.LinkedNodeKind.fieldFormalParameter ||
-        kind == idl.LinkedNodeKind.functionTypedFormalParameter ||
-        kind == idl.LinkedNodeKind.simpleFormalParameter);
-    _variantField_14 = value;
-  }
-
   set uriBasedDirective_uri(LinkedNodeBuilder value) {
     assert(kind == idl.LinkedNodeKind.exportDirective ||
         kind == idl.LinkedNodeKind.importDirective ||
@@ -7736,7 +7561,7 @@
   @override
   List<String> get mixinDeclaration_superInvokedNames {
     assert(kind == idl.LinkedNodeKind.mixinDeclaration);
-    return _variantField_36 ??= <String>[];
+    return _variantField_34 ??= <String>[];
   }
 
   @override
@@ -7744,19 +7569,19 @@
     assert(kind == idl.LinkedNodeKind.hideCombinator ||
         kind == idl.LinkedNodeKind.showCombinator ||
         kind == idl.LinkedNodeKind.symbolLiteral);
-    return _variantField_36 ??= <String>[];
+    return _variantField_34 ??= <String>[];
   }
 
   set mixinDeclaration_superInvokedNames(List<String> value) {
     assert(kind == idl.LinkedNodeKind.mixinDeclaration);
-    _variantField_36 = value;
+    _variantField_34 = value;
   }
 
   set names(List<String> value) {
     assert(kind == idl.LinkedNodeKind.hideCombinator ||
         kind == idl.LinkedNodeKind.showCombinator ||
         kind == idl.LinkedNodeKind.symbolLiteral);
-    _variantField_36 = value;
+    _variantField_34 = value;
   }
 
   @override
@@ -7812,25 +7637,36 @@
   @override
   idl.UnlinkedTokenType get spreadElement_spreadOperator {
     assert(kind == idl.LinkedNodeKind.spreadElement);
-    return _variantField_38 ??= idl.UnlinkedTokenType.NOTHING;
+    return _variantField_35 ??= idl.UnlinkedTokenType.NOTHING;
   }
 
   set spreadElement_spreadOperator(idl.UnlinkedTokenType value) {
     assert(kind == idl.LinkedNodeKind.spreadElement);
-    _variantField_38 = value;
+    _variantField_35 = value;
   }
 
   @override
   TopLevelInferenceErrorBuilder get topLevelTypeInferenceError {
     assert(kind == idl.LinkedNodeKind.simpleFormalParameter ||
         kind == idl.LinkedNodeKind.variableDeclaration);
-    return _variantField_34;
+    return _variantField_32;
   }
 
   set topLevelTypeInferenceError(TopLevelInferenceErrorBuilder value) {
     assert(kind == idl.LinkedNodeKind.simpleFormalParameter ||
         kind == idl.LinkedNodeKind.variableDeclaration);
-    _variantField_34 = value;
+    _variantField_32 = value;
+  }
+
+  @override
+  LinkedNodeBuilder get unused11 {
+    assert(kind == idl.LinkedNodeKind.classDeclaration);
+    return _variantField_11;
+  }
+
+  set unused11(LinkedNodeBuilder value) {
+    assert(kind == idl.LinkedNodeKind.classDeclaration);
+    _variantField_11 = value;
   }
 
   @override
@@ -7848,6 +7684,22 @@
     _variantField_22 = value;
   }
 
+  @override
+  int get uriBasedDirective_uriElement {
+    assert(kind == idl.LinkedNodeKind.exportDirective ||
+        kind == idl.LinkedNodeKind.importDirective ||
+        kind == idl.LinkedNodeKind.partDirective);
+    return _variantField_19 ??= 0;
+  }
+
+  set uriBasedDirective_uriElement(int value) {
+    assert(kind == idl.LinkedNodeKind.exportDirective ||
+        kind == idl.LinkedNodeKind.importDirective ||
+        kind == idl.LinkedNodeKind.partDirective);
+    assert(value == null || value >= 0);
+    _variantField_19 = value;
+  }
+
   LinkedNodeBuilder.adjacentStrings({
     List<LinkedNodeBuilder> adjacentStrings_strings,
   })  : _kind = idl.LinkedNodeKind.adjacentStrings,
@@ -7974,7 +7826,6 @@
         _variantField_9 = catchClause_stackTraceParameter;
 
   LinkedNodeBuilder.classDeclaration({
-    LinkedNodeBuilder annotatedNode_comment,
     List<LinkedNodeBuilder> annotatedNode_metadata,
     LinkedNodeBuilder classDeclaration_extendsClause,
     LinkedNodeBuilder classDeclaration_withClause,
@@ -7983,12 +7834,10 @@
     LinkedNodeBuilder classOrMixinDeclaration_implementsClause,
     List<LinkedNodeBuilder> classOrMixinDeclaration_members,
     LinkedNodeBuilder classOrMixinDeclaration_typeParameters,
-    int codeLength,
-    int codeOffset,
-    int nameOffset,
+    int informativeId,
     bool simplyBoundable_isSimplyBounded,
+    LinkedNodeBuilder unused11,
   })  : _kind = idl.LinkedNodeKind.classDeclaration,
-        _variantField_11 = annotatedNode_comment,
         _variantField_4 = annotatedNode_metadata,
         _variantField_6 = classDeclaration_extendsClause,
         _variantField_7 = classDeclaration_withClause,
@@ -7997,32 +7846,25 @@
         _variantField_12 = classOrMixinDeclaration_implementsClause,
         _variantField_5 = classOrMixinDeclaration_members,
         _variantField_13 = classOrMixinDeclaration_typeParameters,
-        _variantField_33 = codeLength,
-        _variantField_32 = codeOffset,
-        _variantField_16 = nameOffset,
-        _variantField_31 = simplyBoundable_isSimplyBounded;
+        _variantField_36 = informativeId,
+        _variantField_31 = simplyBoundable_isSimplyBounded,
+        _variantField_11 = unused11;
 
   LinkedNodeBuilder.classTypeAlias({
-    LinkedNodeBuilder annotatedNode_comment,
     List<LinkedNodeBuilder> annotatedNode_metadata,
     LinkedNodeBuilder classTypeAlias_typeParameters,
     LinkedNodeBuilder classTypeAlias_superclass,
     LinkedNodeBuilder classTypeAlias_withClause,
     LinkedNodeBuilder classTypeAlias_implementsClause,
-    int codeLength,
-    int codeOffset,
-    int nameOffset,
+    int informativeId,
     bool simplyBoundable_isSimplyBounded,
   })  : _kind = idl.LinkedNodeKind.classTypeAlias,
-        _variantField_11 = annotatedNode_comment,
         _variantField_4 = annotatedNode_metadata,
         _variantField_6 = classTypeAlias_typeParameters,
         _variantField_7 = classTypeAlias_superclass,
         _variantField_8 = classTypeAlias_withClause,
         _variantField_9 = classTypeAlias_implementsClause,
-        _variantField_33 = codeLength,
-        _variantField_32 = codeOffset,
-        _variantField_16 = nameOffset,
+        _variantField_36 = informativeId,
         _variantField_31 = simplyBoundable_isSimplyBounded;
 
   LinkedNodeBuilder.comment({
@@ -8031,7 +7873,7 @@
     idl.LinkedNodeCommentType comment_type,
   })  : _kind = idl.LinkedNodeKind.comment,
         _variantField_2 = comment_references,
-        _variantField_35 = comment_tokens,
+        _variantField_33 = comment_tokens,
         _variantField_29 = comment_type;
 
   LinkedNodeBuilder.commentReference({
@@ -8042,15 +7884,13 @@
   LinkedNodeBuilder.compilationUnit({
     List<LinkedNodeBuilder> compilationUnit_declarations,
     LinkedNodeBuilder compilationUnit_scriptTag,
-    int codeLength,
-    int codeOffset,
     List<LinkedNodeBuilder> compilationUnit_directives,
+    int informativeId,
   })  : _kind = idl.LinkedNodeKind.compilationUnit,
         _variantField_2 = compilationUnit_declarations,
         _variantField_6 = compilationUnit_scriptTag,
-        _variantField_33 = codeLength,
-        _variantField_32 = codeOffset,
-        _variantField_3 = compilationUnit_directives;
+        _variantField_3 = compilationUnit_directives,
+        _variantField_36 = informativeId;
 
   LinkedNodeBuilder.conditionalExpression({
     LinkedNodeBuilder conditionalExpression_condition,
@@ -8074,30 +7914,20 @@
 
   LinkedNodeBuilder.constructorDeclaration({
     List<LinkedNodeBuilder> constructorDeclaration_initializers,
-    LinkedNodeBuilder annotatedNode_comment,
     List<LinkedNodeBuilder> annotatedNode_metadata,
     LinkedNodeBuilder constructorDeclaration_body,
-    int constructorDeclaration_returnTypeOffset,
     LinkedNodeBuilder constructorDeclaration_parameters,
     LinkedNodeBuilder constructorDeclaration_redirectedConstructor,
-    int codeLength,
-    int codeOffset,
-    int constructorDeclaration_periodOffset,
     LinkedNodeBuilder constructorDeclaration_returnType,
-    int nameOffset,
+    int informativeId,
   })  : _kind = idl.LinkedNodeKind.constructorDeclaration,
         _variantField_2 = constructorDeclaration_initializers,
-        _variantField_11 = annotatedNode_comment,
         _variantField_4 = annotatedNode_metadata,
         _variantField_6 = constructorDeclaration_body,
-        _variantField_17 = constructorDeclaration_returnTypeOffset,
         _variantField_8 = constructorDeclaration_parameters,
         _variantField_9 = constructorDeclaration_redirectedConstructor,
-        _variantField_33 = codeLength,
-        _variantField_32 = codeOffset,
-        _variantField_19 = constructorDeclaration_periodOffset,
         _variantField_10 = constructorDeclaration_returnType,
-        _variantField_16 = nameOffset;
+        _variantField_36 = informativeId;
 
   LinkedNodeBuilder.constructorFieldInitializer({
     LinkedNodeBuilder constructorFieldInitializer_expression,
@@ -8123,12 +7953,10 @@
         _variantField_6 = continueStatement_label;
 
   LinkedNodeBuilder.declaredIdentifier({
-    LinkedNodeBuilder annotatedNode_comment,
     List<LinkedNodeBuilder> annotatedNode_metadata,
     LinkedNodeBuilder declaredIdentifier_identifier,
     LinkedNodeBuilder declaredIdentifier_type,
   })  : _kind = idl.LinkedNodeKind.declaredIdentifier,
-        _variantField_11 = annotatedNode_comment,
         _variantField_4 = annotatedNode_metadata,
         _variantField_6 = declaredIdentifier_identifier,
         _variantField_7 = declaredIdentifier_type;
@@ -8136,15 +7964,13 @@
   LinkedNodeBuilder.defaultFormalParameter({
     LinkedNodeBuilder defaultFormalParameter_defaultValue,
     LinkedNodeBuilder defaultFormalParameter_parameter,
-    int codeLength,
-    int codeOffset,
     idl.LinkedNodeFormalParameterKind defaultFormalParameter_kind,
+    int informativeId,
   })  : _kind = idl.LinkedNodeKind.defaultFormalParameter,
         _variantField_6 = defaultFormalParameter_defaultValue,
         _variantField_7 = defaultFormalParameter_parameter,
-        _variantField_33 = codeLength,
-        _variantField_32 = codeOffset,
-        _variantField_26 = defaultFormalParameter_kind;
+        _variantField_26 = defaultFormalParameter_kind,
+        _variantField_36 = informativeId;
 
   LinkedNodeBuilder.doStatement({
     LinkedNodeBuilder doStatement_body,
@@ -8174,49 +8000,39 @@
         _variantField_15 = emptyStatement_fake;
 
   LinkedNodeBuilder.enumConstantDeclaration({
-    LinkedNodeBuilder annotatedNode_comment,
     List<LinkedNodeBuilder> annotatedNode_metadata,
-    int nameOffset,
+    int informativeId,
   })  : _kind = idl.LinkedNodeKind.enumConstantDeclaration,
-        _variantField_11 = annotatedNode_comment,
         _variantField_4 = annotatedNode_metadata,
-        _variantField_16 = nameOffset;
+        _variantField_36 = informativeId;
 
   LinkedNodeBuilder.enumDeclaration({
     List<LinkedNodeBuilder> enumDeclaration_constants,
-    LinkedNodeBuilder annotatedNode_comment,
     List<LinkedNodeBuilder> annotatedNode_metadata,
-    int codeLength,
-    int codeOffset,
-    int nameOffset,
+    int informativeId,
   })  : _kind = idl.LinkedNodeKind.enumDeclaration,
         _variantField_2 = enumDeclaration_constants,
-        _variantField_11 = annotatedNode_comment,
         _variantField_4 = annotatedNode_metadata,
-        _variantField_33 = codeLength,
-        _variantField_32 = codeOffset,
-        _variantField_16 = nameOffset;
+        _variantField_36 = informativeId;
 
   LinkedNodeBuilder.exportDirective({
     List<LinkedNodeBuilder> namespaceDirective_combinators,
-    LinkedNodeBuilder annotatedNode_comment,
     List<LinkedNodeBuilder> annotatedNode_metadata,
     List<LinkedNodeBuilder> namespaceDirective_configurations,
-    int uriBasedDirective_uriElement,
-    int nameOffset,
+    int informativeId,
     LinkedNodeBuilder uriBasedDirective_uri,
     String namespaceDirective_selectedUri,
     String uriBasedDirective_uriContent,
+    int uriBasedDirective_uriElement,
   })  : _kind = idl.LinkedNodeKind.exportDirective,
         _variantField_2 = namespaceDirective_combinators,
-        _variantField_11 = annotatedNode_comment,
         _variantField_4 = annotatedNode_metadata,
         _variantField_3 = namespaceDirective_configurations,
-        _variantField_19 = uriBasedDirective_uriElement,
-        _variantField_16 = nameOffset,
+        _variantField_36 = informativeId,
         _variantField_14 = uriBasedDirective_uri,
         _variantField_20 = namespaceDirective_selectedUri,
-        _variantField_22 = uriBasedDirective_uriContent;
+        _variantField_22 = uriBasedDirective_uriContent,
+        _variantField_19 = uriBasedDirective_uriElement;
 
   LinkedNodeBuilder.expressionFunctionBody({
     LinkedNodeBuilder expressionFunctionBody_expression,
@@ -8234,13 +8050,13 @@
         _variantField_6 = extendsClause_superclass;
 
   LinkedNodeBuilder.fieldDeclaration({
-    LinkedNodeBuilder annotatedNode_comment,
     List<LinkedNodeBuilder> annotatedNode_metadata,
     LinkedNodeBuilder fieldDeclaration_fields,
+    int informativeId,
   })  : _kind = idl.LinkedNodeKind.fieldDeclaration,
-        _variantField_11 = annotatedNode_comment,
         _variantField_4 = annotatedNode_metadata,
-        _variantField_6 = fieldDeclaration_fields;
+        _variantField_6 = fieldDeclaration_fields,
+        _variantField_36 = informativeId;
 
   LinkedNodeBuilder.fieldFormalParameter({
     LinkedNodeTypeBuilder actualType,
@@ -8249,10 +8065,7 @@
     LinkedNodeBuilder fieldFormalParameter_typeParameters,
     LinkedNodeBuilder fieldFormalParameter_formalParameters,
     bool inheritsCovariant,
-    int codeLength,
-    int codeOffset,
-    int nameOffset,
-    LinkedNodeBuilder normalFormalParameter_comment,
+    int informativeId,
   })  : _kind = idl.LinkedNodeKind.fieldFormalParameter,
         _variantField_24 = actualType,
         _variantField_4 = normalFormalParameter_metadata,
@@ -8260,10 +8073,7 @@
         _variantField_7 = fieldFormalParameter_typeParameters,
         _variantField_8 = fieldFormalParameter_formalParameters,
         _variantField_27 = inheritsCovariant,
-        _variantField_33 = codeLength,
-        _variantField_32 = codeOffset,
-        _variantField_16 = nameOffset,
-        _variantField_14 = normalFormalParameter_comment;
+        _variantField_36 = informativeId;
 
   LinkedNodeBuilder.forEachPartsWithDeclaration({
     LinkedNodeBuilder forEachParts_iterable,
@@ -8318,22 +8128,16 @@
 
   LinkedNodeBuilder.functionDeclaration({
     LinkedNodeTypeBuilder actualReturnType,
-    LinkedNodeBuilder annotatedNode_comment,
     List<LinkedNodeBuilder> annotatedNode_metadata,
     LinkedNodeBuilder functionDeclaration_functionExpression,
     LinkedNodeBuilder functionDeclaration_returnType,
-    int codeLength,
-    int codeOffset,
-    int nameOffset,
+    int informativeId,
   })  : _kind = idl.LinkedNodeKind.functionDeclaration,
         _variantField_24 = actualReturnType,
-        _variantField_11 = annotatedNode_comment,
         _variantField_4 = annotatedNode_metadata,
         _variantField_6 = functionDeclaration_functionExpression,
         _variantField_7 = functionDeclaration_returnType,
-        _variantField_33 = codeLength,
-        _variantField_32 = codeOffset,
-        _variantField_16 = nameOffset;
+        _variantField_36 = informativeId;
 
   LinkedNodeBuilder.functionDeclarationStatement({
     LinkedNodeBuilder functionDeclarationStatement_functionDeclaration,
@@ -8366,27 +8170,21 @@
 
   LinkedNodeBuilder.functionTypeAlias({
     LinkedNodeTypeBuilder actualReturnType,
-    LinkedNodeBuilder annotatedNode_comment,
     List<LinkedNodeBuilder> annotatedNode_metadata,
     LinkedNodeBuilder functionTypeAlias_formalParameters,
     LinkedNodeBuilder functionTypeAlias_returnType,
     LinkedNodeBuilder functionTypeAlias_typeParameters,
     bool typeAlias_hasSelfReference,
-    int codeLength,
-    int codeOffset,
-    int nameOffset,
+    int informativeId,
     bool simplyBoundable_isSimplyBounded,
   })  : _kind = idl.LinkedNodeKind.functionTypeAlias,
         _variantField_24 = actualReturnType,
-        _variantField_11 = annotatedNode_comment,
         _variantField_4 = annotatedNode_metadata,
         _variantField_6 = functionTypeAlias_formalParameters,
         _variantField_7 = functionTypeAlias_returnType,
         _variantField_8 = functionTypeAlias_typeParameters,
         _variantField_27 = typeAlias_hasSelfReference,
-        _variantField_33 = codeLength,
-        _variantField_32 = codeOffset,
-        _variantField_16 = nameOffset,
+        _variantField_36 = informativeId,
         _variantField_31 = simplyBoundable_isSimplyBounded;
 
   LinkedNodeBuilder.functionTypedFormalParameter({
@@ -8396,10 +8194,7 @@
     LinkedNodeBuilder functionTypedFormalParameter_returnType,
     LinkedNodeBuilder functionTypedFormalParameter_typeParameters,
     bool inheritsCovariant,
-    int codeLength,
-    int codeOffset,
-    int nameOffset,
-    LinkedNodeBuilder normalFormalParameter_comment,
+    int informativeId,
   })  : _kind = idl.LinkedNodeKind.functionTypedFormalParameter,
         _variantField_24 = actualType,
         _variantField_4 = normalFormalParameter_metadata,
@@ -8407,10 +8202,7 @@
         _variantField_7 = functionTypedFormalParameter_returnType,
         _variantField_8 = functionTypedFormalParameter_typeParameters,
         _variantField_27 = inheritsCovariant,
-        _variantField_33 = codeLength,
-        _variantField_32 = codeOffset,
-        _variantField_16 = nameOffset,
-        _variantField_14 = normalFormalParameter_comment;
+        _variantField_36 = informativeId;
 
   LinkedNodeBuilder.genericFunctionType({
     LinkedNodeTypeBuilder actualReturnType,
@@ -8428,30 +8220,24 @@
         _variantField_25 = genericFunctionType_type;
 
   LinkedNodeBuilder.genericTypeAlias({
-    LinkedNodeBuilder annotatedNode_comment,
     List<LinkedNodeBuilder> annotatedNode_metadata,
     LinkedNodeBuilder genericTypeAlias_typeParameters,
     LinkedNodeBuilder genericTypeAlias_functionType,
     bool typeAlias_hasSelfReference,
-    int codeLength,
-    int codeOffset,
-    int nameOffset,
+    int informativeId,
     bool simplyBoundable_isSimplyBounded,
   })  : _kind = idl.LinkedNodeKind.genericTypeAlias,
-        _variantField_11 = annotatedNode_comment,
         _variantField_4 = annotatedNode_metadata,
         _variantField_6 = genericTypeAlias_typeParameters,
         _variantField_7 = genericTypeAlias_functionType,
         _variantField_27 = typeAlias_hasSelfReference,
-        _variantField_33 = codeLength,
-        _variantField_32 = codeOffset,
-        _variantField_16 = nameOffset,
+        _variantField_36 = informativeId,
         _variantField_31 = simplyBoundable_isSimplyBounded;
 
   LinkedNodeBuilder.hideCombinator({
     List<String> names,
   })  : _kind = idl.LinkedNodeKind.hideCombinator,
-        _variantField_36 = names;
+        _variantField_34 = names;
 
   LinkedNodeBuilder.ifElement({
     LinkedNodeBuilder ifMixin_condition,
@@ -8478,28 +8264,26 @@
 
   LinkedNodeBuilder.importDirective({
     List<LinkedNodeBuilder> namespaceDirective_combinators,
-    LinkedNodeBuilder annotatedNode_comment,
     List<LinkedNodeBuilder> annotatedNode_metadata,
     int importDirective_prefixOffset,
     List<LinkedNodeBuilder> namespaceDirective_configurations,
-    int uriBasedDirective_uriElement,
     String importDirective_prefix,
-    int nameOffset,
+    int informativeId,
     LinkedNodeBuilder uriBasedDirective_uri,
     String namespaceDirective_selectedUri,
     String uriBasedDirective_uriContent,
+    int uriBasedDirective_uriElement,
   })  : _kind = idl.LinkedNodeKind.importDirective,
         _variantField_2 = namespaceDirective_combinators,
-        _variantField_11 = annotatedNode_comment,
         _variantField_4 = annotatedNode_metadata,
         _variantField_15 = importDirective_prefixOffset,
         _variantField_3 = namespaceDirective_configurations,
-        _variantField_19 = uriBasedDirective_uriElement,
         _variantField_1 = importDirective_prefix,
-        _variantField_16 = nameOffset,
+        _variantField_36 = informativeId,
         _variantField_14 = uriBasedDirective_uri,
         _variantField_20 = namespaceDirective_selectedUri,
-        _variantField_22 = uriBasedDirective_uriContent;
+        _variantField_22 = uriBasedDirective_uriContent,
+        _variantField_19 = uriBasedDirective_uriElement;
 
   LinkedNodeBuilder.indexExpression({
     LinkedNodeBuilder indexExpression_index,
@@ -8560,13 +8344,13 @@
         _variantField_6 = labeledStatement_statement;
 
   LinkedNodeBuilder.libraryDirective({
-    LinkedNodeBuilder annotatedNode_comment,
     List<LinkedNodeBuilder> annotatedNode_metadata,
     LinkedNodeBuilder libraryDirective_name,
+    int informativeId,
   })  : _kind = idl.LinkedNodeKind.libraryDirective,
-        _variantField_11 = annotatedNode_comment,
         _variantField_4 = annotatedNode_metadata,
-        _variantField_6 = libraryDirective_name;
+        _variantField_6 = libraryDirective_name,
+        _variantField_36 = informativeId;
 
   LinkedNodeBuilder.libraryIdentifier({
     List<LinkedNodeBuilder> libraryIdentifier_components,
@@ -8591,26 +8375,20 @@
 
   LinkedNodeBuilder.methodDeclaration({
     LinkedNodeTypeBuilder actualReturnType,
-    LinkedNodeBuilder annotatedNode_comment,
     List<LinkedNodeBuilder> annotatedNode_metadata,
     LinkedNodeBuilder methodDeclaration_body,
     LinkedNodeBuilder methodDeclaration_formalParameters,
     LinkedNodeBuilder methodDeclaration_returnType,
     LinkedNodeBuilder methodDeclaration_typeParameters,
-    int codeLength,
-    int codeOffset,
-    int nameOffset,
+    int informativeId,
   })  : _kind = idl.LinkedNodeKind.methodDeclaration,
         _variantField_24 = actualReturnType,
-        _variantField_11 = annotatedNode_comment,
         _variantField_4 = annotatedNode_metadata,
         _variantField_6 = methodDeclaration_body,
         _variantField_7 = methodDeclaration_formalParameters,
         _variantField_8 = methodDeclaration_returnType,
         _variantField_9 = methodDeclaration_typeParameters,
-        _variantField_33 = codeLength,
-        _variantField_32 = codeOffset,
-        _variantField_16 = nameOffset;
+        _variantField_36 = informativeId;
 
   LinkedNodeBuilder.methodInvocation({
     LinkedNodeTypeBuilder invocationExpression_invokeType,
@@ -8628,28 +8406,22 @@
         _variantField_14 = invocationExpression_arguments;
 
   LinkedNodeBuilder.mixinDeclaration({
-    LinkedNodeBuilder annotatedNode_comment,
     List<LinkedNodeBuilder> annotatedNode_metadata,
     LinkedNodeBuilder mixinDeclaration_onClause,
     LinkedNodeBuilder classOrMixinDeclaration_implementsClause,
     List<LinkedNodeBuilder> classOrMixinDeclaration_members,
     LinkedNodeBuilder classOrMixinDeclaration_typeParameters,
-    int codeLength,
-    int codeOffset,
-    int nameOffset,
+    int informativeId,
     List<String> mixinDeclaration_superInvokedNames,
     bool simplyBoundable_isSimplyBounded,
   })  : _kind = idl.LinkedNodeKind.mixinDeclaration,
-        _variantField_11 = annotatedNode_comment,
         _variantField_4 = annotatedNode_metadata,
         _variantField_6 = mixinDeclaration_onClause,
         _variantField_12 = classOrMixinDeclaration_implementsClause,
         _variantField_5 = classOrMixinDeclaration_members,
         _variantField_13 = classOrMixinDeclaration_typeParameters,
-        _variantField_33 = codeLength,
-        _variantField_32 = codeOffset,
-        _variantField_16 = nameOffset,
-        _variantField_36 = mixinDeclaration_superInvokedNames,
+        _variantField_36 = informativeId,
+        _variantField_34 = mixinDeclaration_superInvokedNames,
         _variantField_31 = simplyBoundable_isSimplyBounded;
 
   LinkedNodeBuilder.namedExpression({
@@ -8689,30 +8461,28 @@
         _variantField_25 = expression_type;
 
   LinkedNodeBuilder.partDirective({
-    LinkedNodeBuilder annotatedNode_comment,
     List<LinkedNodeBuilder> annotatedNode_metadata,
-    int uriBasedDirective_uriElement,
-    int nameOffset,
+    int informativeId,
     LinkedNodeBuilder uriBasedDirective_uri,
     String uriBasedDirective_uriContent,
+    int uriBasedDirective_uriElement,
   })  : _kind = idl.LinkedNodeKind.partDirective,
-        _variantField_11 = annotatedNode_comment,
         _variantField_4 = annotatedNode_metadata,
-        _variantField_19 = uriBasedDirective_uriElement,
-        _variantField_16 = nameOffset,
+        _variantField_36 = informativeId,
         _variantField_14 = uriBasedDirective_uri,
-        _variantField_22 = uriBasedDirective_uriContent;
+        _variantField_22 = uriBasedDirective_uriContent,
+        _variantField_19 = uriBasedDirective_uriElement;
 
   LinkedNodeBuilder.partOfDirective({
-    LinkedNodeBuilder annotatedNode_comment,
     List<LinkedNodeBuilder> annotatedNode_metadata,
     LinkedNodeBuilder partOfDirective_libraryName,
     LinkedNodeBuilder partOfDirective_uri,
+    int informativeId,
   })  : _kind = idl.LinkedNodeKind.partOfDirective,
-        _variantField_11 = annotatedNode_comment,
         _variantField_4 = annotatedNode_metadata,
         _variantField_6 = partOfDirective_libraryName,
-        _variantField_7 = partOfDirective_uri;
+        _variantField_7 = partOfDirective_uri,
+        _variantField_36 = informativeId;
 
   LinkedNodeBuilder.postfixExpression({
     LinkedNodeBuilder postfixExpression_operand,
@@ -8793,28 +8563,22 @@
   LinkedNodeBuilder.showCombinator({
     List<String> names,
   })  : _kind = idl.LinkedNodeKind.showCombinator,
-        _variantField_36 = names;
+        _variantField_34 = names;
 
   LinkedNodeBuilder.simpleFormalParameter({
     LinkedNodeTypeBuilder actualType,
     List<LinkedNodeBuilder> normalFormalParameter_metadata,
     LinkedNodeBuilder simpleFormalParameter_type,
     bool inheritsCovariant,
-    int codeLength,
-    int codeOffset,
-    int nameOffset,
-    LinkedNodeBuilder normalFormalParameter_comment,
+    int informativeId,
     TopLevelInferenceErrorBuilder topLevelTypeInferenceError,
   })  : _kind = idl.LinkedNodeKind.simpleFormalParameter,
         _variantField_24 = actualType,
         _variantField_4 = normalFormalParameter_metadata,
         _variantField_6 = simpleFormalParameter_type,
         _variantField_27 = inheritsCovariant,
-        _variantField_33 = codeLength,
-        _variantField_32 = codeOffset,
-        _variantField_16 = nameOffset,
-        _variantField_14 = normalFormalParameter_comment,
-        _variantField_34 = topLevelTypeInferenceError;
+        _variantField_36 = informativeId,
+        _variantField_32 = topLevelTypeInferenceError;
 
   LinkedNodeBuilder.simpleIdentifier({
     LinkedNodeTypeBuilder simpleIdentifier_elementType,
@@ -8835,7 +8599,7 @@
     idl.UnlinkedTokenType spreadElement_spreadOperator,
   })  : _kind = idl.LinkedNodeKind.spreadElement,
         _variantField_6 = spreadElement_expression,
-        _variantField_38 = spreadElement_spreadOperator;
+        _variantField_35 = spreadElement_spreadOperator;
 
   LinkedNodeBuilder.stringInterpolation({
     List<LinkedNodeBuilder> stringInterpolation_elements,
@@ -8886,7 +8650,7 @@
     List<String> names,
   })  : _kind = idl.LinkedNodeKind.symbolLiteral,
         _variantField_25 = expression_type,
-        _variantField_36 = names;
+        _variantField_34 = names;
 
   LinkedNodeBuilder.thisExpression({
     LinkedNodeTypeBuilder expression_type,
@@ -8901,13 +8665,13 @@
         _variantField_25 = expression_type;
 
   LinkedNodeBuilder.topLevelVariableDeclaration({
-    LinkedNodeBuilder annotatedNode_comment,
     List<LinkedNodeBuilder> annotatedNode_metadata,
     LinkedNodeBuilder topLevelVariableDeclaration_variableList,
+    int informativeId,
   })  : _kind = idl.LinkedNodeKind.topLevelVariableDeclaration,
-        _variantField_11 = annotatedNode_comment,
         _variantField_4 = annotatedNode_metadata,
-        _variantField_6 = topLevelVariableDeclaration_variableList;
+        _variantField_6 = topLevelVariableDeclaration_variableList,
+        _variantField_36 = informativeId;
 
   LinkedNodeBuilder.tryStatement({
     List<LinkedNodeBuilder> tryStatement_catchClauses,
@@ -8933,21 +8697,15 @@
         _variantField_23 = typeName_type;
 
   LinkedNodeBuilder.typeParameter({
-    LinkedNodeBuilder annotatedNode_comment,
     List<LinkedNodeBuilder> annotatedNode_metadata,
     LinkedNodeBuilder typeParameter_bound,
     LinkedNodeTypeBuilder typeParameter_defaultType,
-    int codeLength,
-    int codeOffset,
-    int nameOffset,
+    int informativeId,
   })  : _kind = idl.LinkedNodeKind.typeParameter,
-        _variantField_11 = annotatedNode_comment,
         _variantField_4 = annotatedNode_metadata,
         _variantField_6 = typeParameter_bound,
         _variantField_23 = typeParameter_defaultType,
-        _variantField_33 = codeLength,
-        _variantField_32 = codeOffset,
-        _variantField_16 = nameOffset;
+        _variantField_36 = informativeId;
 
   LinkedNodeBuilder.typeParameterList({
     List<LinkedNodeBuilder> typeParameterList_typeParameters,
@@ -8956,35 +8714,29 @@
 
   LinkedNodeBuilder.variableDeclaration({
     LinkedNodeTypeBuilder actualType,
-    LinkedNodeBuilder annotatedNode_comment,
     List<LinkedNodeBuilder> annotatedNode_metadata,
     LinkedNodeBuilder variableDeclaration_initializer,
     bool inheritsCovariant,
-    int codeLength,
-    int codeOffset,
-    int nameOffset,
+    int informativeId,
     TopLevelInferenceErrorBuilder topLevelTypeInferenceError,
   })  : _kind = idl.LinkedNodeKind.variableDeclaration,
         _variantField_24 = actualType,
-        _variantField_11 = annotatedNode_comment,
         _variantField_4 = annotatedNode_metadata,
         _variantField_6 = variableDeclaration_initializer,
         _variantField_27 = inheritsCovariant,
-        _variantField_33 = codeLength,
-        _variantField_32 = codeOffset,
-        _variantField_16 = nameOffset,
-        _variantField_34 = topLevelTypeInferenceError;
+        _variantField_36 = informativeId,
+        _variantField_32 = topLevelTypeInferenceError;
 
   LinkedNodeBuilder.variableDeclarationList({
     List<LinkedNodeBuilder> variableDeclarationList_variables,
-    LinkedNodeBuilder annotatedNode_comment,
     List<LinkedNodeBuilder> annotatedNode_metadata,
     LinkedNodeBuilder variableDeclarationList_type,
+    int informativeId,
   })  : _kind = idl.LinkedNodeKind.variableDeclarationList,
         _variantField_2 = variableDeclarationList_variables,
-        _variantField_11 = annotatedNode_comment,
         _variantField_4 = annotatedNode_metadata,
-        _variantField_6 = variableDeclarationList_type;
+        _variantField_6 = variableDeclarationList_type,
+        _variantField_36 = informativeId;
 
   LinkedNodeBuilder.variableDeclarationStatement({
     LinkedNodeBuilder variableDeclarationStatement_variables,
@@ -9060,7 +8812,6 @@
       catchClause_exceptionType?.flushInformative();
       catchClause_stackTraceParameter?.flushInformative();
     } else if (kind == idl.LinkedNodeKind.classDeclaration) {
-      annotatedNode_comment = null;
       annotatedNode_metadata?.forEach((b) => b.flushInformative());
       classDeclaration_extendsClause?.flushInformative();
       classDeclaration_withClause?.flushInformative();
@@ -9068,19 +8819,15 @@
       classOrMixinDeclaration_implementsClause?.flushInformative();
       classOrMixinDeclaration_members?.forEach((b) => b.flushInformative());
       classOrMixinDeclaration_typeParameters?.flushInformative();
-      codeLength = null;
-      codeOffset = null;
-      nameOffset = null;
+      informativeId = null;
+      unused11?.flushInformative();
     } else if (kind == idl.LinkedNodeKind.classTypeAlias) {
-      annotatedNode_comment = null;
       annotatedNode_metadata?.forEach((b) => b.flushInformative());
       classTypeAlias_typeParameters?.flushInformative();
       classTypeAlias_superclass?.flushInformative();
       classTypeAlias_withClause?.flushInformative();
       classTypeAlias_implementsClause?.flushInformative();
-      codeLength = null;
-      codeOffset = null;
-      nameOffset = null;
+      informativeId = null;
     } else if (kind == idl.LinkedNodeKind.comment) {
       comment_references?.forEach((b) => b.flushInformative());
     } else if (kind == idl.LinkedNodeKind.commentReference) {
@@ -9088,9 +8835,8 @@
     } else if (kind == idl.LinkedNodeKind.compilationUnit) {
       compilationUnit_declarations?.forEach((b) => b.flushInformative());
       compilationUnit_scriptTag?.flushInformative();
-      codeLength = null;
-      codeOffset = null;
       compilationUnit_directives?.forEach((b) => b.flushInformative());
+      informativeId = null;
     } else if (kind == idl.LinkedNodeKind.conditionalExpression) {
       conditionalExpression_condition?.flushInformative();
       conditionalExpression_elseExpression?.flushInformative();
@@ -9102,17 +8848,12 @@
       configuration_uri?.flushInformative();
     } else if (kind == idl.LinkedNodeKind.constructorDeclaration) {
       constructorDeclaration_initializers?.forEach((b) => b.flushInformative());
-      annotatedNode_comment = null;
       annotatedNode_metadata?.forEach((b) => b.flushInformative());
       constructorDeclaration_body?.flushInformative();
-      constructorDeclaration_returnTypeOffset = null;
       constructorDeclaration_parameters?.flushInformative();
       constructorDeclaration_redirectedConstructor?.flushInformative();
-      codeLength = null;
-      codeOffset = null;
-      constructorDeclaration_periodOffset = null;
       constructorDeclaration_returnType?.flushInformative();
-      nameOffset = null;
+      informativeId = null;
     } else if (kind == idl.LinkedNodeKind.constructorFieldInitializer) {
       constructorFieldInitializer_expression?.flushInformative();
       constructorFieldInitializer_fieldName?.flushInformative();
@@ -9123,15 +8864,13 @@
     } else if (kind == idl.LinkedNodeKind.continueStatement) {
       continueStatement_label?.flushInformative();
     } else if (kind == idl.LinkedNodeKind.declaredIdentifier) {
-      annotatedNode_comment = null;
       annotatedNode_metadata?.forEach((b) => b.flushInformative());
       declaredIdentifier_identifier?.flushInformative();
       declaredIdentifier_type?.flushInformative();
     } else if (kind == idl.LinkedNodeKind.defaultFormalParameter) {
       defaultFormalParameter_defaultValue?.flushInformative();
       defaultFormalParameter_parameter?.flushInformative();
-      codeLength = null;
-      codeOffset = null;
+      informativeId = null;
     } else if (kind == idl.LinkedNodeKind.doStatement) {
       doStatement_body?.flushInformative();
       doStatement_condition?.flushInformative();
@@ -9141,22 +8880,17 @@
     } else if (kind == idl.LinkedNodeKind.emptyFunctionBody) {
     } else if (kind == idl.LinkedNodeKind.emptyStatement) {
     } else if (kind == idl.LinkedNodeKind.enumConstantDeclaration) {
-      annotatedNode_comment = null;
       annotatedNode_metadata?.forEach((b) => b.flushInformative());
-      nameOffset = null;
+      informativeId = null;
     } else if (kind == idl.LinkedNodeKind.enumDeclaration) {
       enumDeclaration_constants?.forEach((b) => b.flushInformative());
-      annotatedNode_comment = null;
       annotatedNode_metadata?.forEach((b) => b.flushInformative());
-      codeLength = null;
-      codeOffset = null;
-      nameOffset = null;
+      informativeId = null;
     } else if (kind == idl.LinkedNodeKind.exportDirective) {
       namespaceDirective_combinators?.forEach((b) => b.flushInformative());
-      annotatedNode_comment = null;
       annotatedNode_metadata?.forEach((b) => b.flushInformative());
       namespaceDirective_configurations?.forEach((b) => b.flushInformative());
-      nameOffset = null;
+      informativeId = null;
       uriBasedDirective_uri?.flushInformative();
     } else if (kind == idl.LinkedNodeKind.expressionFunctionBody) {
       expressionFunctionBody_expression?.flushInformative();
@@ -9165,19 +8899,16 @@
     } else if (kind == idl.LinkedNodeKind.extendsClause) {
       extendsClause_superclass?.flushInformative();
     } else if (kind == idl.LinkedNodeKind.fieldDeclaration) {
-      annotatedNode_comment = null;
       annotatedNode_metadata?.forEach((b) => b.flushInformative());
       fieldDeclaration_fields?.flushInformative();
+      informativeId = null;
     } else if (kind == idl.LinkedNodeKind.fieldFormalParameter) {
       actualType?.flushInformative();
       normalFormalParameter_metadata?.forEach((b) => b.flushInformative());
       fieldFormalParameter_type?.flushInformative();
       fieldFormalParameter_typeParameters?.flushInformative();
       fieldFormalParameter_formalParameters?.flushInformative();
-      codeLength = null;
-      codeOffset = null;
-      nameOffset = null;
-      normalFormalParameter_comment = null;
+      informativeId = null;
     } else if (kind == idl.LinkedNodeKind.forEachPartsWithDeclaration) {
       forEachParts_iterable?.flushInformative();
       forEachPartsWithDeclaration_loopVariable?.flushInformative();
@@ -9202,13 +8933,10 @@
       formalParameterList_parameters?.forEach((b) => b.flushInformative());
     } else if (kind == idl.LinkedNodeKind.functionDeclaration) {
       actualReturnType?.flushInformative();
-      annotatedNode_comment = null;
       annotatedNode_metadata?.forEach((b) => b.flushInformative());
       functionDeclaration_functionExpression?.flushInformative();
       functionDeclaration_returnType?.flushInformative();
-      codeLength = null;
-      codeOffset = null;
-      nameOffset = null;
+      informativeId = null;
     } else if (kind == idl.LinkedNodeKind.functionDeclarationStatement) {
       functionDeclarationStatement_functionDeclaration?.flushInformative();
     } else if (kind == idl.LinkedNodeKind.functionExpression) {
@@ -9224,24 +8952,18 @@
       invocationExpression_arguments?.flushInformative();
     } else if (kind == idl.LinkedNodeKind.functionTypeAlias) {
       actualReturnType?.flushInformative();
-      annotatedNode_comment = null;
       annotatedNode_metadata?.forEach((b) => b.flushInformative());
       functionTypeAlias_formalParameters?.flushInformative();
       functionTypeAlias_returnType?.flushInformative();
       functionTypeAlias_typeParameters?.flushInformative();
-      codeLength = null;
-      codeOffset = null;
-      nameOffset = null;
+      informativeId = null;
     } else if (kind == idl.LinkedNodeKind.functionTypedFormalParameter) {
       actualType?.flushInformative();
       normalFormalParameter_metadata?.forEach((b) => b.flushInformative());
       functionTypedFormalParameter_formalParameters?.flushInformative();
       functionTypedFormalParameter_returnType?.flushInformative();
       functionTypedFormalParameter_typeParameters?.flushInformative();
-      codeLength = null;
-      codeOffset = null;
-      nameOffset = null;
-      normalFormalParameter_comment = null;
+      informativeId = null;
     } else if (kind == idl.LinkedNodeKind.genericFunctionType) {
       actualReturnType?.flushInformative();
       genericFunctionType_typeParameters?.flushInformative();
@@ -9249,13 +8971,10 @@
       genericFunctionType_formalParameters?.flushInformative();
       genericFunctionType_type?.flushInformative();
     } else if (kind == idl.LinkedNodeKind.genericTypeAlias) {
-      annotatedNode_comment = null;
       annotatedNode_metadata?.forEach((b) => b.flushInformative());
       genericTypeAlias_typeParameters?.flushInformative();
       genericTypeAlias_functionType?.flushInformative();
-      codeLength = null;
-      codeOffset = null;
-      nameOffset = null;
+      informativeId = null;
     } else if (kind == idl.LinkedNodeKind.hideCombinator) {
     } else if (kind == idl.LinkedNodeKind.ifElement) {
       ifMixin_condition?.flushInformative();
@@ -9269,10 +8988,9 @@
       implementsClause_interfaces?.forEach((b) => b.flushInformative());
     } else if (kind == idl.LinkedNodeKind.importDirective) {
       namespaceDirective_combinators?.forEach((b) => b.flushInformative());
-      annotatedNode_comment = null;
       annotatedNode_metadata?.forEach((b) => b.flushInformative());
       namespaceDirective_configurations?.forEach((b) => b.flushInformative());
-      nameOffset = null;
+      informativeId = null;
       uriBasedDirective_uri?.flushInformative();
     } else if (kind == idl.LinkedNodeKind.indexExpression) {
       indexExpression_index?.flushInformative();
@@ -9298,9 +9016,9 @@
       labeledStatement_labels?.forEach((b) => b.flushInformative());
       labeledStatement_statement?.flushInformative();
     } else if (kind == idl.LinkedNodeKind.libraryDirective) {
-      annotatedNode_comment = null;
       annotatedNode_metadata?.forEach((b) => b.flushInformative());
       libraryDirective_name?.flushInformative();
+      informativeId = null;
     } else if (kind == idl.LinkedNodeKind.libraryIdentifier) {
       libraryIdentifier_components?.forEach((b) => b.flushInformative());
     } else if (kind == idl.LinkedNodeKind.listLiteral) {
@@ -9312,15 +9030,12 @@
       mapLiteralEntry_value?.flushInformative();
     } else if (kind == idl.LinkedNodeKind.methodDeclaration) {
       actualReturnType?.flushInformative();
-      annotatedNode_comment = null;
       annotatedNode_metadata?.forEach((b) => b.flushInformative());
       methodDeclaration_body?.flushInformative();
       methodDeclaration_formalParameters?.flushInformative();
       methodDeclaration_returnType?.flushInformative();
       methodDeclaration_typeParameters?.flushInformative();
-      codeLength = null;
-      codeOffset = null;
-      nameOffset = null;
+      informativeId = null;
     } else if (kind == idl.LinkedNodeKind.methodInvocation) {
       invocationExpression_invokeType?.flushInformative();
       methodInvocation_methodName?.flushInformative();
@@ -9329,15 +9044,12 @@
       expression_type?.flushInformative();
       invocationExpression_arguments?.flushInformative();
     } else if (kind == idl.LinkedNodeKind.mixinDeclaration) {
-      annotatedNode_comment = null;
       annotatedNode_metadata?.forEach((b) => b.flushInformative());
       mixinDeclaration_onClause?.flushInformative();
       classOrMixinDeclaration_implementsClause?.flushInformative();
       classOrMixinDeclaration_members?.forEach((b) => b.flushInformative());
       classOrMixinDeclaration_typeParameters?.flushInformative();
-      codeLength = null;
-      codeOffset = null;
-      nameOffset = null;
+      informativeId = null;
     } else if (kind == idl.LinkedNodeKind.namedExpression) {
       namedExpression_expression?.flushInformative();
       namedExpression_name?.flushInformative();
@@ -9353,15 +9065,14 @@
       parenthesizedExpression_expression?.flushInformative();
       expression_type?.flushInformative();
     } else if (kind == idl.LinkedNodeKind.partDirective) {
-      annotatedNode_comment = null;
       annotatedNode_metadata?.forEach((b) => b.flushInformative());
-      nameOffset = null;
+      informativeId = null;
       uriBasedDirective_uri?.flushInformative();
     } else if (kind == idl.LinkedNodeKind.partOfDirective) {
-      annotatedNode_comment = null;
       annotatedNode_metadata?.forEach((b) => b.flushInformative());
       partOfDirective_libraryName?.flushInformative();
       partOfDirective_uri?.flushInformative();
+      informativeId = null;
     } else if (kind == idl.LinkedNodeKind.postfixExpression) {
       postfixExpression_operand?.flushInformative();
       postfixExpression_elementType?.flushInformative();
@@ -9395,10 +9106,7 @@
       actualType?.flushInformative();
       normalFormalParameter_metadata?.forEach((b) => b.flushInformative());
       simpleFormalParameter_type?.flushInformative();
-      codeLength = null;
-      codeOffset = null;
-      nameOffset = null;
-      normalFormalParameter_comment = null;
+      informativeId = null;
       topLevelTypeInferenceError?.flushInformative();
     } else if (kind == idl.LinkedNodeKind.simpleIdentifier) {
       simpleIdentifier_elementType?.flushInformative();
@@ -9432,9 +9140,9 @@
       throwExpression_expression?.flushInformative();
       expression_type?.flushInformative();
     } else if (kind == idl.LinkedNodeKind.topLevelVariableDeclaration) {
-      annotatedNode_comment = null;
       annotatedNode_metadata?.forEach((b) => b.flushInformative());
       topLevelVariableDeclaration_variableList?.flushInformative();
+      informativeId = null;
     } else if (kind == idl.LinkedNodeKind.tryStatement) {
       tryStatement_catchClauses?.forEach((b) => b.flushInformative());
       tryStatement_body?.flushInformative();
@@ -9446,29 +9154,23 @@
       typeName_name?.flushInformative();
       typeName_type?.flushInformative();
     } else if (kind == idl.LinkedNodeKind.typeParameter) {
-      annotatedNode_comment = null;
       annotatedNode_metadata?.forEach((b) => b.flushInformative());
       typeParameter_bound?.flushInformative();
       typeParameter_defaultType?.flushInformative();
-      codeLength = null;
-      codeOffset = null;
-      nameOffset = null;
+      informativeId = null;
     } else if (kind == idl.LinkedNodeKind.typeParameterList) {
       typeParameterList_typeParameters?.forEach((b) => b.flushInformative());
     } else if (kind == idl.LinkedNodeKind.variableDeclaration) {
       actualType?.flushInformative();
-      annotatedNode_comment = null;
       annotatedNode_metadata?.forEach((b) => b.flushInformative());
       variableDeclaration_initializer?.flushInformative();
-      codeLength = null;
-      codeOffset = null;
-      nameOffset = null;
+      informativeId = null;
       topLevelTypeInferenceError?.flushInformative();
     } else if (kind == idl.LinkedNodeKind.variableDeclarationList) {
       variableDeclarationList_variables?.forEach((b) => b.flushInformative());
-      annotatedNode_comment = null;
       annotatedNode_metadata?.forEach((b) => b.flushInformative());
       variableDeclarationList_type?.flushInformative();
+      informativeId = null;
     } else if (kind == idl.LinkedNodeKind.variableDeclarationStatement) {
       variableDeclarationStatement_variables?.flushInformative();
     } else if (kind == idl.LinkedNodeKind.whileStatement) {
@@ -9669,6 +9371,8 @@
       this.classDeclaration_withClause?.collectApiSignature(signature);
       signature.addBool(this.classDeclaration_nativeClause != null);
       this.classDeclaration_nativeClause?.collectApiSignature(signature);
+      signature.addBool(this.unused11 != null);
+      this.unused11?.collectApiSignature(signature);
       signature.addBool(this.classOrMixinDeclaration_implementsClause != null);
       this
           .classOrMixinDeclaration_implementsClause
@@ -10764,10 +10468,10 @@
       signature.addBool(this.spreadElement_expression != null);
       this.spreadElement_expression?.collectApiSignature(signature);
       signature.addInt(this.flags ?? 0);
-      signature.addString(this.name ?? '');
       signature.addInt(this.spreadElement_spreadOperator == null
           ? 0
           : this.spreadElement_spreadOperator.index);
+      signature.addString(this.name ?? '');
     } else if (kind == idl.LinkedNodeKind.stringInterpolation) {
       signature.addInt(this.kind == null ? 0 : this.kind.index);
       if (this.stringInterpolation_elements == null) {
@@ -11055,7 +10759,6 @@
   fb.Offset finish(fb.Builder fbBuilder) {
     fb.Offset offset_variantField_24;
     fb.Offset offset_variantField_2;
-    fb.Offset offset_variantField_11;
     fb.Offset offset_variantField_4;
     fb.Offset offset_variantField_6;
     fb.Offset offset_variantField_7;
@@ -11065,17 +10768,18 @@
     fb.Offset offset_variantField_12;
     fb.Offset offset_variantField_5;
     fb.Offset offset_variantField_13;
-    fb.Offset offset_variantField_35;
+    fb.Offset offset_variantField_33;
     fb.Offset offset_variantField_3;
     fb.Offset offset_variantField_10;
     fb.Offset offset_variantField_25;
     fb.Offset offset_variantField_1;
     fb.Offset offset_variantField_30;
     fb.Offset offset_variantField_14;
-    fb.Offset offset_variantField_36;
+    fb.Offset offset_variantField_34;
     fb.Offset offset_name;
     fb.Offset offset_variantField_20;
-    fb.Offset offset_variantField_34;
+    fb.Offset offset_variantField_32;
+    fb.Offset offset_variantField_11;
     fb.Offset offset_variantField_22;
     if (_variantField_24 != null) {
       offset_variantField_24 = _variantField_24.finish(fbBuilder);
@@ -11084,9 +10788,6 @@
       offset_variantField_2 = fbBuilder
           .writeList(_variantField_2.map((b) => b.finish(fbBuilder)).toList());
     }
-    if (_variantField_11 != null) {
-      offset_variantField_11 = _variantField_11.finish(fbBuilder);
-    }
     if (!(_variantField_4 == null || _variantField_4.isEmpty)) {
       offset_variantField_4 = fbBuilder
           .writeList(_variantField_4.map((b) => b.finish(fbBuilder)).toList());
@@ -11116,9 +10817,9 @@
     if (_variantField_13 != null) {
       offset_variantField_13 = _variantField_13.finish(fbBuilder);
     }
-    if (!(_variantField_35 == null || _variantField_35.isEmpty)) {
-      offset_variantField_35 = fbBuilder.writeList(
-          _variantField_35.map((b) => fbBuilder.writeString(b)).toList());
+    if (!(_variantField_33 == null || _variantField_33.isEmpty)) {
+      offset_variantField_33 = fbBuilder.writeList(
+          _variantField_33.map((b) => fbBuilder.writeString(b)).toList());
     }
     if (!(_variantField_3 == null || _variantField_3.isEmpty)) {
       offset_variantField_3 = fbBuilder
@@ -11139,9 +10840,9 @@
     if (_variantField_14 != null) {
       offset_variantField_14 = _variantField_14.finish(fbBuilder);
     }
-    if (!(_variantField_36 == null || _variantField_36.isEmpty)) {
-      offset_variantField_36 = fbBuilder.writeList(
-          _variantField_36.map((b) => fbBuilder.writeString(b)).toList());
+    if (!(_variantField_34 == null || _variantField_34.isEmpty)) {
+      offset_variantField_34 = fbBuilder.writeList(
+          _variantField_34.map((b) => fbBuilder.writeString(b)).toList());
     }
     if (_name != null) {
       offset_name = fbBuilder.writeString(_name);
@@ -11149,8 +10850,11 @@
     if (_variantField_20 != null) {
       offset_variantField_20 = fbBuilder.writeString(_variantField_20);
     }
-    if (_variantField_34 != null) {
-      offset_variantField_34 = _variantField_34.finish(fbBuilder);
+    if (_variantField_32 != null) {
+      offset_variantField_32 = _variantField_32.finish(fbBuilder);
+    }
+    if (_variantField_11 != null) {
+      offset_variantField_11 = _variantField_11.finish(fbBuilder);
     }
     if (_variantField_22 != null) {
       offset_variantField_22 = fbBuilder.writeString(_variantField_22);
@@ -11162,9 +10866,6 @@
     if (offset_variantField_2 != null) {
       fbBuilder.addOffset(2, offset_variantField_2);
     }
-    if (offset_variantField_11 != null) {
-      fbBuilder.addOffset(11, offset_variantField_11);
-    }
     if (offset_variantField_4 != null) {
       fbBuilder.addOffset(4, offset_variantField_4);
     }
@@ -11205,14 +10906,8 @@
     if (offset_variantField_13 != null) {
       fbBuilder.addOffset(13, offset_variantField_13);
     }
-    if (_variantField_33 != null && _variantField_33 != 0) {
-      fbBuilder.addUint32(33, _variantField_33);
-    }
-    if (_variantField_32 != null && _variantField_32 != 0) {
-      fbBuilder.addUint32(32, _variantField_32);
-    }
-    if (offset_variantField_35 != null) {
-      fbBuilder.addOffset(35, offset_variantField_35);
+    if (offset_variantField_33 != null) {
+      fbBuilder.addOffset(33, offset_variantField_33);
     }
     if (_variantField_29 != null &&
         _variantField_29 != idl.LinkedNodeCommentType.block) {
@@ -11221,9 +10916,6 @@
     if (offset_variantField_3 != null) {
       fbBuilder.addOffset(3, offset_variantField_3);
     }
-    if (_variantField_19 != null && _variantField_19 != 0) {
-      fbBuilder.addUint32(19, _variantField_19);
-    }
     if (offset_variantField_10 != null) {
       fbBuilder.addOffset(10, offset_variantField_10);
     }
@@ -11244,6 +10936,9 @@
     if (offset_variantField_1 != null) {
       fbBuilder.addOffset(1, offset_variantField_1);
     }
+    if (_variantField_36 != null && _variantField_36 != 0) {
+      fbBuilder.addUint32(36, _variantField_36);
+    }
     if (_variantField_16 != null && _variantField_16 != 0) {
       fbBuilder.addUint32(16, _variantField_16);
     }
@@ -11256,8 +10951,8 @@
     if (_kind != null && _kind != idl.LinkedNodeKind.adjacentStrings) {
       fbBuilder.addUint8(0, _kind.index);
     }
-    if (offset_variantField_36 != null) {
-      fbBuilder.addOffset(36, offset_variantField_36);
+    if (offset_variantField_34 != null) {
+      fbBuilder.addOffset(34, offset_variantField_34);
     }
     if (offset_name != null) {
       fbBuilder.addOffset(37, offset_name);
@@ -11268,16 +10963,22 @@
     if (_variantField_31 == true) {
       fbBuilder.addBool(31, true);
     }
-    if (_variantField_38 != null &&
-        _variantField_38 != idl.UnlinkedTokenType.NOTHING) {
-      fbBuilder.addUint8(38, _variantField_38.index);
+    if (_variantField_35 != null &&
+        _variantField_35 != idl.UnlinkedTokenType.NOTHING) {
+      fbBuilder.addUint8(35, _variantField_35.index);
     }
-    if (offset_variantField_34 != null) {
-      fbBuilder.addOffset(34, offset_variantField_34);
+    if (offset_variantField_32 != null) {
+      fbBuilder.addOffset(32, offset_variantField_32);
+    }
+    if (offset_variantField_11 != null) {
+      fbBuilder.addOffset(11, offset_variantField_11);
     }
     if (offset_variantField_22 != null) {
       fbBuilder.addOffset(22, offset_variantField_22);
     }
+    if (_variantField_19 != null && _variantField_19 != 0) {
+      fbBuilder.addUint32(19, _variantField_19);
+    }
     return fbBuilder.endTable();
   }
 }
@@ -11300,7 +11001,6 @@
 
   idl.LinkedNodeType _variantField_24;
   List<idl.LinkedNode> _variantField_2;
-  idl.LinkedNode _variantField_11;
   List<idl.LinkedNode> _variantField_4;
   idl.LinkedNode _variantField_6;
   idl.LinkedNode _variantField_7;
@@ -11314,29 +11014,29 @@
   idl.LinkedNode _variantField_12;
   List<idl.LinkedNode> _variantField_5;
   idl.LinkedNode _variantField_13;
-  int _variantField_33;
-  int _variantField_32;
-  List<String> _variantField_35;
+  List<String> _variantField_33;
   idl.LinkedNodeCommentType _variantField_29;
   List<idl.LinkedNode> _variantField_3;
-  int _variantField_19;
   idl.LinkedNode _variantField_10;
   idl.LinkedNodeFormalParameterKind _variantField_26;
   double _variantField_21;
   idl.LinkedNodeType _variantField_25;
   int _flags;
   String _variantField_1;
+  int _variantField_36;
   int _variantField_16;
   String _variantField_30;
   idl.LinkedNode _variantField_14;
   idl.LinkedNodeKind _kind;
-  List<String> _variantField_36;
+  List<String> _variantField_34;
   String _name;
   String _variantField_20;
   bool _variantField_31;
-  idl.UnlinkedTokenType _variantField_38;
-  idl.TopLevelInferenceError _variantField_34;
+  idl.UnlinkedTokenType _variantField_35;
+  idl.TopLevelInferenceError _variantField_32;
+  idl.LinkedNode _variantField_11;
   String _variantField_22;
+  int _variantField_19;
 
   @override
   idl.LinkedNodeType get actualReturnType {
@@ -11606,34 +11306,6 @@
   }
 
   @override
-  idl.LinkedNode get annotatedNode_comment {
-    assert(kind == idl.LinkedNodeKind.classDeclaration ||
-        kind == idl.LinkedNodeKind.classTypeAlias ||
-        kind == idl.LinkedNodeKind.constructorDeclaration ||
-        kind == idl.LinkedNodeKind.declaredIdentifier ||
-        kind == idl.LinkedNodeKind.enumDeclaration ||
-        kind == idl.LinkedNodeKind.enumConstantDeclaration ||
-        kind == idl.LinkedNodeKind.exportDirective ||
-        kind == idl.LinkedNodeKind.fieldDeclaration ||
-        kind == idl.LinkedNodeKind.functionDeclaration ||
-        kind == idl.LinkedNodeKind.functionTypeAlias ||
-        kind == idl.LinkedNodeKind.genericTypeAlias ||
-        kind == idl.LinkedNodeKind.importDirective ||
-        kind == idl.LinkedNodeKind.libraryDirective ||
-        kind == idl.LinkedNodeKind.methodDeclaration ||
-        kind == idl.LinkedNodeKind.mixinDeclaration ||
-        kind == idl.LinkedNodeKind.partDirective ||
-        kind == idl.LinkedNodeKind.partOfDirective ||
-        kind == idl.LinkedNodeKind.topLevelVariableDeclaration ||
-        kind == idl.LinkedNodeKind.typeParameter ||
-        kind == idl.LinkedNodeKind.variableDeclaration ||
-        kind == idl.LinkedNodeKind.variableDeclarationList);
-    _variantField_11 ??=
-        const _LinkedNodeReader().vTableGet(_bc, _bcOffset, 11, null);
-    return _variantField_11;
-  }
-
-  @override
   List<idl.LinkedNode> get annotatedNode_metadata {
     assert(kind == idl.LinkedNodeKind.classDeclaration ||
         kind == idl.LinkedNodeKind.classTypeAlias ||
@@ -12664,14 +12336,6 @@
   }
 
   @override
-  int get constructorDeclaration_returnTypeOffset {
-    assert(kind == idl.LinkedNodeKind.constructorDeclaration);
-    _variantField_17 ??=
-        const fb.Uint32Reader().vTableGet(_bc, _bcOffset, 17, 0);
-    return _variantField_17;
-  }
-
-  @override
   int get genericFunctionType_id {
     assert(kind == idl.LinkedNodeKind.genericFunctionType);
     _variantField_17 ??=
@@ -13171,57 +12835,11 @@
   }
 
   @override
-  int get codeLength {
-    assert(kind == idl.LinkedNodeKind.classDeclaration ||
-        kind == idl.LinkedNodeKind.classTypeAlias ||
-        kind == idl.LinkedNodeKind.compilationUnit ||
-        kind == idl.LinkedNodeKind.constructorDeclaration ||
-        kind == idl.LinkedNodeKind.defaultFormalParameter ||
-        kind == idl.LinkedNodeKind.enumDeclaration ||
-        kind == idl.LinkedNodeKind.fieldFormalParameter ||
-        kind == idl.LinkedNodeKind.functionDeclaration ||
-        kind == idl.LinkedNodeKind.functionTypeAlias ||
-        kind == idl.LinkedNodeKind.functionTypedFormalParameter ||
-        kind == idl.LinkedNodeKind.genericTypeAlias ||
-        kind == idl.LinkedNodeKind.methodDeclaration ||
-        kind == idl.LinkedNodeKind.mixinDeclaration ||
-        kind == idl.LinkedNodeKind.simpleFormalParameter ||
-        kind == idl.LinkedNodeKind.typeParameter ||
-        kind == idl.LinkedNodeKind.variableDeclaration);
-    _variantField_33 ??=
-        const fb.Uint32Reader().vTableGet(_bc, _bcOffset, 33, 0);
-    return _variantField_33;
-  }
-
-  @override
-  int get codeOffset {
-    assert(kind == idl.LinkedNodeKind.classDeclaration ||
-        kind == idl.LinkedNodeKind.classTypeAlias ||
-        kind == idl.LinkedNodeKind.compilationUnit ||
-        kind == idl.LinkedNodeKind.constructorDeclaration ||
-        kind == idl.LinkedNodeKind.defaultFormalParameter ||
-        kind == idl.LinkedNodeKind.enumDeclaration ||
-        kind == idl.LinkedNodeKind.fieldFormalParameter ||
-        kind == idl.LinkedNodeKind.functionDeclaration ||
-        kind == idl.LinkedNodeKind.functionTypeAlias ||
-        kind == idl.LinkedNodeKind.functionTypedFormalParameter ||
-        kind == idl.LinkedNodeKind.genericTypeAlias ||
-        kind == idl.LinkedNodeKind.methodDeclaration ||
-        kind == idl.LinkedNodeKind.mixinDeclaration ||
-        kind == idl.LinkedNodeKind.simpleFormalParameter ||
-        kind == idl.LinkedNodeKind.typeParameter ||
-        kind == idl.LinkedNodeKind.variableDeclaration);
-    _variantField_32 ??=
-        const fb.Uint32Reader().vTableGet(_bc, _bcOffset, 32, 0);
-    return _variantField_32;
-  }
-
-  @override
   List<String> get comment_tokens {
     assert(kind == idl.LinkedNodeKind.comment);
-    _variantField_35 ??= const fb.ListReader<String>(const fb.StringReader())
-        .vTableGet(_bc, _bcOffset, 35, const <String>[]);
-    return _variantField_35;
+    _variantField_33 ??= const fb.ListReader<String>(const fb.StringReader())
+        .vTableGet(_bc, _bcOffset, 33, const <String>[]);
+    return _variantField_33;
   }
 
   @override
@@ -13280,24 +12898,6 @@
   }
 
   @override
-  int get constructorDeclaration_periodOffset {
-    assert(kind == idl.LinkedNodeKind.constructorDeclaration);
-    _variantField_19 ??=
-        const fb.Uint32Reader().vTableGet(_bc, _bcOffset, 19, 0);
-    return _variantField_19;
-  }
-
-  @override
-  int get uriBasedDirective_uriElement {
-    assert(kind == idl.LinkedNodeKind.exportDirective ||
-        kind == idl.LinkedNodeKind.importDirective ||
-        kind == idl.LinkedNodeKind.partDirective);
-    _variantField_19 ??=
-        const fb.Uint32Reader().vTableGet(_bc, _bcOffset, 19, 0);
-    return _variantField_19;
-  }
-
-  @override
   idl.LinkedNode get constructorDeclaration_returnType {
     assert(kind == idl.LinkedNodeKind.constructorDeclaration);
     _variantField_10 ??=
@@ -13378,33 +12978,41 @@
   }
 
   @override
-  int get integerLiteral_value {
-    assert(kind == idl.LinkedNodeKind.integerLiteral);
-    _variantField_16 ??=
-        const fb.Uint32Reader().vTableGet(_bc, _bcOffset, 16, 0);
-    return _variantField_16;
-  }
-
-  @override
-  int get nameOffset {
+  int get informativeId {
     assert(kind == idl.LinkedNodeKind.classDeclaration ||
         kind == idl.LinkedNodeKind.classTypeAlias ||
+        kind == idl.LinkedNodeKind.compilationUnit ||
+        kind == idl.LinkedNodeKind.compilationUnit ||
         kind == idl.LinkedNodeKind.constructorDeclaration ||
+        kind == idl.LinkedNodeKind.defaultFormalParameter ||
         kind == idl.LinkedNodeKind.enumConstantDeclaration ||
         kind == idl.LinkedNodeKind.enumDeclaration ||
         kind == idl.LinkedNodeKind.exportDirective ||
+        kind == idl.LinkedNodeKind.fieldDeclaration ||
         kind == idl.LinkedNodeKind.fieldFormalParameter ||
         kind == idl.LinkedNodeKind.functionDeclaration ||
         kind == idl.LinkedNodeKind.functionTypedFormalParameter ||
         kind == idl.LinkedNodeKind.functionTypeAlias ||
         kind == idl.LinkedNodeKind.genericTypeAlias ||
         kind == idl.LinkedNodeKind.importDirective ||
+        kind == idl.LinkedNodeKind.libraryDirective ||
         kind == idl.LinkedNodeKind.methodDeclaration ||
         kind == idl.LinkedNodeKind.mixinDeclaration ||
         kind == idl.LinkedNodeKind.partDirective ||
+        kind == idl.LinkedNodeKind.partOfDirective ||
         kind == idl.LinkedNodeKind.simpleFormalParameter ||
+        kind == idl.LinkedNodeKind.topLevelVariableDeclaration ||
         kind == idl.LinkedNodeKind.typeParameter ||
-        kind == idl.LinkedNodeKind.variableDeclaration);
+        kind == idl.LinkedNodeKind.variableDeclaration ||
+        kind == idl.LinkedNodeKind.variableDeclarationList);
+    _variantField_36 ??=
+        const fb.Uint32Reader().vTableGet(_bc, _bcOffset, 36, 0);
+    return _variantField_36;
+  }
+
+  @override
+  int get integerLiteral_value {
+    assert(kind == idl.LinkedNodeKind.integerLiteral);
     _variantField_16 ??=
         const fb.Uint32Reader().vTableGet(_bc, _bcOffset, 16, 0);
     return _variantField_16;
@@ -13428,16 +13036,6 @@
   }
 
   @override
-  idl.LinkedNode get normalFormalParameter_comment {
-    assert(kind == idl.LinkedNodeKind.fieldFormalParameter ||
-        kind == idl.LinkedNodeKind.functionTypedFormalParameter ||
-        kind == idl.LinkedNodeKind.simpleFormalParameter);
-    _variantField_14 ??=
-        const _LinkedNodeReader().vTableGet(_bc, _bcOffset, 14, null);
-    return _variantField_14;
-  }
-
-  @override
   idl.LinkedNode get uriBasedDirective_uri {
     assert(kind == idl.LinkedNodeKind.exportDirective ||
         kind == idl.LinkedNodeKind.importDirective ||
@@ -13457,9 +13055,9 @@
   @override
   List<String> get mixinDeclaration_superInvokedNames {
     assert(kind == idl.LinkedNodeKind.mixinDeclaration);
-    _variantField_36 ??= const fb.ListReader<String>(const fb.StringReader())
-        .vTableGet(_bc, _bcOffset, 36, const <String>[]);
-    return _variantField_36;
+    _variantField_34 ??= const fb.ListReader<String>(const fb.StringReader())
+        .vTableGet(_bc, _bcOffset, 34, const <String>[]);
+    return _variantField_34;
   }
 
   @override
@@ -13467,9 +13065,9 @@
     assert(kind == idl.LinkedNodeKind.hideCombinator ||
         kind == idl.LinkedNodeKind.showCombinator ||
         kind == idl.LinkedNodeKind.symbolLiteral);
-    _variantField_36 ??= const fb.ListReader<String>(const fb.StringReader())
-        .vTableGet(_bc, _bcOffset, 36, const <String>[]);
-    return _variantField_36;
+    _variantField_34 ??= const fb.ListReader<String>(const fb.StringReader())
+        .vTableGet(_bc, _bcOffset, 34, const <String>[]);
+    return _variantField_34;
   }
 
   @override
@@ -13510,18 +13108,26 @@
   @override
   idl.UnlinkedTokenType get spreadElement_spreadOperator {
     assert(kind == idl.LinkedNodeKind.spreadElement);
-    _variantField_38 ??= const _UnlinkedTokenTypeReader()
-        .vTableGet(_bc, _bcOffset, 38, idl.UnlinkedTokenType.NOTHING);
-    return _variantField_38;
+    _variantField_35 ??= const _UnlinkedTokenTypeReader()
+        .vTableGet(_bc, _bcOffset, 35, idl.UnlinkedTokenType.NOTHING);
+    return _variantField_35;
   }
 
   @override
   idl.TopLevelInferenceError get topLevelTypeInferenceError {
     assert(kind == idl.LinkedNodeKind.simpleFormalParameter ||
         kind == idl.LinkedNodeKind.variableDeclaration);
-    _variantField_34 ??= const _TopLevelInferenceErrorReader()
-        .vTableGet(_bc, _bcOffset, 34, null);
-    return _variantField_34;
+    _variantField_32 ??= const _TopLevelInferenceErrorReader()
+        .vTableGet(_bc, _bcOffset, 32, null);
+    return _variantField_32;
+  }
+
+  @override
+  idl.LinkedNode get unused11 {
+    assert(kind == idl.LinkedNodeKind.classDeclaration);
+    _variantField_11 ??=
+        const _LinkedNodeReader().vTableGet(_bc, _bcOffset, 11, null);
+    return _variantField_11;
   }
 
   @override
@@ -13533,6 +13139,16 @@
         const fb.StringReader().vTableGet(_bc, _bcOffset, 22, '');
     return _variantField_22;
   }
+
+  @override
+  int get uriBasedDirective_uriElement {
+    assert(kind == idl.LinkedNodeKind.exportDirective ||
+        kind == idl.LinkedNodeKind.importDirective ||
+        kind == idl.LinkedNodeKind.partDirective);
+    _variantField_19 ??=
+        const fb.Uint32Reader().vTableGet(_bc, _bcOffset, 19, 0);
+    return _variantField_19;
+  }
 }
 
 abstract class _LinkedNodeMixin implements idl.LinkedNode {
@@ -13676,8 +13292,6 @@
             catchClause_stackTraceParameter.toJson();
     }
     if (kind == idl.LinkedNodeKind.classDeclaration) {
-      if (annotatedNode_comment != null)
-        _result["annotatedNode_comment"] = annotatedNode_comment.toJson();
       if (annotatedNode_metadata.isNotEmpty)
         _result["annotatedNode_metadata"] =
             annotatedNode_metadata.map((_value) => _value.toJson()).toList();
@@ -13704,16 +13318,13 @@
       if (classOrMixinDeclaration_typeParameters != null)
         _result["classOrMixinDeclaration_typeParameters"] =
             classOrMixinDeclaration_typeParameters.toJson();
-      if (codeLength != 0) _result["codeLength"] = codeLength;
-      if (codeOffset != 0) _result["codeOffset"] = codeOffset;
-      if (nameOffset != 0) _result["nameOffset"] = nameOffset;
+      if (informativeId != 0) _result["informativeId"] = informativeId;
       if (simplyBoundable_isSimplyBounded != false)
         _result["simplyBoundable_isSimplyBounded"] =
             simplyBoundable_isSimplyBounded;
+      if (unused11 != null) _result["unused11"] = unused11.toJson();
     }
     if (kind == idl.LinkedNodeKind.classTypeAlias) {
-      if (annotatedNode_comment != null)
-        _result["annotatedNode_comment"] = annotatedNode_comment.toJson();
       if (annotatedNode_metadata.isNotEmpty)
         _result["annotatedNode_metadata"] =
             annotatedNode_metadata.map((_value) => _value.toJson()).toList();
@@ -13729,9 +13340,7 @@
       if (classTypeAlias_implementsClause != null)
         _result["classTypeAlias_implementsClause"] =
             classTypeAlias_implementsClause.toJson();
-      if (codeLength != 0) _result["codeLength"] = codeLength;
-      if (codeOffset != 0) _result["codeOffset"] = codeOffset;
-      if (nameOffset != 0) _result["nameOffset"] = nameOffset;
+      if (informativeId != 0) _result["informativeId"] = informativeId;
       if (simplyBoundable_isSimplyBounded != false)
         _result["simplyBoundable_isSimplyBounded"] =
             simplyBoundable_isSimplyBounded;
@@ -13757,12 +13366,11 @@
       if (compilationUnit_scriptTag != null)
         _result["compilationUnit_scriptTag"] =
             compilationUnit_scriptTag.toJson();
-      if (codeLength != 0) _result["codeLength"] = codeLength;
-      if (codeOffset != 0) _result["codeOffset"] = codeOffset;
       if (compilationUnit_directives.isNotEmpty)
         _result["compilationUnit_directives"] = compilationUnit_directives
             .map((_value) => _value.toJson())
             .toList();
+      if (informativeId != 0) _result["informativeId"] = informativeId;
     }
     if (kind == idl.LinkedNodeKind.conditionalExpression) {
       if (conditionalExpression_condition != null)
@@ -13791,32 +13399,22 @@
             constructorDeclaration_initializers
                 .map((_value) => _value.toJson())
                 .toList();
-      if (annotatedNode_comment != null)
-        _result["annotatedNode_comment"] = annotatedNode_comment.toJson();
       if (annotatedNode_metadata.isNotEmpty)
         _result["annotatedNode_metadata"] =
             annotatedNode_metadata.map((_value) => _value.toJson()).toList();
       if (constructorDeclaration_body != null)
         _result["constructorDeclaration_body"] =
             constructorDeclaration_body.toJson();
-      if (constructorDeclaration_returnTypeOffset != 0)
-        _result["constructorDeclaration_returnTypeOffset"] =
-            constructorDeclaration_returnTypeOffset;
       if (constructorDeclaration_parameters != null)
         _result["constructorDeclaration_parameters"] =
             constructorDeclaration_parameters.toJson();
       if (constructorDeclaration_redirectedConstructor != null)
         _result["constructorDeclaration_redirectedConstructor"] =
             constructorDeclaration_redirectedConstructor.toJson();
-      if (codeLength != 0) _result["codeLength"] = codeLength;
-      if (codeOffset != 0) _result["codeOffset"] = codeOffset;
-      if (constructorDeclaration_periodOffset != 0)
-        _result["constructorDeclaration_periodOffset"] =
-            constructorDeclaration_periodOffset;
       if (constructorDeclaration_returnType != null)
         _result["constructorDeclaration_returnType"] =
             constructorDeclaration_returnType.toJson();
-      if (nameOffset != 0) _result["nameOffset"] = nameOffset;
+      if (informativeId != 0) _result["informativeId"] = informativeId;
     }
     if (kind == idl.LinkedNodeKind.constructorFieldInitializer) {
       if (constructorFieldInitializer_expression != null)
@@ -13842,8 +13440,6 @@
         _result["continueStatement_label"] = continueStatement_label.toJson();
     }
     if (kind == idl.LinkedNodeKind.declaredIdentifier) {
-      if (annotatedNode_comment != null)
-        _result["annotatedNode_comment"] = annotatedNode_comment.toJson();
       if (annotatedNode_metadata.isNotEmpty)
         _result["annotatedNode_metadata"] =
             annotatedNode_metadata.map((_value) => _value.toJson()).toList();
@@ -13860,12 +13456,11 @@
       if (defaultFormalParameter_parameter != null)
         _result["defaultFormalParameter_parameter"] =
             defaultFormalParameter_parameter.toJson();
-      if (codeLength != 0) _result["codeLength"] = codeLength;
-      if (codeOffset != 0) _result["codeOffset"] = codeOffset;
       if (defaultFormalParameter_kind !=
           idl.LinkedNodeFormalParameterKind.requiredPositional)
         _result["defaultFormalParameter_kind"] =
             defaultFormalParameter_kind.toString().split('.')[1];
+      if (informativeId != 0) _result["informativeId"] = informativeId;
     }
     if (kind == idl.LinkedNodeKind.doStatement) {
       if (doStatement_body != null)
@@ -13893,25 +13488,19 @@
         _result["emptyStatement_fake"] = emptyStatement_fake;
     }
     if (kind == idl.LinkedNodeKind.enumConstantDeclaration) {
-      if (annotatedNode_comment != null)
-        _result["annotatedNode_comment"] = annotatedNode_comment.toJson();
       if (annotatedNode_metadata.isNotEmpty)
         _result["annotatedNode_metadata"] =
             annotatedNode_metadata.map((_value) => _value.toJson()).toList();
-      if (nameOffset != 0) _result["nameOffset"] = nameOffset;
+      if (informativeId != 0) _result["informativeId"] = informativeId;
     }
     if (kind == idl.LinkedNodeKind.enumDeclaration) {
       if (enumDeclaration_constants.isNotEmpty)
         _result["enumDeclaration_constants"] =
             enumDeclaration_constants.map((_value) => _value.toJson()).toList();
-      if (annotatedNode_comment != null)
-        _result["annotatedNode_comment"] = annotatedNode_comment.toJson();
       if (annotatedNode_metadata.isNotEmpty)
         _result["annotatedNode_metadata"] =
             annotatedNode_metadata.map((_value) => _value.toJson()).toList();
-      if (codeLength != 0) _result["codeLength"] = codeLength;
-      if (codeOffset != 0) _result["codeOffset"] = codeOffset;
-      if (nameOffset != 0) _result["nameOffset"] = nameOffset;
+      if (informativeId != 0) _result["informativeId"] = informativeId;
     }
     if (kind == idl.LinkedNodeKind.exportDirective) {
       if (namespaceDirective_combinators.isNotEmpty)
@@ -13919,8 +13508,6 @@
             namespaceDirective_combinators
                 .map((_value) => _value.toJson())
                 .toList();
-      if (annotatedNode_comment != null)
-        _result["annotatedNode_comment"] = annotatedNode_comment.toJson();
       if (annotatedNode_metadata.isNotEmpty)
         _result["annotatedNode_metadata"] =
             annotatedNode_metadata.map((_value) => _value.toJson()).toList();
@@ -13929,9 +13516,7 @@
             namespaceDirective_configurations
                 .map((_value) => _value.toJson())
                 .toList();
-      if (uriBasedDirective_uriElement != 0)
-        _result["uriBasedDirective_uriElement"] = uriBasedDirective_uriElement;
-      if (nameOffset != 0) _result["nameOffset"] = nameOffset;
+      if (informativeId != 0) _result["informativeId"] = informativeId;
       if (uriBasedDirective_uri != null)
         _result["uriBasedDirective_uri"] = uriBasedDirective_uri.toJson();
       if (namespaceDirective_selectedUri != '')
@@ -13939,6 +13524,8 @@
             namespaceDirective_selectedUri;
       if (uriBasedDirective_uriContent != '')
         _result["uriBasedDirective_uriContent"] = uriBasedDirective_uriContent;
+      if (uriBasedDirective_uriElement != 0)
+        _result["uriBasedDirective_uriElement"] = uriBasedDirective_uriElement;
     }
     if (kind == idl.LinkedNodeKind.expressionFunctionBody) {
       if (expressionFunctionBody_expression != null)
@@ -13955,13 +13542,12 @@
         _result["extendsClause_superclass"] = extendsClause_superclass.toJson();
     }
     if (kind == idl.LinkedNodeKind.fieldDeclaration) {
-      if (annotatedNode_comment != null)
-        _result["annotatedNode_comment"] = annotatedNode_comment.toJson();
       if (annotatedNode_metadata.isNotEmpty)
         _result["annotatedNode_metadata"] =
             annotatedNode_metadata.map((_value) => _value.toJson()).toList();
       if (fieldDeclaration_fields != null)
         _result["fieldDeclaration_fields"] = fieldDeclaration_fields.toJson();
+      if (informativeId != 0) _result["informativeId"] = informativeId;
     }
     if (kind == idl.LinkedNodeKind.fieldFormalParameter) {
       if (actualType != null) _result["actualType"] = actualType.toJson();
@@ -13981,12 +13567,7 @@
             fieldFormalParameter_formalParameters.toJson();
       if (inheritsCovariant != false)
         _result["inheritsCovariant"] = inheritsCovariant;
-      if (codeLength != 0) _result["codeLength"] = codeLength;
-      if (codeOffset != 0) _result["codeOffset"] = codeOffset;
-      if (nameOffset != 0) _result["nameOffset"] = nameOffset;
-      if (normalFormalParameter_comment != null)
-        _result["normalFormalParameter_comment"] =
-            normalFormalParameter_comment.toJson();
+      if (informativeId != 0) _result["informativeId"] = informativeId;
     }
     if (kind == idl.LinkedNodeKind.forEachPartsWithDeclaration) {
       if (forEachParts_iterable != null)
@@ -14044,8 +13625,6 @@
     if (kind == idl.LinkedNodeKind.functionDeclaration) {
       if (actualReturnType != null)
         _result["actualReturnType"] = actualReturnType.toJson();
-      if (annotatedNode_comment != null)
-        _result["annotatedNode_comment"] = annotatedNode_comment.toJson();
       if (annotatedNode_metadata.isNotEmpty)
         _result["annotatedNode_metadata"] =
             annotatedNode_metadata.map((_value) => _value.toJson()).toList();
@@ -14055,9 +13634,7 @@
       if (functionDeclaration_returnType != null)
         _result["functionDeclaration_returnType"] =
             functionDeclaration_returnType.toJson();
-      if (codeLength != 0) _result["codeLength"] = codeLength;
-      if (codeOffset != 0) _result["codeOffset"] = codeOffset;
-      if (nameOffset != 0) _result["nameOffset"] = nameOffset;
+      if (informativeId != 0) _result["informativeId"] = informativeId;
     }
     if (kind == idl.LinkedNodeKind.functionDeclarationStatement) {
       if (functionDeclarationStatement_functionDeclaration != null)
@@ -14095,8 +13672,6 @@
     if (kind == idl.LinkedNodeKind.functionTypeAlias) {
       if (actualReturnType != null)
         _result["actualReturnType"] = actualReturnType.toJson();
-      if (annotatedNode_comment != null)
-        _result["annotatedNode_comment"] = annotatedNode_comment.toJson();
       if (annotatedNode_metadata.isNotEmpty)
         _result["annotatedNode_metadata"] =
             annotatedNode_metadata.map((_value) => _value.toJson()).toList();
@@ -14111,9 +13686,7 @@
             functionTypeAlias_typeParameters.toJson();
       if (typeAlias_hasSelfReference != false)
         _result["typeAlias_hasSelfReference"] = typeAlias_hasSelfReference;
-      if (codeLength != 0) _result["codeLength"] = codeLength;
-      if (codeOffset != 0) _result["codeOffset"] = codeOffset;
-      if (nameOffset != 0) _result["nameOffset"] = nameOffset;
+      if (informativeId != 0) _result["informativeId"] = informativeId;
       if (simplyBoundable_isSimplyBounded != false)
         _result["simplyBoundable_isSimplyBounded"] =
             simplyBoundable_isSimplyBounded;
@@ -14136,12 +13709,7 @@
             functionTypedFormalParameter_typeParameters.toJson();
       if (inheritsCovariant != false)
         _result["inheritsCovariant"] = inheritsCovariant;
-      if (codeLength != 0) _result["codeLength"] = codeLength;
-      if (codeOffset != 0) _result["codeOffset"] = codeOffset;
-      if (nameOffset != 0) _result["nameOffset"] = nameOffset;
-      if (normalFormalParameter_comment != null)
-        _result["normalFormalParameter_comment"] =
-            normalFormalParameter_comment.toJson();
+      if (informativeId != 0) _result["informativeId"] = informativeId;
     }
     if (kind == idl.LinkedNodeKind.genericFunctionType) {
       if (actualReturnType != null)
@@ -14161,8 +13729,6 @@
         _result["genericFunctionType_type"] = genericFunctionType_type.toJson();
     }
     if (kind == idl.LinkedNodeKind.genericTypeAlias) {
-      if (annotatedNode_comment != null)
-        _result["annotatedNode_comment"] = annotatedNode_comment.toJson();
       if (annotatedNode_metadata.isNotEmpty)
         _result["annotatedNode_metadata"] =
             annotatedNode_metadata.map((_value) => _value.toJson()).toList();
@@ -14174,9 +13740,7 @@
             genericTypeAlias_functionType.toJson();
       if (typeAlias_hasSelfReference != false)
         _result["typeAlias_hasSelfReference"] = typeAlias_hasSelfReference;
-      if (codeLength != 0) _result["codeLength"] = codeLength;
-      if (codeOffset != 0) _result["codeOffset"] = codeOffset;
-      if (nameOffset != 0) _result["nameOffset"] = nameOffset;
+      if (informativeId != 0) _result["informativeId"] = informativeId;
       if (simplyBoundable_isSimplyBounded != false)
         _result["simplyBoundable_isSimplyBounded"] =
             simplyBoundable_isSimplyBounded;
@@ -14214,8 +13778,6 @@
             namespaceDirective_combinators
                 .map((_value) => _value.toJson())
                 .toList();
-      if (annotatedNode_comment != null)
-        _result["annotatedNode_comment"] = annotatedNode_comment.toJson();
       if (annotatedNode_metadata.isNotEmpty)
         _result["annotatedNode_metadata"] =
             annotatedNode_metadata.map((_value) => _value.toJson()).toList();
@@ -14226,11 +13788,9 @@
             namespaceDirective_configurations
                 .map((_value) => _value.toJson())
                 .toList();
-      if (uriBasedDirective_uriElement != 0)
-        _result["uriBasedDirective_uriElement"] = uriBasedDirective_uriElement;
       if (importDirective_prefix != '')
         _result["importDirective_prefix"] = importDirective_prefix;
-      if (nameOffset != 0) _result["nameOffset"] = nameOffset;
+      if (informativeId != 0) _result["informativeId"] = informativeId;
       if (uriBasedDirective_uri != null)
         _result["uriBasedDirective_uri"] = uriBasedDirective_uri.toJson();
       if (namespaceDirective_selectedUri != '')
@@ -14238,6 +13798,8 @@
             namespaceDirective_selectedUri;
       if (uriBasedDirective_uriContent != '')
         _result["uriBasedDirective_uriContent"] = uriBasedDirective_uriContent;
+      if (uriBasedDirective_uriElement != 0)
+        _result["uriBasedDirective_uriElement"] = uriBasedDirective_uriElement;
     }
     if (kind == idl.LinkedNodeKind.indexExpression) {
       if (indexExpression_index != null)
@@ -14298,13 +13860,12 @@
             labeledStatement_statement.toJson();
     }
     if (kind == idl.LinkedNodeKind.libraryDirective) {
-      if (annotatedNode_comment != null)
-        _result["annotatedNode_comment"] = annotatedNode_comment.toJson();
       if (annotatedNode_metadata.isNotEmpty)
         _result["annotatedNode_metadata"] =
             annotatedNode_metadata.map((_value) => _value.toJson()).toList();
       if (libraryDirective_name != null)
         _result["libraryDirective_name"] = libraryDirective_name.toJson();
+      if (informativeId != 0) _result["informativeId"] = informativeId;
     }
     if (kind == idl.LinkedNodeKind.libraryIdentifier) {
       if (libraryIdentifier_components.isNotEmpty)
@@ -14332,8 +13893,6 @@
     if (kind == idl.LinkedNodeKind.methodDeclaration) {
       if (actualReturnType != null)
         _result["actualReturnType"] = actualReturnType.toJson();
-      if (annotatedNode_comment != null)
-        _result["annotatedNode_comment"] = annotatedNode_comment.toJson();
       if (annotatedNode_metadata.isNotEmpty)
         _result["annotatedNode_metadata"] =
             annotatedNode_metadata.map((_value) => _value.toJson()).toList();
@@ -14348,9 +13907,7 @@
       if (methodDeclaration_typeParameters != null)
         _result["methodDeclaration_typeParameters"] =
             methodDeclaration_typeParameters.toJson();
-      if (codeLength != 0) _result["codeLength"] = codeLength;
-      if (codeOffset != 0) _result["codeOffset"] = codeOffset;
-      if (nameOffset != 0) _result["nameOffset"] = nameOffset;
+      if (informativeId != 0) _result["informativeId"] = informativeId;
     }
     if (kind == idl.LinkedNodeKind.methodInvocation) {
       if (invocationExpression_invokeType != null)
@@ -14371,8 +13928,6 @@
             invocationExpression_arguments.toJson();
     }
     if (kind == idl.LinkedNodeKind.mixinDeclaration) {
-      if (annotatedNode_comment != null)
-        _result["annotatedNode_comment"] = annotatedNode_comment.toJson();
       if (annotatedNode_metadata.isNotEmpty)
         _result["annotatedNode_metadata"] =
             annotatedNode_metadata.map((_value) => _value.toJson()).toList();
@@ -14390,9 +13945,7 @@
       if (classOrMixinDeclaration_typeParameters != null)
         _result["classOrMixinDeclaration_typeParameters"] =
             classOrMixinDeclaration_typeParameters.toJson();
-      if (codeLength != 0) _result["codeLength"] = codeLength;
-      if (codeOffset != 0) _result["codeOffset"] = codeOffset;
-      if (nameOffset != 0) _result["nameOffset"] = nameOffset;
+      if (informativeId != 0) _result["informativeId"] = informativeId;
       if (mixinDeclaration_superInvokedNames.isNotEmpty)
         _result["mixinDeclaration_superInvokedNames"] =
             mixinDeclaration_superInvokedNames;
@@ -14436,22 +13989,18 @@
         _result["expression_type"] = expression_type.toJson();
     }
     if (kind == idl.LinkedNodeKind.partDirective) {
-      if (annotatedNode_comment != null)
-        _result["annotatedNode_comment"] = annotatedNode_comment.toJson();
       if (annotatedNode_metadata.isNotEmpty)
         _result["annotatedNode_metadata"] =
             annotatedNode_metadata.map((_value) => _value.toJson()).toList();
-      if (uriBasedDirective_uriElement != 0)
-        _result["uriBasedDirective_uriElement"] = uriBasedDirective_uriElement;
-      if (nameOffset != 0) _result["nameOffset"] = nameOffset;
+      if (informativeId != 0) _result["informativeId"] = informativeId;
       if (uriBasedDirective_uri != null)
         _result["uriBasedDirective_uri"] = uriBasedDirective_uri.toJson();
       if (uriBasedDirective_uriContent != '')
         _result["uriBasedDirective_uriContent"] = uriBasedDirective_uriContent;
+      if (uriBasedDirective_uriElement != 0)
+        _result["uriBasedDirective_uriElement"] = uriBasedDirective_uriElement;
     }
     if (kind == idl.LinkedNodeKind.partOfDirective) {
-      if (annotatedNode_comment != null)
-        _result["annotatedNode_comment"] = annotatedNode_comment.toJson();
       if (annotatedNode_metadata.isNotEmpty)
         _result["annotatedNode_metadata"] =
             annotatedNode_metadata.map((_value) => _value.toJson()).toList();
@@ -14460,6 +14009,7 @@
             partOfDirective_libraryName.toJson();
       if (partOfDirective_uri != null)
         _result["partOfDirective_uri"] = partOfDirective_uri.toJson();
+      if (informativeId != 0) _result["informativeId"] = informativeId;
     }
     if (kind == idl.LinkedNodeKind.postfixExpression) {
       if (postfixExpression_operand != null)
@@ -14561,12 +14111,7 @@
             simpleFormalParameter_type.toJson();
       if (inheritsCovariant != false)
         _result["inheritsCovariant"] = inheritsCovariant;
-      if (codeLength != 0) _result["codeLength"] = codeLength;
-      if (codeOffset != 0) _result["codeOffset"] = codeOffset;
-      if (nameOffset != 0) _result["nameOffset"] = nameOffset;
-      if (normalFormalParameter_comment != null)
-        _result["normalFormalParameter_comment"] =
-            normalFormalParameter_comment.toJson();
+      if (informativeId != 0) _result["informativeId"] = informativeId;
       if (topLevelTypeInferenceError != null)
         _result["topLevelTypeInferenceError"] =
             topLevelTypeInferenceError.toJson();
@@ -14658,14 +14203,13 @@
         _result["expression_type"] = expression_type.toJson();
     }
     if (kind == idl.LinkedNodeKind.topLevelVariableDeclaration) {
-      if (annotatedNode_comment != null)
-        _result["annotatedNode_comment"] = annotatedNode_comment.toJson();
       if (annotatedNode_metadata.isNotEmpty)
         _result["annotatedNode_metadata"] =
             annotatedNode_metadata.map((_value) => _value.toJson()).toList();
       if (topLevelVariableDeclaration_variableList != null)
         _result["topLevelVariableDeclaration_variableList"] =
             topLevelVariableDeclaration_variableList.toJson();
+      if (informativeId != 0) _result["informativeId"] = informativeId;
     }
     if (kind == idl.LinkedNodeKind.tryStatement) {
       if (tryStatement_catchClauses.isNotEmpty)
@@ -14693,8 +14237,6 @@
         _result["typeName_type"] = typeName_type.toJson();
     }
     if (kind == idl.LinkedNodeKind.typeParameter) {
-      if (annotatedNode_comment != null)
-        _result["annotatedNode_comment"] = annotatedNode_comment.toJson();
       if (annotatedNode_metadata.isNotEmpty)
         _result["annotatedNode_metadata"] =
             annotatedNode_metadata.map((_value) => _value.toJson()).toList();
@@ -14703,9 +14245,7 @@
       if (typeParameter_defaultType != null)
         _result["typeParameter_defaultType"] =
             typeParameter_defaultType.toJson();
-      if (codeLength != 0) _result["codeLength"] = codeLength;
-      if (codeOffset != 0) _result["codeOffset"] = codeOffset;
-      if (nameOffset != 0) _result["nameOffset"] = nameOffset;
+      if (informativeId != 0) _result["informativeId"] = informativeId;
     }
     if (kind == idl.LinkedNodeKind.typeParameterList) {
       if (typeParameterList_typeParameters.isNotEmpty)
@@ -14716,8 +14256,6 @@
     }
     if (kind == idl.LinkedNodeKind.variableDeclaration) {
       if (actualType != null) _result["actualType"] = actualType.toJson();
-      if (annotatedNode_comment != null)
-        _result["annotatedNode_comment"] = annotatedNode_comment.toJson();
       if (annotatedNode_metadata.isNotEmpty)
         _result["annotatedNode_metadata"] =
             annotatedNode_metadata.map((_value) => _value.toJson()).toList();
@@ -14726,9 +14264,7 @@
             variableDeclaration_initializer.toJson();
       if (inheritsCovariant != false)
         _result["inheritsCovariant"] = inheritsCovariant;
-      if (codeLength != 0) _result["codeLength"] = codeLength;
-      if (codeOffset != 0) _result["codeOffset"] = codeOffset;
-      if (nameOffset != 0) _result["nameOffset"] = nameOffset;
+      if (informativeId != 0) _result["informativeId"] = informativeId;
       if (topLevelTypeInferenceError != null)
         _result["topLevelTypeInferenceError"] =
             topLevelTypeInferenceError.toJson();
@@ -14739,14 +14275,13 @@
             variableDeclarationList_variables
                 .map((_value) => _value.toJson())
                 .toList();
-      if (annotatedNode_comment != null)
-        _result["annotatedNode_comment"] = annotatedNode_comment.toJson();
       if (annotatedNode_metadata.isNotEmpty)
         _result["annotatedNode_metadata"] =
             annotatedNode_metadata.map((_value) => _value.toJson()).toList();
       if (variableDeclarationList_type != null)
         _result["variableDeclarationList_type"] =
             variableDeclarationList_type.toJson();
+      if (informativeId != 0) _result["informativeId"] = informativeId;
     }
     if (kind == idl.LinkedNodeKind.variableDeclarationStatement) {
       if (variableDeclarationStatement_variables != null)
@@ -14922,7 +14457,6 @@
     }
     if (kind == idl.LinkedNodeKind.classDeclaration) {
       return {
-        "annotatedNode_comment": annotatedNode_comment,
         "annotatedNode_metadata": annotatedNode_metadata,
         "classDeclaration_extendsClause": classDeclaration_extendsClause,
         "classDeclaration_withClause": classDeclaration_withClause,
@@ -14933,27 +14467,23 @@
         "classOrMixinDeclaration_members": classOrMixinDeclaration_members,
         "classOrMixinDeclaration_typeParameters":
             classOrMixinDeclaration_typeParameters,
-        "codeLength": codeLength,
-        "codeOffset": codeOffset,
         "flags": flags,
-        "nameOffset": nameOffset,
+        "informativeId": informativeId,
         "kind": kind,
         "name": name,
         "simplyBoundable_isSimplyBounded": simplyBoundable_isSimplyBounded,
+        "unused11": unused11,
       };
     }
     if (kind == idl.LinkedNodeKind.classTypeAlias) {
       return {
-        "annotatedNode_comment": annotatedNode_comment,
         "annotatedNode_metadata": annotatedNode_metadata,
         "classTypeAlias_typeParameters": classTypeAlias_typeParameters,
         "classTypeAlias_superclass": classTypeAlias_superclass,
         "classTypeAlias_withClause": classTypeAlias_withClause,
         "classTypeAlias_implementsClause": classTypeAlias_implementsClause,
-        "codeLength": codeLength,
-        "codeOffset": codeOffset,
         "flags": flags,
-        "nameOffset": nameOffset,
+        "informativeId": informativeId,
         "kind": kind,
         "name": name,
         "simplyBoundable_isSimplyBounded": simplyBoundable_isSimplyBounded,
@@ -14981,10 +14511,9 @@
       return {
         "compilationUnit_declarations": compilationUnit_declarations,
         "compilationUnit_scriptTag": compilationUnit_scriptTag,
-        "codeLength": codeLength,
-        "codeOffset": codeOffset,
         "compilationUnit_directives": compilationUnit_directives,
         "flags": flags,
+        "informativeId": informativeId,
         "kind": kind,
         "name": name,
       };
@@ -15016,21 +14545,14 @@
       return {
         "constructorDeclaration_initializers":
             constructorDeclaration_initializers,
-        "annotatedNode_comment": annotatedNode_comment,
         "annotatedNode_metadata": annotatedNode_metadata,
         "constructorDeclaration_body": constructorDeclaration_body,
-        "constructorDeclaration_returnTypeOffset":
-            constructorDeclaration_returnTypeOffset,
         "constructorDeclaration_parameters": constructorDeclaration_parameters,
         "constructorDeclaration_redirectedConstructor":
             constructorDeclaration_redirectedConstructor,
-        "codeLength": codeLength,
-        "codeOffset": codeOffset,
-        "constructorDeclaration_periodOffset":
-            constructorDeclaration_periodOffset,
         "constructorDeclaration_returnType": constructorDeclaration_returnType,
         "flags": flags,
-        "nameOffset": nameOffset,
+        "informativeId": informativeId,
         "kind": kind,
         "name": name,
       };
@@ -15067,7 +14589,6 @@
     }
     if (kind == idl.LinkedNodeKind.declaredIdentifier) {
       return {
-        "annotatedNode_comment": annotatedNode_comment,
         "annotatedNode_metadata": annotatedNode_metadata,
         "declaredIdentifier_identifier": declaredIdentifier_identifier,
         "declaredIdentifier_type": declaredIdentifier_type,
@@ -15081,10 +14602,9 @@
         "defaultFormalParameter_defaultValue":
             defaultFormalParameter_defaultValue,
         "defaultFormalParameter_parameter": defaultFormalParameter_parameter,
-        "codeLength": codeLength,
-        "codeOffset": codeOffset,
         "defaultFormalParameter_kind": defaultFormalParameter_kind,
         "flags": flags,
+        "informativeId": informativeId,
         "kind": kind,
         "name": name,
       };
@@ -15132,10 +14652,9 @@
     }
     if (kind == idl.LinkedNodeKind.enumConstantDeclaration) {
       return {
-        "annotatedNode_comment": annotatedNode_comment,
         "annotatedNode_metadata": annotatedNode_metadata,
         "flags": flags,
-        "nameOffset": nameOffset,
+        "informativeId": informativeId,
         "kind": kind,
         "name": name,
       };
@@ -15143,12 +14662,9 @@
     if (kind == idl.LinkedNodeKind.enumDeclaration) {
       return {
         "enumDeclaration_constants": enumDeclaration_constants,
-        "annotatedNode_comment": annotatedNode_comment,
         "annotatedNode_metadata": annotatedNode_metadata,
-        "codeLength": codeLength,
-        "codeOffset": codeOffset,
         "flags": flags,
-        "nameOffset": nameOffset,
+        "informativeId": informativeId,
         "kind": kind,
         "name": name,
       };
@@ -15156,17 +14672,16 @@
     if (kind == idl.LinkedNodeKind.exportDirective) {
       return {
         "namespaceDirective_combinators": namespaceDirective_combinators,
-        "annotatedNode_comment": annotatedNode_comment,
         "annotatedNode_metadata": annotatedNode_metadata,
         "namespaceDirective_configurations": namespaceDirective_configurations,
-        "uriBasedDirective_uriElement": uriBasedDirective_uriElement,
         "flags": flags,
-        "nameOffset": nameOffset,
+        "informativeId": informativeId,
         "uriBasedDirective_uri": uriBasedDirective_uri,
         "kind": kind,
         "name": name,
         "namespaceDirective_selectedUri": namespaceDirective_selectedUri,
         "uriBasedDirective_uriContent": uriBasedDirective_uriContent,
+        "uriBasedDirective_uriElement": uriBasedDirective_uriElement,
       };
     }
     if (kind == idl.LinkedNodeKind.expressionFunctionBody) {
@@ -15195,10 +14710,10 @@
     }
     if (kind == idl.LinkedNodeKind.fieldDeclaration) {
       return {
-        "annotatedNode_comment": annotatedNode_comment,
         "annotatedNode_metadata": annotatedNode_metadata,
         "fieldDeclaration_fields": fieldDeclaration_fields,
         "flags": flags,
+        "informativeId": informativeId,
         "kind": kind,
         "name": name,
       };
@@ -15213,11 +14728,8 @@
         "fieldFormalParameter_formalParameters":
             fieldFormalParameter_formalParameters,
         "inheritsCovariant": inheritsCovariant,
-        "codeLength": codeLength,
-        "codeOffset": codeOffset,
         "flags": flags,
-        "nameOffset": nameOffset,
-        "normalFormalParameter_comment": normalFormalParameter_comment,
+        "informativeId": informativeId,
         "kind": kind,
         "name": name,
       };
@@ -15293,15 +14805,12 @@
     if (kind == idl.LinkedNodeKind.functionDeclaration) {
       return {
         "actualReturnType": actualReturnType,
-        "annotatedNode_comment": annotatedNode_comment,
         "annotatedNode_metadata": annotatedNode_metadata,
         "functionDeclaration_functionExpression":
             functionDeclaration_functionExpression,
         "functionDeclaration_returnType": functionDeclaration_returnType,
-        "codeLength": codeLength,
-        "codeOffset": codeOffset,
         "flags": flags,
-        "nameOffset": nameOffset,
+        "informativeId": informativeId,
         "kind": kind,
         "name": name,
       };
@@ -15344,17 +14853,14 @@
     if (kind == idl.LinkedNodeKind.functionTypeAlias) {
       return {
         "actualReturnType": actualReturnType,
-        "annotatedNode_comment": annotatedNode_comment,
         "annotatedNode_metadata": annotatedNode_metadata,
         "functionTypeAlias_formalParameters":
             functionTypeAlias_formalParameters,
         "functionTypeAlias_returnType": functionTypeAlias_returnType,
         "functionTypeAlias_typeParameters": functionTypeAlias_typeParameters,
         "typeAlias_hasSelfReference": typeAlias_hasSelfReference,
-        "codeLength": codeLength,
-        "codeOffset": codeOffset,
         "flags": flags,
-        "nameOffset": nameOffset,
+        "informativeId": informativeId,
         "kind": kind,
         "name": name,
         "simplyBoundable_isSimplyBounded": simplyBoundable_isSimplyBounded,
@@ -15371,11 +14877,8 @@
         "functionTypedFormalParameter_typeParameters":
             functionTypedFormalParameter_typeParameters,
         "inheritsCovariant": inheritsCovariant,
-        "codeLength": codeLength,
-        "codeOffset": codeOffset,
         "flags": flags,
-        "nameOffset": nameOffset,
-        "normalFormalParameter_comment": normalFormalParameter_comment,
+        "informativeId": informativeId,
         "kind": kind,
         "name": name,
       };
@@ -15397,15 +14900,12 @@
     }
     if (kind == idl.LinkedNodeKind.genericTypeAlias) {
       return {
-        "annotatedNode_comment": annotatedNode_comment,
         "annotatedNode_metadata": annotatedNode_metadata,
         "genericTypeAlias_typeParameters": genericTypeAlias_typeParameters,
         "genericTypeAlias_functionType": genericTypeAlias_functionType,
         "typeAlias_hasSelfReference": typeAlias_hasSelfReference,
-        "codeLength": codeLength,
-        "codeOffset": codeOffset,
         "flags": flags,
-        "nameOffset": nameOffset,
+        "informativeId": informativeId,
         "kind": kind,
         "name": name,
         "simplyBoundable_isSimplyBounded": simplyBoundable_isSimplyBounded,
@@ -15450,19 +14950,18 @@
     if (kind == idl.LinkedNodeKind.importDirective) {
       return {
         "namespaceDirective_combinators": namespaceDirective_combinators,
-        "annotatedNode_comment": annotatedNode_comment,
         "annotatedNode_metadata": annotatedNode_metadata,
         "importDirective_prefixOffset": importDirective_prefixOffset,
         "namespaceDirective_configurations": namespaceDirective_configurations,
-        "uriBasedDirective_uriElement": uriBasedDirective_uriElement,
         "flags": flags,
         "importDirective_prefix": importDirective_prefix,
-        "nameOffset": nameOffset,
+        "informativeId": informativeId,
         "uriBasedDirective_uri": uriBasedDirective_uri,
         "kind": kind,
         "name": name,
         "namespaceDirective_selectedUri": namespaceDirective_selectedUri,
         "uriBasedDirective_uriContent": uriBasedDirective_uriContent,
+        "uriBasedDirective_uriElement": uriBasedDirective_uriElement,
       };
     }
     if (kind == idl.LinkedNodeKind.indexExpression) {
@@ -15544,10 +15043,10 @@
     }
     if (kind == idl.LinkedNodeKind.libraryDirective) {
       return {
-        "annotatedNode_comment": annotatedNode_comment,
         "annotatedNode_metadata": annotatedNode_metadata,
         "libraryDirective_name": libraryDirective_name,
         "flags": flags,
+        "informativeId": informativeId,
         "kind": kind,
         "name": name,
       };
@@ -15582,17 +15081,14 @@
     if (kind == idl.LinkedNodeKind.methodDeclaration) {
       return {
         "actualReturnType": actualReturnType,
-        "annotatedNode_comment": annotatedNode_comment,
         "annotatedNode_metadata": annotatedNode_metadata,
         "methodDeclaration_body": methodDeclaration_body,
         "methodDeclaration_formalParameters":
             methodDeclaration_formalParameters,
         "methodDeclaration_returnType": methodDeclaration_returnType,
         "methodDeclaration_typeParameters": methodDeclaration_typeParameters,
-        "codeLength": codeLength,
-        "codeOffset": codeOffset,
         "flags": flags,
-        "nameOffset": nameOffset,
+        "informativeId": informativeId,
         "kind": kind,
         "name": name,
       };
@@ -15613,7 +15109,6 @@
     }
     if (kind == idl.LinkedNodeKind.mixinDeclaration) {
       return {
-        "annotatedNode_comment": annotatedNode_comment,
         "annotatedNode_metadata": annotatedNode_metadata,
         "mixinDeclaration_onClause": mixinDeclaration_onClause,
         "classOrMixinDeclaration_implementsClause":
@@ -15621,10 +15116,8 @@
         "classOrMixinDeclaration_members": classOrMixinDeclaration_members,
         "classOrMixinDeclaration_typeParameters":
             classOrMixinDeclaration_typeParameters,
-        "codeLength": codeLength,
-        "codeOffset": codeOffset,
         "flags": flags,
-        "nameOffset": nameOffset,
+        "informativeId": informativeId,
         "kind": kind,
         "mixinDeclaration_superInvokedNames":
             mixinDeclaration_superInvokedNames,
@@ -15686,24 +15179,23 @@
     }
     if (kind == idl.LinkedNodeKind.partDirective) {
       return {
-        "annotatedNode_comment": annotatedNode_comment,
         "annotatedNode_metadata": annotatedNode_metadata,
-        "uriBasedDirective_uriElement": uriBasedDirective_uriElement,
         "flags": flags,
-        "nameOffset": nameOffset,
+        "informativeId": informativeId,
         "uriBasedDirective_uri": uriBasedDirective_uri,
         "kind": kind,
         "name": name,
         "uriBasedDirective_uriContent": uriBasedDirective_uriContent,
+        "uriBasedDirective_uriElement": uriBasedDirective_uriElement,
       };
     }
     if (kind == idl.LinkedNodeKind.partOfDirective) {
       return {
-        "annotatedNode_comment": annotatedNode_comment,
         "annotatedNode_metadata": annotatedNode_metadata,
         "partOfDirective_libraryName": partOfDirective_libraryName,
         "partOfDirective_uri": partOfDirective_uri,
         "flags": flags,
+        "informativeId": informativeId,
         "kind": kind,
         "name": name,
       };
@@ -15808,11 +15300,8 @@
         "normalFormalParameter_metadata": normalFormalParameter_metadata,
         "simpleFormalParameter_type": simpleFormalParameter_type,
         "inheritsCovariant": inheritsCovariant,
-        "codeLength": codeLength,
-        "codeOffset": codeOffset,
         "flags": flags,
-        "nameOffset": nameOffset,
-        "normalFormalParameter_comment": normalFormalParameter_comment,
+        "informativeId": informativeId,
         "kind": kind,
         "name": name,
         "topLevelTypeInferenceError": topLevelTypeInferenceError,
@@ -15932,11 +15421,11 @@
     }
     if (kind == idl.LinkedNodeKind.topLevelVariableDeclaration) {
       return {
-        "annotatedNode_comment": annotatedNode_comment,
         "annotatedNode_metadata": annotatedNode_metadata,
         "topLevelVariableDeclaration_variableList":
             topLevelVariableDeclaration_variableList,
         "flags": flags,
+        "informativeId": informativeId,
         "kind": kind,
         "name": name,
       };
@@ -15971,14 +15460,11 @@
     }
     if (kind == idl.LinkedNodeKind.typeParameter) {
       return {
-        "annotatedNode_comment": annotatedNode_comment,
         "annotatedNode_metadata": annotatedNode_metadata,
         "typeParameter_bound": typeParameter_bound,
         "typeParameter_defaultType": typeParameter_defaultType,
-        "codeLength": codeLength,
-        "codeOffset": codeOffset,
         "flags": flags,
-        "nameOffset": nameOffset,
+        "informativeId": informativeId,
         "kind": kind,
         "name": name,
       };
@@ -15994,14 +15480,11 @@
     if (kind == idl.LinkedNodeKind.variableDeclaration) {
       return {
         "actualType": actualType,
-        "annotatedNode_comment": annotatedNode_comment,
         "annotatedNode_metadata": annotatedNode_metadata,
         "variableDeclaration_initializer": variableDeclaration_initializer,
         "inheritsCovariant": inheritsCovariant,
-        "codeLength": codeLength,
-        "codeOffset": codeOffset,
         "flags": flags,
-        "nameOffset": nameOffset,
+        "informativeId": informativeId,
         "kind": kind,
         "name": name,
         "topLevelTypeInferenceError": topLevelTypeInferenceError,
@@ -16010,10 +15493,10 @@
     if (kind == idl.LinkedNodeKind.variableDeclarationList) {
       return {
         "variableDeclarationList_variables": variableDeclarationList_variables,
-        "annotatedNode_comment": annotatedNode_comment,
         "annotatedNode_metadata": annotatedNode_metadata,
         "variableDeclarationList_type": variableDeclarationList_type,
         "flags": flags,
+        "informativeId": informativeId,
         "kind": kind,
         "name": name,
       };
@@ -17214,7 +16697,6 @@
     implements idl.LinkedNodeUnit {
   bool _isNNBD;
   bool _isSynthetic;
-  List<int> _lineStarts;
   LinkedNodeBuilder _node;
   UnlinkedTokensBuilder _tokens;
   String _uriStr;
@@ -17234,15 +16716,6 @@
   }
 
   @override
-  List<int> get lineStarts => _lineStarts ??= <int>[];
-
-  /// Offsets of the first character of each line in the source code.
-  set lineStarts(List<int> value) {
-    assert(value == null || value.every((e) => e >= 0));
-    this._lineStarts = value;
-  }
-
-  @override
   LinkedNodeBuilder get node => _node;
 
   set node(LinkedNodeBuilder value) {
@@ -17266,20 +16739,17 @@
   LinkedNodeUnitBuilder(
       {bool isNNBD,
       bool isSynthetic,
-      List<int> lineStarts,
       LinkedNodeBuilder node,
       UnlinkedTokensBuilder tokens,
       String uriStr})
       : _isNNBD = isNNBD,
         _isSynthetic = isSynthetic,
-        _lineStarts = lineStarts,
         _node = node,
         _tokens = tokens,
         _uriStr = uriStr;
 
   /// Flush [informative] data recursively.
   void flushInformative() {
-    _lineStarts = null;
     _node?.flushInformative();
     _tokens?.flushInformative();
   }
@@ -17296,13 +16766,9 @@
   }
 
   fb.Offset finish(fb.Builder fbBuilder) {
-    fb.Offset offset_lineStarts;
     fb.Offset offset_node;
     fb.Offset offset_tokens;
     fb.Offset offset_uriStr;
-    if (!(_lineStarts == null || _lineStarts.isEmpty)) {
-      offset_lineStarts = fbBuilder.writeListUint32(_lineStarts);
-    }
     if (_node != null) {
       offset_node = _node.finish(fbBuilder);
     }
@@ -17314,14 +16780,11 @@
     }
     fbBuilder.startTable();
     if (_isNNBD == true) {
-      fbBuilder.addBool(5, true);
+      fbBuilder.addBool(4, true);
     }
     if (_isSynthetic == true) {
       fbBuilder.addBool(3, true);
     }
-    if (offset_lineStarts != null) {
-      fbBuilder.addOffset(4, offset_lineStarts);
-    }
     if (offset_node != null) {
       fbBuilder.addOffset(2, offset_node);
     }
@@ -17353,14 +16816,13 @@
 
   bool _isNNBD;
   bool _isSynthetic;
-  List<int> _lineStarts;
   idl.LinkedNode _node;
   idl.UnlinkedTokens _tokens;
   String _uriStr;
 
   @override
   bool get isNNBD {
-    _isNNBD ??= const fb.BoolReader().vTableGet(_bc, _bcOffset, 5, false);
+    _isNNBD ??= const fb.BoolReader().vTableGet(_bc, _bcOffset, 4, false);
     return _isNNBD;
   }
 
@@ -17371,13 +16833,6 @@
   }
 
   @override
-  List<int> get lineStarts {
-    _lineStarts ??=
-        const fb.Uint32ListReader().vTableGet(_bc, _bcOffset, 4, const <int>[]);
-    return _lineStarts;
-  }
-
-  @override
   idl.LinkedNode get node {
     _node ??= const _LinkedNodeReader().vTableGet(_bc, _bcOffset, 2, null);
     return _node;
@@ -17403,7 +16858,6 @@
     Map<String, Object> _result = <String, Object>{};
     if (isNNBD != false) _result["isNNBD"] = isNNBD;
     if (isSynthetic != false) _result["isSynthetic"] = isSynthetic;
-    if (lineStarts.isNotEmpty) _result["lineStarts"] = lineStarts;
     if (node != null) _result["node"] = node.toJson();
     if (tokens != null) _result["tokens"] = tokens.toJson();
     if (uriStr != '') _result["uriStr"] = uriStr;
@@ -17414,7 +16868,6 @@
   Map<String, Object> toMap() => {
         "isNNBD": isNNBD,
         "isSynthetic": isSynthetic,
-        "lineStarts": lineStarts,
         "node": node,
         "tokens": tokens,
         "uriStr": uriStr,
@@ -23163,6 +22616,1236 @@
   String toString() => convert.json.encode(toJson());
 }
 
+class UnlinkedInformativeDataBuilder extends Object
+    with _UnlinkedInformativeDataMixin
+    implements idl.UnlinkedInformativeData {
+  int _variantField_2;
+  int _variantField_3;
+  int _variantField_1;
+  List<String> _variantField_4;
+  idl.LinkedNodeKind _kind;
+  int _variantField_5;
+  int _variantField_6;
+  List<int> _variantField_7;
+
+  @override
+  int get codeLength {
+    assert(kind == idl.LinkedNodeKind.classDeclaration ||
+        kind == idl.LinkedNodeKind.classTypeAlias ||
+        kind == idl.LinkedNodeKind.compilationUnit ||
+        kind == idl.LinkedNodeKind.constructorDeclaration ||
+        kind == idl.LinkedNodeKind.defaultFormalParameter ||
+        kind == idl.LinkedNodeKind.enumDeclaration ||
+        kind == idl.LinkedNodeKind.fieldFormalParameter ||
+        kind == idl.LinkedNodeKind.functionDeclaration ||
+        kind == idl.LinkedNodeKind.functionTypeAlias ||
+        kind == idl.LinkedNodeKind.functionTypedFormalParameter ||
+        kind == idl.LinkedNodeKind.genericTypeAlias ||
+        kind == idl.LinkedNodeKind.methodDeclaration ||
+        kind == idl.LinkedNodeKind.mixinDeclaration ||
+        kind == idl.LinkedNodeKind.simpleFormalParameter ||
+        kind == idl.LinkedNodeKind.typeParameter ||
+        kind == idl.LinkedNodeKind.variableDeclaration);
+    return _variantField_2 ??= 0;
+  }
+
+  set codeLength(int value) {
+    assert(kind == idl.LinkedNodeKind.classDeclaration ||
+        kind == idl.LinkedNodeKind.classTypeAlias ||
+        kind == idl.LinkedNodeKind.compilationUnit ||
+        kind == idl.LinkedNodeKind.constructorDeclaration ||
+        kind == idl.LinkedNodeKind.defaultFormalParameter ||
+        kind == idl.LinkedNodeKind.enumDeclaration ||
+        kind == idl.LinkedNodeKind.fieldFormalParameter ||
+        kind == idl.LinkedNodeKind.functionDeclaration ||
+        kind == idl.LinkedNodeKind.functionTypeAlias ||
+        kind == idl.LinkedNodeKind.functionTypedFormalParameter ||
+        kind == idl.LinkedNodeKind.genericTypeAlias ||
+        kind == idl.LinkedNodeKind.methodDeclaration ||
+        kind == idl.LinkedNodeKind.mixinDeclaration ||
+        kind == idl.LinkedNodeKind.simpleFormalParameter ||
+        kind == idl.LinkedNodeKind.typeParameter ||
+        kind == idl.LinkedNodeKind.variableDeclaration);
+    assert(value == null || value >= 0);
+    _variantField_2 = value;
+  }
+
+  @override
+  int get codeOffset {
+    assert(kind == idl.LinkedNodeKind.classDeclaration ||
+        kind == idl.LinkedNodeKind.classTypeAlias ||
+        kind == idl.LinkedNodeKind.compilationUnit ||
+        kind == idl.LinkedNodeKind.constructorDeclaration ||
+        kind == idl.LinkedNodeKind.defaultFormalParameter ||
+        kind == idl.LinkedNodeKind.enumDeclaration ||
+        kind == idl.LinkedNodeKind.fieldFormalParameter ||
+        kind == idl.LinkedNodeKind.functionDeclaration ||
+        kind == idl.LinkedNodeKind.functionTypeAlias ||
+        kind == idl.LinkedNodeKind.functionTypedFormalParameter ||
+        kind == idl.LinkedNodeKind.genericTypeAlias ||
+        kind == idl.LinkedNodeKind.methodDeclaration ||
+        kind == idl.LinkedNodeKind.mixinDeclaration ||
+        kind == idl.LinkedNodeKind.simpleFormalParameter ||
+        kind == idl.LinkedNodeKind.typeParameter ||
+        kind == idl.LinkedNodeKind.variableDeclaration);
+    return _variantField_3 ??= 0;
+  }
+
+  set codeOffset(int value) {
+    assert(kind == idl.LinkedNodeKind.classDeclaration ||
+        kind == idl.LinkedNodeKind.classTypeAlias ||
+        kind == idl.LinkedNodeKind.compilationUnit ||
+        kind == idl.LinkedNodeKind.constructorDeclaration ||
+        kind == idl.LinkedNodeKind.defaultFormalParameter ||
+        kind == idl.LinkedNodeKind.enumDeclaration ||
+        kind == idl.LinkedNodeKind.fieldFormalParameter ||
+        kind == idl.LinkedNodeKind.functionDeclaration ||
+        kind == idl.LinkedNodeKind.functionTypeAlias ||
+        kind == idl.LinkedNodeKind.functionTypedFormalParameter ||
+        kind == idl.LinkedNodeKind.genericTypeAlias ||
+        kind == idl.LinkedNodeKind.methodDeclaration ||
+        kind == idl.LinkedNodeKind.mixinDeclaration ||
+        kind == idl.LinkedNodeKind.simpleFormalParameter ||
+        kind == idl.LinkedNodeKind.typeParameter ||
+        kind == idl.LinkedNodeKind.variableDeclaration);
+    assert(value == null || value >= 0);
+    _variantField_3 = value;
+  }
+
+  @override
+  int get directiveKeywordOffset {
+    assert(kind == idl.LinkedNodeKind.exportDirective ||
+        kind == idl.LinkedNodeKind.importDirective ||
+        kind == idl.LinkedNodeKind.libraryDirective ||
+        kind == idl.LinkedNodeKind.partDirective ||
+        kind == idl.LinkedNodeKind.partOfDirective);
+    return _variantField_1 ??= 0;
+  }
+
+  @override
+  int get nameOffset {
+    assert(kind == idl.LinkedNodeKind.classDeclaration ||
+        kind == idl.LinkedNodeKind.classTypeAlias ||
+        kind == idl.LinkedNodeKind.constructorDeclaration ||
+        kind == idl.LinkedNodeKind.enumConstantDeclaration ||
+        kind == idl.LinkedNodeKind.enumDeclaration ||
+        kind == idl.LinkedNodeKind.fieldFormalParameter ||
+        kind == idl.LinkedNodeKind.functionDeclaration ||
+        kind == idl.LinkedNodeKind.functionTypedFormalParameter ||
+        kind == idl.LinkedNodeKind.functionTypeAlias ||
+        kind == idl.LinkedNodeKind.genericTypeAlias ||
+        kind == idl.LinkedNodeKind.methodDeclaration ||
+        kind == idl.LinkedNodeKind.mixinDeclaration ||
+        kind == idl.LinkedNodeKind.simpleFormalParameter ||
+        kind == idl.LinkedNodeKind.typeParameter ||
+        kind == idl.LinkedNodeKind.variableDeclaration);
+    return _variantField_1 ??= 0;
+  }
+
+  set directiveKeywordOffset(int value) {
+    assert(kind == idl.LinkedNodeKind.exportDirective ||
+        kind == idl.LinkedNodeKind.importDirective ||
+        kind == idl.LinkedNodeKind.libraryDirective ||
+        kind == idl.LinkedNodeKind.partDirective ||
+        kind == idl.LinkedNodeKind.partOfDirective);
+    assert(value == null || value >= 0);
+    _variantField_1 = value;
+  }
+
+  set nameOffset(int value) {
+    assert(kind == idl.LinkedNodeKind.classDeclaration ||
+        kind == idl.LinkedNodeKind.classTypeAlias ||
+        kind == idl.LinkedNodeKind.constructorDeclaration ||
+        kind == idl.LinkedNodeKind.enumConstantDeclaration ||
+        kind == idl.LinkedNodeKind.enumDeclaration ||
+        kind == idl.LinkedNodeKind.fieldFormalParameter ||
+        kind == idl.LinkedNodeKind.functionDeclaration ||
+        kind == idl.LinkedNodeKind.functionTypedFormalParameter ||
+        kind == idl.LinkedNodeKind.functionTypeAlias ||
+        kind == idl.LinkedNodeKind.genericTypeAlias ||
+        kind == idl.LinkedNodeKind.methodDeclaration ||
+        kind == idl.LinkedNodeKind.mixinDeclaration ||
+        kind == idl.LinkedNodeKind.simpleFormalParameter ||
+        kind == idl.LinkedNodeKind.typeParameter ||
+        kind == idl.LinkedNodeKind.variableDeclaration);
+    assert(value == null || value >= 0);
+    _variantField_1 = value;
+  }
+
+  @override
+  List<String> get documentationComment_tokens {
+    assert(kind == idl.LinkedNodeKind.classDeclaration ||
+        kind == idl.LinkedNodeKind.classTypeAlias ||
+        kind == idl.LinkedNodeKind.constructorDeclaration ||
+        kind == idl.LinkedNodeKind.enumDeclaration ||
+        kind == idl.LinkedNodeKind.enumConstantDeclaration ||
+        kind == idl.LinkedNodeKind.fieldDeclaration ||
+        kind == idl.LinkedNodeKind.functionDeclaration ||
+        kind == idl.LinkedNodeKind.functionTypeAlias ||
+        kind == idl.LinkedNodeKind.genericTypeAlias ||
+        kind == idl.LinkedNodeKind.libraryDirective ||
+        kind == idl.LinkedNodeKind.methodDeclaration ||
+        kind == idl.LinkedNodeKind.mixinDeclaration ||
+        kind == idl.LinkedNodeKind.topLevelVariableDeclaration);
+    return _variantField_4 ??= <String>[];
+  }
+
+  set documentationComment_tokens(List<String> value) {
+    assert(kind == idl.LinkedNodeKind.classDeclaration ||
+        kind == idl.LinkedNodeKind.classTypeAlias ||
+        kind == idl.LinkedNodeKind.constructorDeclaration ||
+        kind == idl.LinkedNodeKind.enumDeclaration ||
+        kind == idl.LinkedNodeKind.enumConstantDeclaration ||
+        kind == idl.LinkedNodeKind.fieldDeclaration ||
+        kind == idl.LinkedNodeKind.functionDeclaration ||
+        kind == idl.LinkedNodeKind.functionTypeAlias ||
+        kind == idl.LinkedNodeKind.genericTypeAlias ||
+        kind == idl.LinkedNodeKind.libraryDirective ||
+        kind == idl.LinkedNodeKind.methodDeclaration ||
+        kind == idl.LinkedNodeKind.mixinDeclaration ||
+        kind == idl.LinkedNodeKind.topLevelVariableDeclaration);
+    _variantField_4 = value;
+  }
+
+  @override
+  idl.LinkedNodeKind get kind => _kind ??= idl.LinkedNodeKind.adjacentStrings;
+
+  /// The kind of the node.
+  set kind(idl.LinkedNodeKind value) {
+    this._kind = value;
+  }
+
+  @override
+  int get constructorDeclaration_returnTypeOffset {
+    assert(kind == idl.LinkedNodeKind.constructorDeclaration);
+    return _variantField_5 ??= 0;
+  }
+
+  set constructorDeclaration_returnTypeOffset(int value) {
+    assert(kind == idl.LinkedNodeKind.constructorDeclaration);
+    assert(value == null || value >= 0);
+    _variantField_5 = value;
+  }
+
+  @override
+  int get constructorDeclaration_periodOffset {
+    assert(kind == idl.LinkedNodeKind.constructorDeclaration);
+    return _variantField_6 ??= 0;
+  }
+
+  set constructorDeclaration_periodOffset(int value) {
+    assert(kind == idl.LinkedNodeKind.constructorDeclaration);
+    assert(value == null || value >= 0);
+    _variantField_6 = value;
+  }
+
+  @override
+  List<int> get compilationUnit_lineStarts {
+    assert(kind == idl.LinkedNodeKind.compilationUnit);
+    return _variantField_7 ??= <int>[];
+  }
+
+  /// Offsets of the first character of each line in the source code.
+  set compilationUnit_lineStarts(List<int> value) {
+    assert(kind == idl.LinkedNodeKind.compilationUnit);
+    assert(value == null || value.every((e) => e >= 0));
+    _variantField_7 = value;
+  }
+
+  UnlinkedInformativeDataBuilder.classDeclaration({
+    int codeLength,
+    int codeOffset,
+    int nameOffset,
+    List<String> documentationComment_tokens,
+  })  : _kind = idl.LinkedNodeKind.classDeclaration,
+        _variantField_2 = codeLength,
+        _variantField_3 = codeOffset,
+        _variantField_1 = nameOffset,
+        _variantField_4 = documentationComment_tokens;
+
+  UnlinkedInformativeDataBuilder.classTypeAlias({
+    int codeLength,
+    int codeOffset,
+    int nameOffset,
+    List<String> documentationComment_tokens,
+  })  : _kind = idl.LinkedNodeKind.classTypeAlias,
+        _variantField_2 = codeLength,
+        _variantField_3 = codeOffset,
+        _variantField_1 = nameOffset,
+        _variantField_4 = documentationComment_tokens;
+
+  UnlinkedInformativeDataBuilder.compilationUnit({
+    int codeLength,
+    int codeOffset,
+    List<int> compilationUnit_lineStarts,
+  })  : _kind = idl.LinkedNodeKind.compilationUnit,
+        _variantField_2 = codeLength,
+        _variantField_3 = codeOffset,
+        _variantField_7 = compilationUnit_lineStarts;
+
+  UnlinkedInformativeDataBuilder.constructorDeclaration({
+    int codeLength,
+    int codeOffset,
+    int nameOffset,
+    List<String> documentationComment_tokens,
+    int constructorDeclaration_returnTypeOffset,
+    int constructorDeclaration_periodOffset,
+  })  : _kind = idl.LinkedNodeKind.constructorDeclaration,
+        _variantField_2 = codeLength,
+        _variantField_3 = codeOffset,
+        _variantField_1 = nameOffset,
+        _variantField_4 = documentationComment_tokens,
+        _variantField_5 = constructorDeclaration_returnTypeOffset,
+        _variantField_6 = constructorDeclaration_periodOffset;
+
+  UnlinkedInformativeDataBuilder.defaultFormalParameter({
+    int codeLength,
+    int codeOffset,
+  })  : _kind = idl.LinkedNodeKind.defaultFormalParameter,
+        _variantField_2 = codeLength,
+        _variantField_3 = codeOffset;
+
+  UnlinkedInformativeDataBuilder.enumConstantDeclaration({
+    int nameOffset,
+    List<String> documentationComment_tokens,
+  })  : _kind = idl.LinkedNodeKind.enumConstantDeclaration,
+        _variantField_1 = nameOffset,
+        _variantField_4 = documentationComment_tokens;
+
+  UnlinkedInformativeDataBuilder.enumDeclaration({
+    int codeLength,
+    int codeOffset,
+    int nameOffset,
+    List<String> documentationComment_tokens,
+  })  : _kind = idl.LinkedNodeKind.enumDeclaration,
+        _variantField_2 = codeLength,
+        _variantField_3 = codeOffset,
+        _variantField_1 = nameOffset,
+        _variantField_4 = documentationComment_tokens;
+
+  UnlinkedInformativeDataBuilder.exportDirective({
+    int directiveKeywordOffset,
+  })  : _kind = idl.LinkedNodeKind.exportDirective,
+        _variantField_1 = directiveKeywordOffset;
+
+  UnlinkedInformativeDataBuilder.fieldDeclaration({
+    List<String> documentationComment_tokens,
+  })  : _kind = idl.LinkedNodeKind.fieldDeclaration,
+        _variantField_4 = documentationComment_tokens;
+
+  UnlinkedInformativeDataBuilder.fieldFormalParameter({
+    int codeLength,
+    int codeOffset,
+    int nameOffset,
+  })  : _kind = idl.LinkedNodeKind.fieldFormalParameter,
+        _variantField_2 = codeLength,
+        _variantField_3 = codeOffset,
+        _variantField_1 = nameOffset;
+
+  UnlinkedInformativeDataBuilder.functionDeclaration({
+    int codeLength,
+    int codeOffset,
+    int nameOffset,
+    List<String> documentationComment_tokens,
+  })  : _kind = idl.LinkedNodeKind.functionDeclaration,
+        _variantField_2 = codeLength,
+        _variantField_3 = codeOffset,
+        _variantField_1 = nameOffset,
+        _variantField_4 = documentationComment_tokens;
+
+  UnlinkedInformativeDataBuilder.functionTypeAlias({
+    int codeLength,
+    int codeOffset,
+    int nameOffset,
+    List<String> documentationComment_tokens,
+  })  : _kind = idl.LinkedNodeKind.functionTypeAlias,
+        _variantField_2 = codeLength,
+        _variantField_3 = codeOffset,
+        _variantField_1 = nameOffset,
+        _variantField_4 = documentationComment_tokens;
+
+  UnlinkedInformativeDataBuilder.functionTypedFormalParameter({
+    int codeLength,
+    int codeOffset,
+    int nameOffset,
+  })  : _kind = idl.LinkedNodeKind.functionTypedFormalParameter,
+        _variantField_2 = codeLength,
+        _variantField_3 = codeOffset,
+        _variantField_1 = nameOffset;
+
+  UnlinkedInformativeDataBuilder.genericTypeAlias({
+    int codeLength,
+    int codeOffset,
+    int nameOffset,
+    List<String> documentationComment_tokens,
+  })  : _kind = idl.LinkedNodeKind.genericTypeAlias,
+        _variantField_2 = codeLength,
+        _variantField_3 = codeOffset,
+        _variantField_1 = nameOffset,
+        _variantField_4 = documentationComment_tokens;
+
+  UnlinkedInformativeDataBuilder.importDirective({
+    int directiveKeywordOffset,
+  })  : _kind = idl.LinkedNodeKind.importDirective,
+        _variantField_1 = directiveKeywordOffset;
+
+  UnlinkedInformativeDataBuilder.libraryDirective({
+    int directiveKeywordOffset,
+    List<String> documentationComment_tokens,
+  })  : _kind = idl.LinkedNodeKind.libraryDirective,
+        _variantField_1 = directiveKeywordOffset,
+        _variantField_4 = documentationComment_tokens;
+
+  UnlinkedInformativeDataBuilder.methodDeclaration({
+    int codeLength,
+    int codeOffset,
+    int nameOffset,
+    List<String> documentationComment_tokens,
+  })  : _kind = idl.LinkedNodeKind.methodDeclaration,
+        _variantField_2 = codeLength,
+        _variantField_3 = codeOffset,
+        _variantField_1 = nameOffset,
+        _variantField_4 = documentationComment_tokens;
+
+  UnlinkedInformativeDataBuilder.mixinDeclaration({
+    int codeLength,
+    int codeOffset,
+    int nameOffset,
+    List<String> documentationComment_tokens,
+  })  : _kind = idl.LinkedNodeKind.mixinDeclaration,
+        _variantField_2 = codeLength,
+        _variantField_3 = codeOffset,
+        _variantField_1 = nameOffset,
+        _variantField_4 = documentationComment_tokens;
+
+  UnlinkedInformativeDataBuilder.partDirective({
+    int directiveKeywordOffset,
+  })  : _kind = idl.LinkedNodeKind.partDirective,
+        _variantField_1 = directiveKeywordOffset;
+
+  UnlinkedInformativeDataBuilder.partOfDirective({
+    int directiveKeywordOffset,
+  })  : _kind = idl.LinkedNodeKind.partOfDirective,
+        _variantField_1 = directiveKeywordOffset;
+
+  UnlinkedInformativeDataBuilder.simpleFormalParameter({
+    int codeLength,
+    int codeOffset,
+    int nameOffset,
+  })  : _kind = idl.LinkedNodeKind.simpleFormalParameter,
+        _variantField_2 = codeLength,
+        _variantField_3 = codeOffset,
+        _variantField_1 = nameOffset;
+
+  UnlinkedInformativeDataBuilder.topLevelVariableDeclaration({
+    List<String> documentationComment_tokens,
+  })  : _kind = idl.LinkedNodeKind.topLevelVariableDeclaration,
+        _variantField_4 = documentationComment_tokens;
+
+  UnlinkedInformativeDataBuilder.typeParameter({
+    int codeLength,
+    int codeOffset,
+    int nameOffset,
+  })  : _kind = idl.LinkedNodeKind.typeParameter,
+        _variantField_2 = codeLength,
+        _variantField_3 = codeOffset,
+        _variantField_1 = nameOffset;
+
+  UnlinkedInformativeDataBuilder.variableDeclaration({
+    int codeLength,
+    int codeOffset,
+    int nameOffset,
+  })  : _kind = idl.LinkedNodeKind.variableDeclaration,
+        _variantField_2 = codeLength,
+        _variantField_3 = codeOffset,
+        _variantField_1 = nameOffset;
+
+  /// Flush [informative] data recursively.
+  void flushInformative() {
+    if (kind == idl.LinkedNodeKind.classDeclaration) {
+    } else if (kind == idl.LinkedNodeKind.classTypeAlias) {
+    } else if (kind == idl.LinkedNodeKind.compilationUnit) {
+    } else if (kind == idl.LinkedNodeKind.constructorDeclaration) {
+    } else if (kind == idl.LinkedNodeKind.defaultFormalParameter) {
+    } else if (kind == idl.LinkedNodeKind.enumConstantDeclaration) {
+    } else if (kind == idl.LinkedNodeKind.enumDeclaration) {
+    } else if (kind == idl.LinkedNodeKind.exportDirective) {
+    } else if (kind == idl.LinkedNodeKind.fieldDeclaration) {
+    } else if (kind == idl.LinkedNodeKind.fieldFormalParameter) {
+    } else if (kind == idl.LinkedNodeKind.functionDeclaration) {
+    } else if (kind == idl.LinkedNodeKind.functionTypeAlias) {
+    } else if (kind == idl.LinkedNodeKind.functionTypedFormalParameter) {
+    } else if (kind == idl.LinkedNodeKind.genericTypeAlias) {
+    } else if (kind == idl.LinkedNodeKind.importDirective) {
+    } else if (kind == idl.LinkedNodeKind.libraryDirective) {
+    } else if (kind == idl.LinkedNodeKind.methodDeclaration) {
+    } else if (kind == idl.LinkedNodeKind.mixinDeclaration) {
+    } else if (kind == idl.LinkedNodeKind.partDirective) {
+    } else if (kind == idl.LinkedNodeKind.partOfDirective) {
+    } else if (kind == idl.LinkedNodeKind.simpleFormalParameter) {
+    } else if (kind == idl.LinkedNodeKind.topLevelVariableDeclaration) {
+    } else if (kind == idl.LinkedNodeKind.typeParameter) {
+    } else if (kind == idl.LinkedNodeKind.variableDeclaration) {}
+  }
+
+  /// Accumulate non-[informative] data into [signature].
+  void collectApiSignature(api_sig.ApiSignature signature) {
+    if (kind == idl.LinkedNodeKind.classDeclaration) {
+      signature.addInt(this.kind == null ? 0 : this.kind.index);
+      signature.addInt(this.nameOffset ?? 0);
+      signature.addInt(this.codeLength ?? 0);
+      signature.addInt(this.codeOffset ?? 0);
+      if (this.documentationComment_tokens == null) {
+        signature.addInt(0);
+      } else {
+        signature.addInt(this.documentationComment_tokens.length);
+        for (var x in this.documentationComment_tokens) {
+          signature.addString(x);
+        }
+      }
+    } else if (kind == idl.LinkedNodeKind.classTypeAlias) {
+      signature.addInt(this.kind == null ? 0 : this.kind.index);
+      signature.addInt(this.nameOffset ?? 0);
+      signature.addInt(this.codeLength ?? 0);
+      signature.addInt(this.codeOffset ?? 0);
+      if (this.documentationComment_tokens == null) {
+        signature.addInt(0);
+      } else {
+        signature.addInt(this.documentationComment_tokens.length);
+        for (var x in this.documentationComment_tokens) {
+          signature.addString(x);
+        }
+      }
+    } else if (kind == idl.LinkedNodeKind.compilationUnit) {
+      signature.addInt(this.kind == null ? 0 : this.kind.index);
+      signature.addInt(this.codeLength ?? 0);
+      signature.addInt(this.codeOffset ?? 0);
+      if (this.compilationUnit_lineStarts == null) {
+        signature.addInt(0);
+      } else {
+        signature.addInt(this.compilationUnit_lineStarts.length);
+        for (var x in this.compilationUnit_lineStarts) {
+          signature.addInt(x);
+        }
+      }
+    } else if (kind == idl.LinkedNodeKind.constructorDeclaration) {
+      signature.addInt(this.kind == null ? 0 : this.kind.index);
+      signature.addInt(this.nameOffset ?? 0);
+      signature.addInt(this.codeLength ?? 0);
+      signature.addInt(this.codeOffset ?? 0);
+      if (this.documentationComment_tokens == null) {
+        signature.addInt(0);
+      } else {
+        signature.addInt(this.documentationComment_tokens.length);
+        for (var x in this.documentationComment_tokens) {
+          signature.addString(x);
+        }
+      }
+      signature.addInt(this.constructorDeclaration_returnTypeOffset ?? 0);
+      signature.addInt(this.constructorDeclaration_periodOffset ?? 0);
+    } else if (kind == idl.LinkedNodeKind.defaultFormalParameter) {
+      signature.addInt(this.kind == null ? 0 : this.kind.index);
+      signature.addInt(this.codeLength ?? 0);
+      signature.addInt(this.codeOffset ?? 0);
+    } else if (kind == idl.LinkedNodeKind.enumConstantDeclaration) {
+      signature.addInt(this.kind == null ? 0 : this.kind.index);
+      signature.addInt(this.nameOffset ?? 0);
+      if (this.documentationComment_tokens == null) {
+        signature.addInt(0);
+      } else {
+        signature.addInt(this.documentationComment_tokens.length);
+        for (var x in this.documentationComment_tokens) {
+          signature.addString(x);
+        }
+      }
+    } else if (kind == idl.LinkedNodeKind.enumDeclaration) {
+      signature.addInt(this.kind == null ? 0 : this.kind.index);
+      signature.addInt(this.nameOffset ?? 0);
+      signature.addInt(this.codeLength ?? 0);
+      signature.addInt(this.codeOffset ?? 0);
+      if (this.documentationComment_tokens == null) {
+        signature.addInt(0);
+      } else {
+        signature.addInt(this.documentationComment_tokens.length);
+        for (var x in this.documentationComment_tokens) {
+          signature.addString(x);
+        }
+      }
+    } else if (kind == idl.LinkedNodeKind.exportDirective) {
+      signature.addInt(this.kind == null ? 0 : this.kind.index);
+      signature.addInt(this.directiveKeywordOffset ?? 0);
+    } else if (kind == idl.LinkedNodeKind.fieldDeclaration) {
+      signature.addInt(this.kind == null ? 0 : this.kind.index);
+      if (this.documentationComment_tokens == null) {
+        signature.addInt(0);
+      } else {
+        signature.addInt(this.documentationComment_tokens.length);
+        for (var x in this.documentationComment_tokens) {
+          signature.addString(x);
+        }
+      }
+    } else if (kind == idl.LinkedNodeKind.fieldFormalParameter) {
+      signature.addInt(this.kind == null ? 0 : this.kind.index);
+      signature.addInt(this.nameOffset ?? 0);
+      signature.addInt(this.codeLength ?? 0);
+      signature.addInt(this.codeOffset ?? 0);
+    } else if (kind == idl.LinkedNodeKind.functionDeclaration) {
+      signature.addInt(this.kind == null ? 0 : this.kind.index);
+      signature.addInt(this.nameOffset ?? 0);
+      signature.addInt(this.codeLength ?? 0);
+      signature.addInt(this.codeOffset ?? 0);
+      if (this.documentationComment_tokens == null) {
+        signature.addInt(0);
+      } else {
+        signature.addInt(this.documentationComment_tokens.length);
+        for (var x in this.documentationComment_tokens) {
+          signature.addString(x);
+        }
+      }
+    } else if (kind == idl.LinkedNodeKind.functionTypeAlias) {
+      signature.addInt(this.kind == null ? 0 : this.kind.index);
+      signature.addInt(this.nameOffset ?? 0);
+      signature.addInt(this.codeLength ?? 0);
+      signature.addInt(this.codeOffset ?? 0);
+      if (this.documentationComment_tokens == null) {
+        signature.addInt(0);
+      } else {
+        signature.addInt(this.documentationComment_tokens.length);
+        for (var x in this.documentationComment_tokens) {
+          signature.addString(x);
+        }
+      }
+    } else if (kind == idl.LinkedNodeKind.functionTypedFormalParameter) {
+      signature.addInt(this.kind == null ? 0 : this.kind.index);
+      signature.addInt(this.nameOffset ?? 0);
+      signature.addInt(this.codeLength ?? 0);
+      signature.addInt(this.codeOffset ?? 0);
+    } else if (kind == idl.LinkedNodeKind.genericTypeAlias) {
+      signature.addInt(this.kind == null ? 0 : this.kind.index);
+      signature.addInt(this.nameOffset ?? 0);
+      signature.addInt(this.codeLength ?? 0);
+      signature.addInt(this.codeOffset ?? 0);
+      if (this.documentationComment_tokens == null) {
+        signature.addInt(0);
+      } else {
+        signature.addInt(this.documentationComment_tokens.length);
+        for (var x in this.documentationComment_tokens) {
+          signature.addString(x);
+        }
+      }
+    } else if (kind == idl.LinkedNodeKind.importDirective) {
+      signature.addInt(this.kind == null ? 0 : this.kind.index);
+      signature.addInt(this.directiveKeywordOffset ?? 0);
+    } else if (kind == idl.LinkedNodeKind.libraryDirective) {
+      signature.addInt(this.kind == null ? 0 : this.kind.index);
+      signature.addInt(this.directiveKeywordOffset ?? 0);
+      if (this.documentationComment_tokens == null) {
+        signature.addInt(0);
+      } else {
+        signature.addInt(this.documentationComment_tokens.length);
+        for (var x in this.documentationComment_tokens) {
+          signature.addString(x);
+        }
+      }
+    } else if (kind == idl.LinkedNodeKind.methodDeclaration) {
+      signature.addInt(this.kind == null ? 0 : this.kind.index);
+      signature.addInt(this.nameOffset ?? 0);
+      signature.addInt(this.codeLength ?? 0);
+      signature.addInt(this.codeOffset ?? 0);
+      if (this.documentationComment_tokens == null) {
+        signature.addInt(0);
+      } else {
+        signature.addInt(this.documentationComment_tokens.length);
+        for (var x in this.documentationComment_tokens) {
+          signature.addString(x);
+        }
+      }
+    } else if (kind == idl.LinkedNodeKind.mixinDeclaration) {
+      signature.addInt(this.kind == null ? 0 : this.kind.index);
+      signature.addInt(this.nameOffset ?? 0);
+      signature.addInt(this.codeLength ?? 0);
+      signature.addInt(this.codeOffset ?? 0);
+      if (this.documentationComment_tokens == null) {
+        signature.addInt(0);
+      } else {
+        signature.addInt(this.documentationComment_tokens.length);
+        for (var x in this.documentationComment_tokens) {
+          signature.addString(x);
+        }
+      }
+    } else if (kind == idl.LinkedNodeKind.partDirective) {
+      signature.addInt(this.kind == null ? 0 : this.kind.index);
+      signature.addInt(this.directiveKeywordOffset ?? 0);
+    } else if (kind == idl.LinkedNodeKind.partOfDirective) {
+      signature.addInt(this.kind == null ? 0 : this.kind.index);
+      signature.addInt(this.directiveKeywordOffset ?? 0);
+    } else if (kind == idl.LinkedNodeKind.simpleFormalParameter) {
+      signature.addInt(this.kind == null ? 0 : this.kind.index);
+      signature.addInt(this.nameOffset ?? 0);
+      signature.addInt(this.codeLength ?? 0);
+      signature.addInt(this.codeOffset ?? 0);
+    } else if (kind == idl.LinkedNodeKind.topLevelVariableDeclaration) {
+      signature.addInt(this.kind == null ? 0 : this.kind.index);
+      if (this.documentationComment_tokens == null) {
+        signature.addInt(0);
+      } else {
+        signature.addInt(this.documentationComment_tokens.length);
+        for (var x in this.documentationComment_tokens) {
+          signature.addString(x);
+        }
+      }
+    } else if (kind == idl.LinkedNodeKind.typeParameter) {
+      signature.addInt(this.kind == null ? 0 : this.kind.index);
+      signature.addInt(this.nameOffset ?? 0);
+      signature.addInt(this.codeLength ?? 0);
+      signature.addInt(this.codeOffset ?? 0);
+    } else if (kind == idl.LinkedNodeKind.variableDeclaration) {
+      signature.addInt(this.kind == null ? 0 : this.kind.index);
+      signature.addInt(this.nameOffset ?? 0);
+      signature.addInt(this.codeLength ?? 0);
+      signature.addInt(this.codeOffset ?? 0);
+    }
+  }
+
+  fb.Offset finish(fb.Builder fbBuilder) {
+    fb.Offset offset_variantField_4;
+    fb.Offset offset_variantField_7;
+    if (!(_variantField_4 == null || _variantField_4.isEmpty)) {
+      offset_variantField_4 = fbBuilder.writeList(
+          _variantField_4.map((b) => fbBuilder.writeString(b)).toList());
+    }
+    if (!(_variantField_7 == null || _variantField_7.isEmpty)) {
+      offset_variantField_7 = fbBuilder.writeListUint32(_variantField_7);
+    }
+    fbBuilder.startTable();
+    if (_variantField_2 != null && _variantField_2 != 0) {
+      fbBuilder.addUint32(2, _variantField_2);
+    }
+    if (_variantField_3 != null && _variantField_3 != 0) {
+      fbBuilder.addUint32(3, _variantField_3);
+    }
+    if (_variantField_1 != null && _variantField_1 != 0) {
+      fbBuilder.addUint32(1, _variantField_1);
+    }
+    if (offset_variantField_4 != null) {
+      fbBuilder.addOffset(4, offset_variantField_4);
+    }
+    if (_kind != null && _kind != idl.LinkedNodeKind.adjacentStrings) {
+      fbBuilder.addUint8(0, _kind.index);
+    }
+    if (_variantField_5 != null && _variantField_5 != 0) {
+      fbBuilder.addUint32(5, _variantField_5);
+    }
+    if (_variantField_6 != null && _variantField_6 != 0) {
+      fbBuilder.addUint32(6, _variantField_6);
+    }
+    if (offset_variantField_7 != null) {
+      fbBuilder.addOffset(7, offset_variantField_7);
+    }
+    return fbBuilder.endTable();
+  }
+}
+
+class _UnlinkedInformativeDataReader
+    extends fb.TableReader<_UnlinkedInformativeDataImpl> {
+  const _UnlinkedInformativeDataReader();
+
+  @override
+  _UnlinkedInformativeDataImpl createObject(fb.BufferContext bc, int offset) =>
+      new _UnlinkedInformativeDataImpl(bc, offset);
+}
+
+class _UnlinkedInformativeDataImpl extends Object
+    with _UnlinkedInformativeDataMixin
+    implements idl.UnlinkedInformativeData {
+  final fb.BufferContext _bc;
+  final int _bcOffset;
+
+  _UnlinkedInformativeDataImpl(this._bc, this._bcOffset);
+
+  int _variantField_2;
+  int _variantField_3;
+  int _variantField_1;
+  List<String> _variantField_4;
+  idl.LinkedNodeKind _kind;
+  int _variantField_5;
+  int _variantField_6;
+  List<int> _variantField_7;
+
+  @override
+  int get codeLength {
+    assert(kind == idl.LinkedNodeKind.classDeclaration ||
+        kind == idl.LinkedNodeKind.classTypeAlias ||
+        kind == idl.LinkedNodeKind.compilationUnit ||
+        kind == idl.LinkedNodeKind.constructorDeclaration ||
+        kind == idl.LinkedNodeKind.defaultFormalParameter ||
+        kind == idl.LinkedNodeKind.enumDeclaration ||
+        kind == idl.LinkedNodeKind.fieldFormalParameter ||
+        kind == idl.LinkedNodeKind.functionDeclaration ||
+        kind == idl.LinkedNodeKind.functionTypeAlias ||
+        kind == idl.LinkedNodeKind.functionTypedFormalParameter ||
+        kind == idl.LinkedNodeKind.genericTypeAlias ||
+        kind == idl.LinkedNodeKind.methodDeclaration ||
+        kind == idl.LinkedNodeKind.mixinDeclaration ||
+        kind == idl.LinkedNodeKind.simpleFormalParameter ||
+        kind == idl.LinkedNodeKind.typeParameter ||
+        kind == idl.LinkedNodeKind.variableDeclaration);
+    _variantField_2 ??= const fb.Uint32Reader().vTableGet(_bc, _bcOffset, 2, 0);
+    return _variantField_2;
+  }
+
+  @override
+  int get codeOffset {
+    assert(kind == idl.LinkedNodeKind.classDeclaration ||
+        kind == idl.LinkedNodeKind.classTypeAlias ||
+        kind == idl.LinkedNodeKind.compilationUnit ||
+        kind == idl.LinkedNodeKind.constructorDeclaration ||
+        kind == idl.LinkedNodeKind.defaultFormalParameter ||
+        kind == idl.LinkedNodeKind.enumDeclaration ||
+        kind == idl.LinkedNodeKind.fieldFormalParameter ||
+        kind == idl.LinkedNodeKind.functionDeclaration ||
+        kind == idl.LinkedNodeKind.functionTypeAlias ||
+        kind == idl.LinkedNodeKind.functionTypedFormalParameter ||
+        kind == idl.LinkedNodeKind.genericTypeAlias ||
+        kind == idl.LinkedNodeKind.methodDeclaration ||
+        kind == idl.LinkedNodeKind.mixinDeclaration ||
+        kind == idl.LinkedNodeKind.simpleFormalParameter ||
+        kind == idl.LinkedNodeKind.typeParameter ||
+        kind == idl.LinkedNodeKind.variableDeclaration);
+    _variantField_3 ??= const fb.Uint32Reader().vTableGet(_bc, _bcOffset, 3, 0);
+    return _variantField_3;
+  }
+
+  @override
+  int get directiveKeywordOffset {
+    assert(kind == idl.LinkedNodeKind.exportDirective ||
+        kind == idl.LinkedNodeKind.importDirective ||
+        kind == idl.LinkedNodeKind.libraryDirective ||
+        kind == idl.LinkedNodeKind.partDirective ||
+        kind == idl.LinkedNodeKind.partOfDirective);
+    _variantField_1 ??= const fb.Uint32Reader().vTableGet(_bc, _bcOffset, 1, 0);
+    return _variantField_1;
+  }
+
+  @override
+  int get nameOffset {
+    assert(kind == idl.LinkedNodeKind.classDeclaration ||
+        kind == idl.LinkedNodeKind.classTypeAlias ||
+        kind == idl.LinkedNodeKind.constructorDeclaration ||
+        kind == idl.LinkedNodeKind.enumConstantDeclaration ||
+        kind == idl.LinkedNodeKind.enumDeclaration ||
+        kind == idl.LinkedNodeKind.fieldFormalParameter ||
+        kind == idl.LinkedNodeKind.functionDeclaration ||
+        kind == idl.LinkedNodeKind.functionTypedFormalParameter ||
+        kind == idl.LinkedNodeKind.functionTypeAlias ||
+        kind == idl.LinkedNodeKind.genericTypeAlias ||
+        kind == idl.LinkedNodeKind.methodDeclaration ||
+        kind == idl.LinkedNodeKind.mixinDeclaration ||
+        kind == idl.LinkedNodeKind.simpleFormalParameter ||
+        kind == idl.LinkedNodeKind.typeParameter ||
+        kind == idl.LinkedNodeKind.variableDeclaration);
+    _variantField_1 ??= const fb.Uint32Reader().vTableGet(_bc, _bcOffset, 1, 0);
+    return _variantField_1;
+  }
+
+  @override
+  List<String> get documentationComment_tokens {
+    assert(kind == idl.LinkedNodeKind.classDeclaration ||
+        kind == idl.LinkedNodeKind.classTypeAlias ||
+        kind == idl.LinkedNodeKind.constructorDeclaration ||
+        kind == idl.LinkedNodeKind.enumDeclaration ||
+        kind == idl.LinkedNodeKind.enumConstantDeclaration ||
+        kind == idl.LinkedNodeKind.fieldDeclaration ||
+        kind == idl.LinkedNodeKind.functionDeclaration ||
+        kind == idl.LinkedNodeKind.functionTypeAlias ||
+        kind == idl.LinkedNodeKind.genericTypeAlias ||
+        kind == idl.LinkedNodeKind.libraryDirective ||
+        kind == idl.LinkedNodeKind.methodDeclaration ||
+        kind == idl.LinkedNodeKind.mixinDeclaration ||
+        kind == idl.LinkedNodeKind.topLevelVariableDeclaration);
+    _variantField_4 ??= const fb.ListReader<String>(const fb.StringReader())
+        .vTableGet(_bc, _bcOffset, 4, const <String>[]);
+    return _variantField_4;
+  }
+
+  @override
+  idl.LinkedNodeKind get kind {
+    _kind ??= const _LinkedNodeKindReader()
+        .vTableGet(_bc, _bcOffset, 0, idl.LinkedNodeKind.adjacentStrings);
+    return _kind;
+  }
+
+  @override
+  int get constructorDeclaration_returnTypeOffset {
+    assert(kind == idl.LinkedNodeKind.constructorDeclaration);
+    _variantField_5 ??= const fb.Uint32Reader().vTableGet(_bc, _bcOffset, 5, 0);
+    return _variantField_5;
+  }
+
+  @override
+  int get constructorDeclaration_periodOffset {
+    assert(kind == idl.LinkedNodeKind.constructorDeclaration);
+    _variantField_6 ??= const fb.Uint32Reader().vTableGet(_bc, _bcOffset, 6, 0);
+    return _variantField_6;
+  }
+
+  @override
+  List<int> get compilationUnit_lineStarts {
+    assert(kind == idl.LinkedNodeKind.compilationUnit);
+    _variantField_7 ??=
+        const fb.Uint32ListReader().vTableGet(_bc, _bcOffset, 7, const <int>[]);
+    return _variantField_7;
+  }
+}
+
+abstract class _UnlinkedInformativeDataMixin
+    implements idl.UnlinkedInformativeData {
+  @override
+  Map<String, Object> toJson() {
+    Map<String, Object> _result = <String, Object>{};
+    if (kind != idl.LinkedNodeKind.adjacentStrings)
+      _result["kind"] = kind.toString().split('.')[1];
+    if (kind == idl.LinkedNodeKind.classDeclaration) {
+      if (codeLength != 0) _result["codeLength"] = codeLength;
+      if (codeOffset != 0) _result["codeOffset"] = codeOffset;
+      if (nameOffset != 0) _result["nameOffset"] = nameOffset;
+      if (documentationComment_tokens.isNotEmpty)
+        _result["documentationComment_tokens"] = documentationComment_tokens;
+    }
+    if (kind == idl.LinkedNodeKind.classTypeAlias) {
+      if (codeLength != 0) _result["codeLength"] = codeLength;
+      if (codeOffset != 0) _result["codeOffset"] = codeOffset;
+      if (nameOffset != 0) _result["nameOffset"] = nameOffset;
+      if (documentationComment_tokens.isNotEmpty)
+        _result["documentationComment_tokens"] = documentationComment_tokens;
+    }
+    if (kind == idl.LinkedNodeKind.compilationUnit) {
+      if (codeLength != 0) _result["codeLength"] = codeLength;
+      if (codeOffset != 0) _result["codeOffset"] = codeOffset;
+      if (compilationUnit_lineStarts.isNotEmpty)
+        _result["compilationUnit_lineStarts"] = compilationUnit_lineStarts;
+    }
+    if (kind == idl.LinkedNodeKind.constructorDeclaration) {
+      if (codeLength != 0) _result["codeLength"] = codeLength;
+      if (codeOffset != 0) _result["codeOffset"] = codeOffset;
+      if (nameOffset != 0) _result["nameOffset"] = nameOffset;
+      if (documentationComment_tokens.isNotEmpty)
+        _result["documentationComment_tokens"] = documentationComment_tokens;
+      if (constructorDeclaration_returnTypeOffset != 0)
+        _result["constructorDeclaration_returnTypeOffset"] =
+            constructorDeclaration_returnTypeOffset;
+      if (constructorDeclaration_periodOffset != 0)
+        _result["constructorDeclaration_periodOffset"] =
+            constructorDeclaration_periodOffset;
+    }
+    if (kind == idl.LinkedNodeKind.defaultFormalParameter) {
+      if (codeLength != 0) _result["codeLength"] = codeLength;
+      if (codeOffset != 0) _result["codeOffset"] = codeOffset;
+    }
+    if (kind == idl.LinkedNodeKind.enumConstantDeclaration) {
+      if (nameOffset != 0) _result["nameOffset"] = nameOffset;
+      if (documentationComment_tokens.isNotEmpty)
+        _result["documentationComment_tokens"] = documentationComment_tokens;
+    }
+    if (kind == idl.LinkedNodeKind.enumDeclaration) {
+      if (codeLength != 0) _result["codeLength"] = codeLength;
+      if (codeOffset != 0) _result["codeOffset"] = codeOffset;
+      if (nameOffset != 0) _result["nameOffset"] = nameOffset;
+      if (documentationComment_tokens.isNotEmpty)
+        _result["documentationComment_tokens"] = documentationComment_tokens;
+    }
+    if (kind == idl.LinkedNodeKind.exportDirective) {
+      if (directiveKeywordOffset != 0)
+        _result["directiveKeywordOffset"] = directiveKeywordOffset;
+    }
+    if (kind == idl.LinkedNodeKind.fieldDeclaration) {
+      if (documentationComment_tokens.isNotEmpty)
+        _result["documentationComment_tokens"] = documentationComment_tokens;
+    }
+    if (kind == idl.LinkedNodeKind.fieldFormalParameter) {
+      if (codeLength != 0) _result["codeLength"] = codeLength;
+      if (codeOffset != 0) _result["codeOffset"] = codeOffset;
+      if (nameOffset != 0) _result["nameOffset"] = nameOffset;
+    }
+    if (kind == idl.LinkedNodeKind.functionDeclaration) {
+      if (codeLength != 0) _result["codeLength"] = codeLength;
+      if (codeOffset != 0) _result["codeOffset"] = codeOffset;
+      if (nameOffset != 0) _result["nameOffset"] = nameOffset;
+      if (documentationComment_tokens.isNotEmpty)
+        _result["documentationComment_tokens"] = documentationComment_tokens;
+    }
+    if (kind == idl.LinkedNodeKind.functionTypeAlias) {
+      if (codeLength != 0) _result["codeLength"] = codeLength;
+      if (codeOffset != 0) _result["codeOffset"] = codeOffset;
+      if (nameOffset != 0) _result["nameOffset"] = nameOffset;
+      if (documentationComment_tokens.isNotEmpty)
+        _result["documentationComment_tokens"] = documentationComment_tokens;
+    }
+    if (kind == idl.LinkedNodeKind.functionTypedFormalParameter) {
+      if (codeLength != 0) _result["codeLength"] = codeLength;
+      if (codeOffset != 0) _result["codeOffset"] = codeOffset;
+      if (nameOffset != 0) _result["nameOffset"] = nameOffset;
+    }
+    if (kind == idl.LinkedNodeKind.genericTypeAlias) {
+      if (codeLength != 0) _result["codeLength"] = codeLength;
+      if (codeOffset != 0) _result["codeOffset"] = codeOffset;
+      if (nameOffset != 0) _result["nameOffset"] = nameOffset;
+      if (documentationComment_tokens.isNotEmpty)
+        _result["documentationComment_tokens"] = documentationComment_tokens;
+    }
+    if (kind == idl.LinkedNodeKind.importDirective) {
+      if (directiveKeywordOffset != 0)
+        _result["directiveKeywordOffset"] = directiveKeywordOffset;
+    }
+    if (kind == idl.LinkedNodeKind.libraryDirective) {
+      if (directiveKeywordOffset != 0)
+        _result["directiveKeywordOffset"] = directiveKeywordOffset;
+      if (documentationComment_tokens.isNotEmpty)
+        _result["documentationComment_tokens"] = documentationComment_tokens;
+    }
+    if (kind == idl.LinkedNodeKind.methodDeclaration) {
+      if (codeLength != 0) _result["codeLength"] = codeLength;
+      if (codeOffset != 0) _result["codeOffset"] = codeOffset;
+      if (nameOffset != 0) _result["nameOffset"] = nameOffset;
+      if (documentationComment_tokens.isNotEmpty)
+        _result["documentationComment_tokens"] = documentationComment_tokens;
+    }
+    if (kind == idl.LinkedNodeKind.mixinDeclaration) {
+      if (codeLength != 0) _result["codeLength"] = codeLength;
+      if (codeOffset != 0) _result["codeOffset"] = codeOffset;
+      if (nameOffset != 0) _result["nameOffset"] = nameOffset;
+      if (documentationComment_tokens.isNotEmpty)
+        _result["documentationComment_tokens"] = documentationComment_tokens;
+    }
+    if (kind == idl.LinkedNodeKind.partDirective) {
+      if (directiveKeywordOffset != 0)
+        _result["directiveKeywordOffset"] = directiveKeywordOffset;
+    }
+    if (kind == idl.LinkedNodeKind.partOfDirective) {
+      if (directiveKeywordOffset != 0)
+        _result["directiveKeywordOffset"] = directiveKeywordOffset;
+    }
+    if (kind == idl.LinkedNodeKind.simpleFormalParameter) {
+      if (codeLength != 0) _result["codeLength"] = codeLength;
+      if (codeOffset != 0) _result["codeOffset"] = codeOffset;
+      if (nameOffset != 0) _result["nameOffset"] = nameOffset;
+    }
+    if (kind == idl.LinkedNodeKind.topLevelVariableDeclaration) {
+      if (documentationComment_tokens.isNotEmpty)
+        _result["documentationComment_tokens"] = documentationComment_tokens;
+    }
+    if (kind == idl.LinkedNodeKind.typeParameter) {
+      if (codeLength != 0) _result["codeLength"] = codeLength;
+      if (codeOffset != 0) _result["codeOffset"] = codeOffset;
+      if (nameOffset != 0) _result["nameOffset"] = nameOffset;
+    }
+    if (kind == idl.LinkedNodeKind.variableDeclaration) {
+      if (codeLength != 0) _result["codeLength"] = codeLength;
+      if (codeOffset != 0) _result["codeOffset"] = codeOffset;
+      if (nameOffset != 0) _result["nameOffset"] = nameOffset;
+    }
+    return _result;
+  }
+
+  @override
+  Map<String, Object> toMap() {
+    if (kind == idl.LinkedNodeKind.classDeclaration) {
+      return {
+        "codeLength": codeLength,
+        "codeOffset": codeOffset,
+        "nameOffset": nameOffset,
+        "documentationComment_tokens": documentationComment_tokens,
+        "kind": kind,
+      };
+    }
+    if (kind == idl.LinkedNodeKind.classTypeAlias) {
+      return {
+        "codeLength": codeLength,
+        "codeOffset": codeOffset,
+        "nameOffset": nameOffset,
+        "documentationComment_tokens": documentationComment_tokens,
+        "kind": kind,
+      };
+    }
+    if (kind == idl.LinkedNodeKind.compilationUnit) {
+      return {
+        "codeLength": codeLength,
+        "codeOffset": codeOffset,
+        "kind": kind,
+        "compilationUnit_lineStarts": compilationUnit_lineStarts,
+      };
+    }
+    if (kind == idl.LinkedNodeKind.constructorDeclaration) {
+      return {
+        "codeLength": codeLength,
+        "codeOffset": codeOffset,
+        "nameOffset": nameOffset,
+        "documentationComment_tokens": documentationComment_tokens,
+        "kind": kind,
+        "constructorDeclaration_returnTypeOffset":
+            constructorDeclaration_returnTypeOffset,
+        "constructorDeclaration_periodOffset":
+            constructorDeclaration_periodOffset,
+      };
+    }
+    if (kind == idl.LinkedNodeKind.defaultFormalParameter) {
+      return {
+        "codeLength": codeLength,
+        "codeOffset": codeOffset,
+        "kind": kind,
+      };
+    }
+    if (kind == idl.LinkedNodeKind.enumConstantDeclaration) {
+      return {
+        "nameOffset": nameOffset,
+        "documentationComment_tokens": documentationComment_tokens,
+        "kind": kind,
+      };
+    }
+    if (kind == idl.LinkedNodeKind.enumDeclaration) {
+      return {
+        "codeLength": codeLength,
+        "codeOffset": codeOffset,
+        "nameOffset": nameOffset,
+        "documentationComment_tokens": documentationComment_tokens,
+        "kind": kind,
+      };
+    }
+    if (kind == idl.LinkedNodeKind.exportDirective) {
+      return {
+        "directiveKeywordOffset": directiveKeywordOffset,
+        "kind": kind,
+      };
+    }
+    if (kind == idl.LinkedNodeKind.fieldDeclaration) {
+      return {
+        "documentationComment_tokens": documentationComment_tokens,
+        "kind": kind,
+      };
+    }
+    if (kind == idl.LinkedNodeKind.fieldFormalParameter) {
+      return {
+        "codeLength": codeLength,
+        "codeOffset": codeOffset,
+        "nameOffset": nameOffset,
+        "kind": kind,
+      };
+    }
+    if (kind == idl.LinkedNodeKind.functionDeclaration) {
+      return {
+        "codeLength": codeLength,
+        "codeOffset": codeOffset,
+        "nameOffset": nameOffset,
+        "documentationComment_tokens": documentationComment_tokens,
+        "kind": kind,
+      };
+    }
+    if (kind == idl.LinkedNodeKind.functionTypeAlias) {
+      return {
+        "codeLength": codeLength,
+        "codeOffset": codeOffset,
+        "nameOffset": nameOffset,
+        "documentationComment_tokens": documentationComment_tokens,
+        "kind": kind,
+      };
+    }
+    if (kind == idl.LinkedNodeKind.functionTypedFormalParameter) {
+      return {
+        "codeLength": codeLength,
+        "codeOffset": codeOffset,
+        "nameOffset": nameOffset,
+        "kind": kind,
+      };
+    }
+    if (kind == idl.LinkedNodeKind.genericTypeAlias) {
+      return {
+        "codeLength": codeLength,
+        "codeOffset": codeOffset,
+        "nameOffset": nameOffset,
+        "documentationComment_tokens": documentationComment_tokens,
+        "kind": kind,
+      };
+    }
+    if (kind == idl.LinkedNodeKind.importDirective) {
+      return {
+        "directiveKeywordOffset": directiveKeywordOffset,
+        "kind": kind,
+      };
+    }
+    if (kind == idl.LinkedNodeKind.libraryDirective) {
+      return {
+        "directiveKeywordOffset": directiveKeywordOffset,
+        "documentationComment_tokens": documentationComment_tokens,
+        "kind": kind,
+      };
+    }
+    if (kind == idl.LinkedNodeKind.methodDeclaration) {
+      return {
+        "codeLength": codeLength,
+        "codeOffset": codeOffset,
+        "nameOffset": nameOffset,
+        "documentationComment_tokens": documentationComment_tokens,
+        "kind": kind,
+      };
+    }
+    if (kind == idl.LinkedNodeKind.mixinDeclaration) {
+      return {
+        "codeLength": codeLength,
+        "codeOffset": codeOffset,
+        "nameOffset": nameOffset,
+        "documentationComment_tokens": documentationComment_tokens,
+        "kind": kind,
+      };
+    }
+    if (kind == idl.LinkedNodeKind.partDirective) {
+      return {
+        "directiveKeywordOffset": directiveKeywordOffset,
+        "kind": kind,
+      };
+    }
+    if (kind == idl.LinkedNodeKind.partOfDirective) {
+      return {
+        "directiveKeywordOffset": directiveKeywordOffset,
+        "kind": kind,
+      };
+    }
+    if (kind == idl.LinkedNodeKind.simpleFormalParameter) {
+      return {
+        "codeLength": codeLength,
+        "codeOffset": codeOffset,
+        "nameOffset": nameOffset,
+        "kind": kind,
+      };
+    }
+    if (kind == idl.LinkedNodeKind.topLevelVariableDeclaration) {
+      return {
+        "documentationComment_tokens": documentationComment_tokens,
+        "kind": kind,
+      };
+    }
+    if (kind == idl.LinkedNodeKind.typeParameter) {
+      return {
+        "codeLength": codeLength,
+        "codeOffset": codeOffset,
+        "nameOffset": nameOffset,
+        "kind": kind,
+      };
+    }
+    if (kind == idl.LinkedNodeKind.variableDeclaration) {
+      return {
+        "codeLength": codeLength,
+        "codeOffset": codeOffset,
+        "nameOffset": nameOffset,
+        "kind": kind,
+      };
+    }
+    throw StateError("Unexpected $kind");
+  }
+
+  @override
+  String toString() => convert.json.encode(toJson());
+}
+
 class UnlinkedParamBuilder extends Object
     with _UnlinkedParamMixin
     implements idl.UnlinkedParam {
@@ -26167,6 +26850,7 @@
   bool _hasLibraryDirective;
   bool _hasPartOfDirective;
   List<String> _imports;
+  List<UnlinkedInformativeDataBuilder> _informativeData;
   List<int> _lineStarts;
   List<String> _parts;
 
@@ -26213,6 +26897,14 @@
   }
 
   @override
+  List<UnlinkedInformativeDataBuilder> get informativeData =>
+      _informativeData ??= <UnlinkedInformativeDataBuilder>[];
+
+  set informativeData(List<UnlinkedInformativeDataBuilder> value) {
+    this._informativeData = value;
+  }
+
+  @override
   List<int> get lineStarts => _lineStarts ??= <int>[];
 
   /// Offsets of the first character of each line in the source code.
@@ -26235,6 +26927,7 @@
       bool hasLibraryDirective,
       bool hasPartOfDirective,
       List<String> imports,
+      List<UnlinkedInformativeDataBuilder> informativeData,
       List<int> lineStarts,
       List<String> parts})
       : _apiSignature = apiSignature,
@@ -26242,11 +26935,13 @@
         _hasLibraryDirective = hasLibraryDirective,
         _hasPartOfDirective = hasPartOfDirective,
         _imports = imports,
+        _informativeData = informativeData,
         _lineStarts = lineStarts,
         _parts = parts;
 
   /// Flush [informative] data recursively.
   void flushInformative() {
+    _informativeData?.forEach((b) => b.flushInformative());
     _lineStarts = null;
   }
 
@@ -26286,6 +26981,14 @@
       }
     }
     signature.addBool(this._hasLibraryDirective == true);
+    if (this._informativeData == null) {
+      signature.addInt(0);
+    } else {
+      signature.addInt(this._informativeData.length);
+      for (var x in this._informativeData) {
+        x?.collectApiSignature(signature);
+      }
+    }
   }
 
   List<int> toBuffer() {
@@ -26297,6 +27000,7 @@
     fb.Offset offset_apiSignature;
     fb.Offset offset_exports;
     fb.Offset offset_imports;
+    fb.Offset offset_informativeData;
     fb.Offset offset_lineStarts;
     fb.Offset offset_parts;
     if (!(_apiSignature == null || _apiSignature.isEmpty)) {
@@ -26310,6 +27014,10 @@
       offset_imports = fbBuilder
           .writeList(_imports.map((b) => fbBuilder.writeString(b)).toList());
     }
+    if (!(_informativeData == null || _informativeData.isEmpty)) {
+      offset_informativeData = fbBuilder
+          .writeList(_informativeData.map((b) => b.finish(fbBuilder)).toList());
+    }
     if (!(_lineStarts == null || _lineStarts.isEmpty)) {
       offset_lineStarts = fbBuilder.writeListUint32(_lineStarts);
     }
@@ -26333,6 +27041,9 @@
     if (offset_imports != null) {
       fbBuilder.addOffset(2, offset_imports);
     }
+    if (offset_informativeData != null) {
+      fbBuilder.addOffset(7, offset_informativeData);
+    }
     if (offset_lineStarts != null) {
       fbBuilder.addOffset(5, offset_lineStarts);
     }
@@ -26369,6 +27080,7 @@
   bool _hasLibraryDirective;
   bool _hasPartOfDirective;
   List<String> _imports;
+  List<idl.UnlinkedInformativeData> _informativeData;
   List<int> _lineStarts;
   List<String> _parts;
 
@@ -26408,6 +27120,14 @@
   }
 
   @override
+  List<idl.UnlinkedInformativeData> get informativeData {
+    _informativeData ??= const fb.ListReader<idl.UnlinkedInformativeData>(
+            const _UnlinkedInformativeDataReader())
+        .vTableGet(_bc, _bcOffset, 7, const <idl.UnlinkedInformativeData>[]);
+    return _informativeData;
+  }
+
+  @override
   List<int> get lineStarts {
     _lineStarts ??=
         const fb.Uint32ListReader().vTableGet(_bc, _bcOffset, 5, const <int>[]);
@@ -26433,6 +27153,9 @@
     if (hasPartOfDirective != false)
       _result["hasPartOfDirective"] = hasPartOfDirective;
     if (imports.isNotEmpty) _result["imports"] = imports;
+    if (informativeData.isNotEmpty)
+      _result["informativeData"] =
+          informativeData.map((_value) => _value.toJson()).toList();
     if (lineStarts.isNotEmpty) _result["lineStarts"] = lineStarts;
     if (parts.isNotEmpty) _result["parts"] = parts;
     return _result;
@@ -26445,6 +27168,7 @@
         "hasLibraryDirective": hasLibraryDirective,
         "hasPartOfDirective": hasPartOfDirective,
         "imports": imports,
+        "informativeData": informativeData,
         "lineStarts": lineStarts,
         "parts": parts,
       };
diff --git a/pkg/analyzer/lib/src/summary/format.fbs b/pkg/analyzer/lib/src/summary/format.fbs
index 4ff5313..d68ae09 100644
--- a/pkg/analyzer/lib/src/summary/format.fbs
+++ b/pkg/analyzer/lib/src/summary/format.fbs
@@ -1886,8 +1886,6 @@
 
   variantField_2:[LinkedNode] (id: 2);
 
-  variantField_11:LinkedNode (id: 11);
-
   variantField_4:[LinkedNode] (id: 4);
 
   variantField_6:LinkedNode (id: 6);
@@ -1914,18 +1912,12 @@
 
   variantField_13:LinkedNode (id: 13);
 
-  variantField_33:uint (id: 33);
-
-  variantField_32:uint (id: 32);
-
-  variantField_35:[string] (id: 35);
+  variantField_33:[string] (id: 33);
 
   variantField_29:LinkedNodeCommentType (id: 29);
 
   variantField_3:[LinkedNode] (id: 3);
 
-  variantField_19:uint (id: 19);
-
   variantField_10:LinkedNode (id: 10);
 
   variantField_26:LinkedNodeFormalParameterKind (id: 26);
@@ -1938,6 +1930,8 @@
 
   variantField_1:string (id: 1);
 
+  variantField_36:uint (id: 36);
+
   variantField_16:uint (id: 16);
 
   variantField_30:string (id: 30);
@@ -1946,7 +1940,7 @@
 
   kind:LinkedNodeKind (id: 0);
 
-  variantField_36:[string] (id: 36);
+  variantField_34:[string] (id: 34);
 
   name:string (id: 37);
 
@@ -1954,11 +1948,15 @@
 
   variantField_31:bool (id: 31);
 
-  variantField_38:UnlinkedTokenType (id: 38);
+  variantField_35:UnlinkedTokenType (id: 35);
 
-  variantField_34:TopLevelInferenceError (id: 34);
+  variantField_32:TopLevelInferenceError (id: 32);
+
+  variantField_11:LinkedNode (id: 11);
 
   variantField_22:string (id: 22);
+
+  variantField_19:uint (id: 19);
 }
 
 /// Information about a group of libraries linked together, for example because
@@ -2036,13 +2034,10 @@
 
 /// Information about a single library in a [LinkedNodeLibrary].
 table LinkedNodeUnit {
-  isNNBD:bool (id: 5);
+  isNNBD:bool (id: 4);
 
   isSynthetic:bool (id: 3);
 
-  /// Offsets of the first character of each line in the source code.
-  lineStarts:[uint] (id: 4);
-
   node:LinkedNode (id: 2);
 
   tokens:UnlinkedTokens (id: 1);
@@ -2745,6 +2740,26 @@
   uriOffset:uint (id: 3);
 }
 
+table UnlinkedInformativeData {
+  variantField_2:uint (id: 2);
+
+  variantField_3:uint (id: 3);
+
+  variantField_1:uint (id: 1);
+
+  variantField_4:[string] (id: 4);
+
+  /// The kind of the node.
+  kind:LinkedNodeKind (id: 0);
+
+  variantField_5:uint (id: 5);
+
+  variantField_6:uint (id: 6);
+
+  /// Offsets of the first character of each line in the source code.
+  variantField_7:[uint] (id: 7);
+}
+
 /// Unlinked summary information about a function parameter.
 table UnlinkedParam {
   /// Annotations for this parameter.
@@ -3093,6 +3108,8 @@
   /// URIs of `import` directives.
   imports:[string] (id: 2);
 
+  informativeData:[UnlinkedInformativeData] (id: 7);
+
   /// Offsets of the first character of each line in the source code.
   lineStarts:[uint] (id: 5);
 
diff --git a/pkg/analyzer/lib/src/summary/idl.dart b/pkg/analyzer/lib/src/summary/idl.dart
index 1dc7354..6590b07 100644
--- a/pkg/analyzer/lib/src/summary/idl.dart
+++ b/pkg/analyzer/lib/src/summary/idl.dart
@@ -822,32 +822,6 @@
   @VariantId(2, variant: LinkedNodeKind.adjacentStrings)
   List<LinkedNode> get adjacentStrings_strings;
 
-  @VariantId(11, variantList: [
-    LinkedNodeKind.classDeclaration,
-    LinkedNodeKind.classTypeAlias,
-    LinkedNodeKind.constructorDeclaration,
-    LinkedNodeKind.declaredIdentifier,
-    LinkedNodeKind.enumDeclaration,
-    LinkedNodeKind.enumConstantDeclaration,
-    LinkedNodeKind.exportDirective,
-    LinkedNodeKind.fieldDeclaration,
-    LinkedNodeKind.functionDeclaration,
-    LinkedNodeKind.functionTypeAlias,
-    LinkedNodeKind.genericTypeAlias,
-    LinkedNodeKind.importDirective,
-    LinkedNodeKind.libraryDirective,
-    LinkedNodeKind.methodDeclaration,
-    LinkedNodeKind.mixinDeclaration,
-    LinkedNodeKind.partDirective,
-    LinkedNodeKind.partOfDirective,
-    LinkedNodeKind.topLevelVariableDeclaration,
-    LinkedNodeKind.typeParameter,
-    LinkedNodeKind.variableDeclaration,
-    LinkedNodeKind.variableDeclarationList,
-  ])
-  @informative
-  LinkedNode get annotatedNode_comment;
-
   @VariantId(4, variantList: [
     LinkedNodeKind.classDeclaration,
     LinkedNodeKind.classTypeAlias,
@@ -1017,52 +991,10 @@
   @VariantId(8, variant: LinkedNodeKind.classTypeAlias)
   LinkedNode get classTypeAlias_withClause;
 
-  @VariantId(33, variantList: [
-    LinkedNodeKind.classDeclaration,
-    LinkedNodeKind.classTypeAlias,
-    LinkedNodeKind.compilationUnit,
-    LinkedNodeKind.constructorDeclaration,
-    LinkedNodeKind.defaultFormalParameter,
-    LinkedNodeKind.enumDeclaration,
-    LinkedNodeKind.fieldFormalParameter,
-    LinkedNodeKind.functionDeclaration,
-    LinkedNodeKind.functionTypeAlias,
-    LinkedNodeKind.functionTypedFormalParameter,
-    LinkedNodeKind.genericTypeAlias,
-    LinkedNodeKind.methodDeclaration,
-    LinkedNodeKind.mixinDeclaration,
-    LinkedNodeKind.simpleFormalParameter,
-    LinkedNodeKind.typeParameter,
-    LinkedNodeKind.variableDeclaration,
-  ])
-  @informative
-  int get codeLength;
-
-  @VariantId(32, variantList: [
-    LinkedNodeKind.classDeclaration,
-    LinkedNodeKind.classTypeAlias,
-    LinkedNodeKind.compilationUnit,
-    LinkedNodeKind.constructorDeclaration,
-    LinkedNodeKind.defaultFormalParameter,
-    LinkedNodeKind.enumDeclaration,
-    LinkedNodeKind.fieldFormalParameter,
-    LinkedNodeKind.functionDeclaration,
-    LinkedNodeKind.functionTypeAlias,
-    LinkedNodeKind.functionTypedFormalParameter,
-    LinkedNodeKind.genericTypeAlias,
-    LinkedNodeKind.methodDeclaration,
-    LinkedNodeKind.mixinDeclaration,
-    LinkedNodeKind.simpleFormalParameter,
-    LinkedNodeKind.typeParameter,
-    LinkedNodeKind.variableDeclaration,
-  ])
-  @informative
-  int get codeOffset;
-
   @VariantId(2, variant: LinkedNodeKind.comment)
   List<LinkedNode> get comment_references;
 
-  @VariantId(35, variant: LinkedNodeKind.comment)
+  @VariantId(33, variant: LinkedNodeKind.comment)
   List<String> get comment_tokens;
 
   @VariantId(29, variant: LinkedNodeKind.comment)
@@ -1107,20 +1039,12 @@
   @VariantId(8, variant: LinkedNodeKind.constructorDeclaration)
   LinkedNode get constructorDeclaration_parameters;
 
-  @VariantId(19, variant: LinkedNodeKind.constructorDeclaration)
-  @informative
-  int get constructorDeclaration_periodOffset;
-
   @VariantId(9, variant: LinkedNodeKind.constructorDeclaration)
   LinkedNode get constructorDeclaration_redirectedConstructor;
 
   @VariantId(10, variant: LinkedNodeKind.constructorDeclaration)
   LinkedNode get constructorDeclaration_returnType;
 
-  @VariantId(17, variant: LinkedNodeKind.constructorDeclaration)
-  @informative
-  int get constructorDeclaration_returnTypeOffset;
-
   @VariantId(6, variant: LinkedNodeKind.constructorFieldInitializer)
   LinkedNode get constructorFieldInitializer_expression;
 
@@ -1374,6 +1298,37 @@
   @VariantId(7, variant: LinkedNodeKind.indexExpression)
   LinkedNode get indexExpression_target;
 
+  @VariantId(36, variantList: [
+    LinkedNodeKind.classDeclaration,
+    LinkedNodeKind.classTypeAlias,
+    LinkedNodeKind.compilationUnit,
+    LinkedNodeKind.compilationUnit,
+    LinkedNodeKind.constructorDeclaration,
+    LinkedNodeKind.defaultFormalParameter,
+    LinkedNodeKind.enumConstantDeclaration,
+    LinkedNodeKind.enumDeclaration,
+    LinkedNodeKind.exportDirective,
+    LinkedNodeKind.fieldDeclaration,
+    LinkedNodeKind.fieldFormalParameter,
+    LinkedNodeKind.functionDeclaration,
+    LinkedNodeKind.functionTypedFormalParameter,
+    LinkedNodeKind.functionTypeAlias,
+    LinkedNodeKind.genericTypeAlias,
+    LinkedNodeKind.importDirective,
+    LinkedNodeKind.libraryDirective,
+    LinkedNodeKind.methodDeclaration,
+    LinkedNodeKind.mixinDeclaration,
+    LinkedNodeKind.partDirective,
+    LinkedNodeKind.partOfDirective,
+    LinkedNodeKind.simpleFormalParameter,
+    LinkedNodeKind.topLevelVariableDeclaration,
+    LinkedNodeKind.typeParameter,
+    LinkedNodeKind.variableDeclaration,
+    LinkedNodeKind.variableDeclarationList,
+  ])
+  @informative
+  int get informativeId;
+
   @VariantId(27, variantList: [
     LinkedNodeKind.fieldFormalParameter,
     LinkedNodeKind.functionTypedFormalParameter,
@@ -1472,7 +1427,7 @@
   @VariantId(6, variant: LinkedNodeKind.mixinDeclaration)
   LinkedNode get mixinDeclaration_onClause;
 
-  @VariantId(36, variant: LinkedNodeKind.mixinDeclaration)
+  @VariantId(34, variant: LinkedNodeKind.mixinDeclaration)
   List<String> get mixinDeclaration_superInvokedNames;
 
   @Id(37)
@@ -1484,30 +1439,7 @@
   @VariantId(7, variant: LinkedNodeKind.namedExpression)
   LinkedNode get namedExpression_name;
 
-  @VariantId(16, variantList: [
-    LinkedNodeKind.classDeclaration,
-    LinkedNodeKind.classTypeAlias,
-    LinkedNodeKind.constructorDeclaration,
-    LinkedNodeKind.enumConstantDeclaration,
-    LinkedNodeKind.enumDeclaration,
-    LinkedNodeKind.exportDirective,
-    LinkedNodeKind.fieldFormalParameter,
-    LinkedNodeKind.functionDeclaration,
-    LinkedNodeKind.functionTypedFormalParameter,
-    LinkedNodeKind.functionTypeAlias,
-    LinkedNodeKind.genericTypeAlias,
-    LinkedNodeKind.importDirective,
-    LinkedNodeKind.methodDeclaration,
-    LinkedNodeKind.mixinDeclaration,
-    LinkedNodeKind.partDirective,
-    LinkedNodeKind.simpleFormalParameter,
-    LinkedNodeKind.typeParameter,
-    LinkedNodeKind.variableDeclaration,
-  ])
-  @informative
-  int get nameOffset;
-
-  @VariantId(36, variantList: [
+  @VariantId(34, variantList: [
     LinkedNodeKind.hideCombinator,
     LinkedNodeKind.showCombinator,
     LinkedNodeKind.symbolLiteral,
@@ -1538,14 +1470,6 @@
   @VariantId(6, variant: LinkedNodeKind.nativeFunctionBody)
   LinkedNode get nativeFunctionBody_stringLiteral;
 
-  @VariantId(14, variantList: [
-    LinkedNodeKind.fieldFormalParameter,
-    LinkedNodeKind.functionTypedFormalParameter,
-    LinkedNodeKind.simpleFormalParameter,
-  ])
-  @informative
-  LinkedNode get normalFormalParameter_comment;
-
   @VariantId(4, variantList: [
     LinkedNodeKind.fieldFormalParameter,
     LinkedNodeKind.functionTypedFormalParameter,
@@ -1649,7 +1573,7 @@
   @VariantId(6, variant: LinkedNodeKind.spreadElement)
   LinkedNode get spreadElement_expression;
 
-  @VariantId(38, variant: LinkedNodeKind.spreadElement)
+  @VariantId(35, variant: LinkedNodeKind.spreadElement)
   UnlinkedTokenType get spreadElement_spreadOperator;
 
   @VariantId(2, variant: LinkedNodeKind.stringInterpolation)
@@ -1691,7 +1615,7 @@
   @VariantId(6, variant: LinkedNodeKind.throwExpression)
   LinkedNode get throwExpression_expression;
 
-  @VariantId(34, variantList: [
+  @VariantId(32, variantList: [
     LinkedNodeKind.simpleFormalParameter,
     LinkedNodeKind.variableDeclaration,
   ])
@@ -1742,6 +1666,11 @@
   @VariantId(2, variant: LinkedNodeKind.typeParameterList)
   List<LinkedNode> get typeParameterList_typeParameters;
 
+  @VariantId(11, variantList: [
+    LinkedNodeKind.classDeclaration,
+  ])
+  LinkedNode get unused11;
+
   @VariantId(14, variantList: [
     LinkedNodeKind.exportDirective,
     LinkedNodeKind.importDirective,
@@ -2036,17 +1965,12 @@
 
 /// Information about a single library in a [LinkedNodeLibrary].
 abstract class LinkedNodeUnit extends base.SummaryClass {
-  @Id(5)
+  @Id(4)
   bool get isNNBD;
 
   @Id(3)
   bool get isSynthetic;
 
-  /// Offsets of the first character of each line in the source code.
-  @informative
-  @Id(4)
-  List<int> get lineStarts;
-
   @Id(2)
   LinkedNode get node;
 
@@ -3601,6 +3525,108 @@
   int get uriOffset;
 }
 
+@Variant('kind')
+abstract class UnlinkedInformativeData extends base.SummaryClass {
+  @VariantId(2, variantList: [
+    LinkedNodeKind.classDeclaration,
+    LinkedNodeKind.classTypeAlias,
+    LinkedNodeKind.compilationUnit,
+    LinkedNodeKind.constructorDeclaration,
+    LinkedNodeKind.defaultFormalParameter,
+    LinkedNodeKind.enumDeclaration,
+    LinkedNodeKind.fieldFormalParameter,
+    LinkedNodeKind.functionDeclaration,
+    LinkedNodeKind.functionTypeAlias,
+    LinkedNodeKind.functionTypedFormalParameter,
+    LinkedNodeKind.genericTypeAlias,
+    LinkedNodeKind.methodDeclaration,
+    LinkedNodeKind.mixinDeclaration,
+    LinkedNodeKind.simpleFormalParameter,
+    LinkedNodeKind.typeParameter,
+    LinkedNodeKind.variableDeclaration,
+  ])
+  int get codeLength;
+
+  @VariantId(3, variantList: [
+    LinkedNodeKind.classDeclaration,
+    LinkedNodeKind.classTypeAlias,
+    LinkedNodeKind.compilationUnit,
+    LinkedNodeKind.constructorDeclaration,
+    LinkedNodeKind.defaultFormalParameter,
+    LinkedNodeKind.enumDeclaration,
+    LinkedNodeKind.fieldFormalParameter,
+    LinkedNodeKind.functionDeclaration,
+    LinkedNodeKind.functionTypeAlias,
+    LinkedNodeKind.functionTypedFormalParameter,
+    LinkedNodeKind.genericTypeAlias,
+    LinkedNodeKind.methodDeclaration,
+    LinkedNodeKind.mixinDeclaration,
+    LinkedNodeKind.simpleFormalParameter,
+    LinkedNodeKind.typeParameter,
+    LinkedNodeKind.variableDeclaration,
+  ])
+  int get codeOffset;
+
+  @VariantId(1, variantList: [
+    LinkedNodeKind.exportDirective,
+    LinkedNodeKind.importDirective,
+    LinkedNodeKind.libraryDirective,
+    LinkedNodeKind.partDirective,
+    LinkedNodeKind.partOfDirective,
+  ])
+  int get directiveKeywordOffset;
+
+  @VariantId(4, variantList: [
+    LinkedNodeKind.classDeclaration,
+    LinkedNodeKind.classTypeAlias,
+    LinkedNodeKind.constructorDeclaration,
+    LinkedNodeKind.enumDeclaration,
+    LinkedNodeKind.enumConstantDeclaration,
+    LinkedNodeKind.fieldDeclaration,
+    LinkedNodeKind.functionDeclaration,
+    LinkedNodeKind.functionTypeAlias,
+    LinkedNodeKind.genericTypeAlias,
+    LinkedNodeKind.libraryDirective,
+    LinkedNodeKind.methodDeclaration,
+    LinkedNodeKind.mixinDeclaration,
+    LinkedNodeKind.topLevelVariableDeclaration,
+  ])
+  List<String> get documentationComment_tokens;
+
+  /// The kind of the node.
+  @Id(0)
+  LinkedNodeKind get kind;
+
+  @VariantId(1, variantList: [
+    LinkedNodeKind.classDeclaration,
+    LinkedNodeKind.classTypeAlias,
+    LinkedNodeKind.constructorDeclaration,
+    LinkedNodeKind.enumConstantDeclaration,
+    LinkedNodeKind.enumDeclaration,
+    LinkedNodeKind.fieldFormalParameter,
+    LinkedNodeKind.functionDeclaration,
+    LinkedNodeKind.functionTypedFormalParameter,
+    LinkedNodeKind.functionTypeAlias,
+    LinkedNodeKind.genericTypeAlias,
+    LinkedNodeKind.methodDeclaration,
+    LinkedNodeKind.mixinDeclaration,
+    LinkedNodeKind.simpleFormalParameter,
+    LinkedNodeKind.typeParameter,
+    LinkedNodeKind.variableDeclaration,
+  ])
+  int get nameOffset;
+
+  @VariantId(5, variant: LinkedNodeKind.constructorDeclaration)
+  int get constructorDeclaration_returnTypeOffset;
+
+  @VariantId(6, variant: LinkedNodeKind.constructorDeclaration)
+  int get constructorDeclaration_periodOffset;
+
+  /// Offsets of the first character of each line in the source code.
+  @VariantId(7, variant: LinkedNodeKind.compilationUnit)
+  List<int> get compilationUnit_lineStarts;
+}
+
 /// Unlinked summary information about a function parameter.
 abstract class UnlinkedParam extends base.SummaryClass {
   /// Annotations for this parameter.
@@ -4222,6 +4248,9 @@
   @Id(2)
   List<String> get imports;
 
+  @Id(7)
+  List<UnlinkedInformativeData> get informativeData;
+
   /// Offsets of the first character of each line in the source code.
   @informative
   @Id(5)
diff --git a/pkg/analyzer/lib/src/summary2/ast_binary_reader.dart b/pkg/analyzer/lib/src/summary2/ast_binary_reader.dart
index 864b976..44b9e83 100644
--- a/pkg/analyzer/lib/src/summary2/ast_binary_reader.dart
+++ b/pkg/analyzer/lib/src/summary2/ast_binary_reader.dart
@@ -66,12 +66,23 @@
   }
 
   SimpleIdentifier _declaredIdentifier(LinkedNode data) {
+    var informativeData = _unitContext.getInformativeData(data);
+    var offset = informativeData?.nameOffset ?? 0;
     return astFactory.simpleIdentifier(
-      TokenFactory.tokenFromString(data.name)..offset = data.nameOffset,
+      TokenFactory.tokenFromString(data.name)..offset = offset,
       isDeclaration: true,
     );
   }
 
+  Token _directiveKeyword(LinkedNode data, Keyword keyword, Token def) {
+    var informativeData = _unitContext.getInformativeData(data);
+    if (informativeData != null) {
+      return TokenFactory.tokenFromKeyword(keyword)
+        ..offset = informativeData.directiveKeywordOffset;
+    }
+    return def;
+  }
+
   Element _elementOfComponents(
     int rawElementIndex,
     LinkedNodeType definingTypeNode,
@@ -258,7 +269,7 @@
     timerAstBinaryReaderClass.start();
     try {
       var node = astFactory.classDeclaration(
-        _readNodeLazy(data.annotatedNode_comment),
+        _readDocumentationComment(data),
         _readNodeListLazy(data.annotatedNode_metadata),
         AstBinaryFlags.isAbstract(data.flags) ? _Tokens.ABSTRACT : null,
         _Tokens.CLASS,
@@ -283,7 +294,7 @@
     timerAstBinaryReaderClass.start();
     try {
       var node = astFactory.classTypeAlias(
-        _readNodeLazy(data.annotatedNode_comment),
+        _readDocumentationComment(data),
         _readNodeListLazy(data.annotatedNode_metadata),
         _Tokens.CLASS,
         _declaredIdentifier(data),
@@ -368,10 +379,13 @@
     SimpleIdentifier returnType = _readNode(
       data.constructorDeclaration_returnType,
     );
-    returnType.token.offset = data.constructorDeclaration_returnTypeOffset;
+
+    var informativeData = _unitContext.getInformativeData(data);
+    returnType.token.offset =
+        informativeData?.constructorDeclaration_returnTypeOffset ?? 0;
 
     var node = astFactory.constructorDeclaration(
-      _readNodeLazy(data.annotatedNode_comment),
+      _readDocumentationComment(data),
       _readNodeListLazy(data.annotatedNode_metadata),
       AstBinaryFlags.isExternal(data.flags) ? _Tokens.EXTERNAL : null,
       AstBinaryFlags.isConst(data.flags) ? _Tokens.CONST : null,
@@ -380,7 +394,7 @@
       data.name.isNotEmpty
           ? Token(
               TokenType.PERIOD,
-              data.constructorDeclaration_periodOffset,
+              informativeData?.constructorDeclaration_periodOffset ?? 0,
             )
           : null,
       data.name.isNotEmpty ? _declaredIdentifier(data) : null,
@@ -432,7 +446,7 @@
 
   DeclaredIdentifier _read_declaredIdentifier(LinkedNode data) {
     return astFactory.declaredIdentifier(
-      _readNode(data.annotatedNode_comment),
+      _readDocumentationComment(data),
       _readNodeList(data.annotatedNode_metadata),
       _Tokens.choose(
         AstBinaryFlags.isConst(data.flags),
@@ -495,7 +509,7 @@
 
   EnumConstantDeclaration _read_enumConstantDeclaration(LinkedNode data) {
     var node = astFactory.enumConstantDeclaration(
-      _readNodeLazy(data.annotatedNode_comment),
+      _readDocumentationComment(data),
       _readNodeListLazy(data.annotatedNode_metadata),
       _declaredIdentifier(data),
     );
@@ -505,7 +519,7 @@
 
   EnumDeclaration _read_enumDeclaration(LinkedNode data) {
     var node = astFactory.enumDeclaration(
-      _readNodeLazy(data.annotatedNode_comment),
+      _readDocumentationComment(data),
       _readNodeListLazy(data.annotatedNode_metadata),
       _Tokens.ENUM,
       _declaredIdentifier(data),
@@ -522,9 +536,9 @@
     _isReadingDirective = true;
     try {
       var node = astFactory.exportDirective(
-        _readNode(data.annotatedNode_comment),
+        _readDocumentationComment(data),
         _readNodeListLazy(data.annotatedNode_metadata),
-        _Tokens.EXPORT,
+        _directiveKeyword(data, Keyword.EXPORT, _Tokens.EXPORT),
         _readNode(data.uriBasedDirective_uri),
         _readNodeList(data.namespaceDirective_configurations),
         _readNodeList(data.namespaceDirective_combinators),
@@ -573,7 +587,7 @@
 
   FieldDeclaration _read_fieldDeclaration(LinkedNode data) {
     var node = astFactory.fieldDeclaration2(
-      comment: _readNodeLazy(data.annotatedNode_comment),
+      comment: _readDocumentationComment(data),
       covariantKeyword:
           AstBinaryFlags.isCovariant(data.flags) ? _Tokens.COVARIANT : null,
       fieldList: _readNode(data.fieldDeclaration_fields),
@@ -603,7 +617,7 @@
         _Tokens.VAR,
       ),
       metadata: _readNodeList(data.normalFormalParameter_metadata),
-      comment: _readNode(data.normalFormalParameter_comment),
+      comment: _readDocumentationComment(data),
       type: _readNode(data.fieldFormalParameter_type),
       parameters: _readNode(data.fieldFormalParameter_formalParameters),
       requiredKeyword:
@@ -696,7 +710,7 @@
     timerAstBinaryReaderFunctionDeclaration.start();
     try {
       var node = astFactory.functionDeclaration(
-        _readNodeLazy(data.annotatedNode_comment),
+        _readDocumentationComment(data),
         _readNodeListLazy(data.annotatedNode_metadata),
         AstBinaryFlags.isExternal(data.flags) ? _Tokens.EXTERNAL : null,
         _readNodeLazy(data.functionDeclaration_returnType),
@@ -744,7 +758,7 @@
 
   FunctionTypeAlias _read_functionTypeAlias(LinkedNode data) {
     var node = astFactory.functionTypeAlias(
-      _readNodeLazy(data.annotatedNode_comment),
+      _readDocumentationComment(data),
       _readNodeListLazy(data.annotatedNode_metadata),
       _Tokens.TYPEDEF,
       _readNodeLazy(data.functionTypeAlias_returnType),
@@ -764,7 +778,7 @@
   FunctionTypedFormalParameter _read_functionTypedFormalParameter(
       LinkedNode data) {
     var node = astFactory.functionTypedFormalParameter2(
-      comment: _readNodeLazy(data.normalFormalParameter_comment),
+      comment: _readDocumentationComment(data),
       covariantKeyword:
           AstBinaryFlags.isCovariant(data.flags) ? _Tokens.COVARIANT : null,
       identifier: _declaredIdentifier(data),
@@ -795,7 +809,7 @@
       for (var i = 0; i < dataList.length; ++i) {
         var data = dataList[i];
         typeParameters[i] = astFactory.typeParameter(
-          _readNode(data.annotatedNode_comment),
+          _readDocumentationComment(data),
           _readNodeList(data.annotatedNode_metadata),
           _declaredIdentifier(data),
           data.typeParameter_bound != null ? _Tokens.EXTENDS : null,
@@ -841,7 +855,7 @@
 
   GenericTypeAlias _read_genericTypeAlias(LinkedNode data) {
     var node = astFactory.genericTypeAlias(
-      _readNodeLazy(data.annotatedNode_comment),
+      _readDocumentationComment(data),
       _readNodeListLazy(data.annotatedNode_metadata),
       _Tokens.TYPEDEF,
       _declaredIdentifier(data),
@@ -911,9 +925,9 @@
       }
 
       var node = astFactory.importDirective(
-        _readNode(data.annotatedNode_comment),
+        _readDocumentationComment(data),
         _readNodeListLazy(data.annotatedNode_metadata),
-        _Tokens.IMPORT,
+        _directiveKeyword(data, Keyword.IMPORT, _Tokens.IMPORT),
         _readNode(data.uriBasedDirective_uri),
         _readNodeList(data.namespaceDirective_configurations),
         AstBinaryFlags.isDeferred(data.flags) ? _Tokens.DEFERRED : null,
@@ -1021,7 +1035,7 @@
     _isReadingDirective = true;
     try {
       var node = astFactory.libraryDirective(
-        _readNode(data.annotatedNode_comment),
+        _unitContext.createComment(data),
         _readNodeListLazy(data.annotatedNode_metadata),
         _Tokens.LIBRARY,
         _readNode(data.libraryDirective_name),
@@ -1067,7 +1081,7 @@
 
   MethodDeclaration _read_methodDeclaration(LinkedNode data) {
     var node = astFactory.methodDeclaration(
-      _readNodeLazy(data.annotatedNode_comment),
+      _readDocumentationComment(data),
       _readNodeListLazy(data.annotatedNode_metadata),
       AstBinaryFlags.isExternal(data.flags) ? _Tokens.EXTERNAL : null,
       AstBinaryFlags.isStatic(data.flags) ? _Tokens.STATIC : null,
@@ -1109,7 +1123,7 @@
     timerAstBinaryReaderMixin.start();
     try {
       var node = astFactory.mixinDeclaration(
-        _readNodeLazy(data.annotatedNode_comment),
+        _readDocumentationComment(data),
         _readNodeListLazy(data.annotatedNode_metadata),
         _Tokens.MIXIN,
         _declaredIdentifier(data),
@@ -1176,7 +1190,7 @@
     _isReadingDirective = true;
     try {
       var node = astFactory.partDirective(
-        _readNode(data.annotatedNode_comment),
+        _readDocumentationComment(data),
         _readNodeListLazy(data.annotatedNode_metadata),
         _Tokens.PART,
         _readNode(data.uriBasedDirective_uri),
@@ -1195,7 +1209,7 @@
     _isReadingDirective = true;
     try {
       var node = astFactory.partOfDirective(
-        _readNode(data.annotatedNode_comment),
+        _readDocumentationComment(data),
         _readNodeListLazy(data.annotatedNode_metadata),
         _Tokens.PART,
         _Tokens.OF,
@@ -1314,7 +1328,7 @@
       type: _readNode(data.simpleFormalParameter_type),
       covariantKeyword:
           AstBinaryFlags.isCovariant(data.flags) ? _Tokens.COVARIANT : null,
-      comment: _readNode(data.normalFormalParameter_comment),
+      comment: _readDocumentationComment(data),
       metadata: _readNodeList(data.normalFormalParameter_metadata),
       keyword: _Tokens.choose(
         AstBinaryFlags.isConst(data.flags),
@@ -1439,7 +1453,7 @@
     timerAstBinaryReaderTopLevelVar.start();
     try {
       var node = astFactory.topLevelVariableDeclaration(
-        _readNodeLazy(data.annotatedNode_comment),
+        _readDocumentationComment(data),
         _readNodeListLazy(data.annotatedNode_metadata),
         _readNode(data.topLevelVariableDeclaration_variableList),
         _Tokens.SEMICOLON,
@@ -1486,7 +1500,7 @@
 
   TypeParameter _read_typeParameter(LinkedNode data) {
     var node = astFactory.typeParameter(
-      _readNodeLazy(data.annotatedNode_comment),
+      _readDocumentationComment(data),
       _readNodeListLazy(data.annotatedNode_metadata),
       _declaredIdentifier(data),
       _Tokens.EXTENDS,
@@ -1517,7 +1531,7 @@
 
   VariableDeclarationList _read_variableDeclarationList(LinkedNode data) {
     var node = astFactory.variableDeclarationList2(
-      comment: _readNodeLazy(data.annotatedNode_comment),
+      comment: _readDocumentationComment(data),
       keyword: _Tokens.choose(
         AstBinaryFlags.isConst(data.flags),
         _Tokens.CONST,
@@ -1569,6 +1583,10 @@
     );
   }
 
+  Comment _readDocumentationComment(LinkedNode data) {
+    return null;
+  }
+
   AstNode _readNode(LinkedNode data) {
     if (data == null) return null;
 
diff --git a/pkg/analyzer/lib/src/summary2/ast_binary_writer.dart b/pkg/analyzer/lib/src/summary2/ast_binary_writer.dart
index ea3ab89..ac696dd 100644
--- a/pkg/analyzer/lib/src/summary2/ast_binary_writer.dart
+++ b/pkg/analyzer/lib/src/summary2/ast_binary_writer.dart
@@ -12,6 +12,7 @@
 import 'package:analyzer/src/summary/format.dart';
 import 'package:analyzer/src/summary/idl.dart';
 import 'package:analyzer/src/summary2/ast_binary_flags.dart';
+import 'package:analyzer/src/summary2/informative_data.dart';
 import 'package:analyzer/src/summary2/lazy_ast.dart';
 import 'package:analyzer/src/summary2/linking_bundle_context.dart';
 import 'package:analyzer/src/summary2/tokens_writer.dart';
@@ -274,8 +275,8 @@
       compilationUnit_declarations: _writeNodeList(node.declarations),
       compilationUnit_directives: _writeNodeList(node.directives),
       compilationUnit_scriptTag: node.scriptTag?.accept(this),
+      informativeId: getInformativeId(node),
     );
-    _storeCodeOffsetLength(builder, node);
     return builder;
   }
 
@@ -311,6 +312,7 @@
       constructorDeclaration_redirectedConstructor:
           node.redirectedConstructor?.accept(this),
       constructorDeclaration_returnType: node.returnType.accept(this),
+      informativeId: getInformativeId(node),
     );
     builder.flags = AstBinaryFlags.encode(
       hasSeparatorColon: node.separator?.type == TokenType.COLON,
@@ -320,15 +322,8 @@
       isExternal: node.externalKeyword != null,
       isFactory: node.factoryKeyword != null,
     );
-    builder.constructorDeclaration_returnTypeOffset = node.returnType.offset;
-    if (node.name != null) {
-      builder
-        ..constructorDeclaration_periodOffset = node.period.offset
-        ..name = node.name.name
-        ..nameOffset = node.name.offset;
-    }
+    builder.name = node.name?.name;
     _storeClassMember(builder, node);
-    _storeCodeOffsetLength(builder, node);
     return builder;
   }
 
@@ -387,11 +382,11 @@
       defaultFormalParameter_defaultValue: node.defaultValue?.accept(this),
       defaultFormalParameter_kind: _toParameterKind(node),
       defaultFormalParameter_parameter: node.parameter.accept(this),
+      informativeId: getInformativeId(node),
     );
     builder.flags = AstBinaryFlags.encode(
       hasInitializer: node.defaultValue != null,
     );
-    _storeCodeOffsetLength(builder, node);
     return builder;
   }
 
@@ -432,7 +427,7 @@
   @override
   LinkedNodeBuilder visitEnumConstantDeclaration(EnumConstantDeclaration node) {
     var builder = LinkedNodeBuilder.enumConstantDeclaration(
-      nameOffset: node.name.offset,
+      informativeId: getInformativeId(node),
     );
     builder..name = node.name.name;
     _storeDeclaration(builder, node);
@@ -495,6 +490,7 @@
   LinkedNodeBuilder visitFieldDeclaration(FieldDeclaration node) {
     var builder = LinkedNodeBuilder.fieldDeclaration(
       fieldDeclaration_fields: node.fields.accept(this),
+      informativeId: getInformativeId(node),
     );
     builder.flags = AstBinaryFlags.encode(
       isCovariant: node.covariantKeyword != null,
@@ -859,6 +855,7 @@
     timerAstBinaryWriterDirective.start();
     try {
       var builder = LinkedNodeBuilder.libraryDirective(
+        informativeId: getInformativeId(node),
         libraryDirective_name: node.name.accept(this),
       );
       _storeDirective(builder, node);
@@ -899,9 +896,7 @@
       methodDeclaration_typeParameters: node.typeParameters?.accept(this),
       methodDeclaration_formalParameters: node.parameters?.accept(this),
     );
-    builder
-      ..name = node.name.name
-      ..nameOffset = node.name.offset;
+    builder.name = node.name.name;
     builder.flags = AstBinaryFlags.encode(
       isAbstract: node.body is EmptyFunctionBody,
       isAsync: node.body?.isAsynchronous ?? false,
@@ -913,7 +908,7 @@
       isStatic: node.isStatic,
     );
     _storeClassMember(builder, node);
-    _storeCodeOffsetLength(builder, node);
+    _storeInformativeId(builder, node);
     _writeActualReturnType(builder, node);
     return builder;
   }
@@ -1259,6 +1254,7 @@
     timerAstBinaryWriterTopVar.start();
     try {
       var builder = LinkedNodeBuilder.topLevelVariableDeclaration(
+        informativeId: getInformativeId(node),
         topLevelVariableDeclaration_variableList: node.variables?.accept(this),
       );
       _storeCompilationUnitMember(builder, node);
@@ -1304,12 +1300,10 @@
     var builder = LinkedNodeBuilder.typeParameter(
       typeParameter_bound: node.bound?.accept(this),
       typeParameter_defaultType: _writeType(LazyAst.getDefaultType(node)),
+      informativeId: getInformativeId(node),
     );
-    builder
-      ..name = node.name.name
-      ..nameOffset = node.name.offset;
+    builder.name = node.name.name;
     _storeDeclaration(builder, node);
-    _storeCodeOffsetLength(builder, node);
     return builder;
   }
 
@@ -1339,14 +1333,13 @@
     }
 
     var builder = LinkedNodeBuilder.variableDeclaration(
+      informativeId: getInformativeId(node),
       variableDeclaration_initializer: initializer?.accept(this),
     );
     builder.flags = AstBinaryFlags.encode(
       hasInitializer: node.initializer != null,
     );
-    builder
-      ..name = node.name.name
-      ..nameOffset = node.name.offset;
+    builder.name = node.name.name;
     builder.topLevelTypeInferenceError = LazyAst.getTypeInferenceError(node);
     _writeActualType(builder, node);
     _storeInheritsCovariant(builder, node);
@@ -1366,7 +1359,6 @@
       isVar: node.keyword?.keyword == Keyword.VAR,
     );
     _storeAnnotatedNode(builder, node);
-    _storeCodeOffsetLengthVariables(builder, node);
     return builder;
   }
 
@@ -1434,9 +1426,7 @@
   }
 
   void _storeAnnotatedNode(LinkedNodeBuilder builder, AnnotatedNode node) {
-    builder
-      ..annotatedNode_comment = node.documentationComment?.accept(this)
-      ..annotatedNode_metadata = _writeNodeList(node.metadata);
+    builder.annotatedNode_metadata = _writeNodeList(node.metadata);
   }
 
   void _storeClassMember(LinkedNodeBuilder builder, ClassMember node) {
@@ -1455,23 +1445,6 @@
     _storeIsSimpleBounded(builder, node);
   }
 
-  void _storeCodeOffsetLength(LinkedNodeBuilder builder, AstNode node) {
-    builder.codeOffset = node.offset;
-    builder.codeLength = node.length;
-  }
-
-  void _storeCodeOffsetLengthVariables(
-      LinkedNodeBuilder builder, VariableDeclarationList node) {
-    var builders = builder.variableDeclarationList_variables;
-    for (var i = 0; i < builders.length; ++i) {
-      var variableBuilder = builders[i];
-      var variableNode = node.variables[i];
-      var offset = (i == 0 ? node.parent : variableNode).offset;
-      variableBuilder.codeOffset = offset;
-      variableBuilder.codeLength = variableNode.end - offset;
-    }
-  }
-
   void _storeCompilationUnitMember(
       LinkedNodeBuilder builder, CompilationUnitMember node) {
     _storeDeclaration(builder, node);
@@ -1486,6 +1459,7 @@
 
   void _storeDirective(LinkedNodeBuilder builder, Directive node) {
     _storeAnnotatedNode(builder, node);
+    _storeInformativeId(builder, node);
   }
 
   void _storeExpression(LinkedNodeBuilder builder, Expression node) {
@@ -1500,7 +1474,6 @@
   void _storeForLoopParts(LinkedNodeBuilder builder, ForLoopParts node) {}
 
   void _storeFormalParameter(LinkedNodeBuilder builder, FormalParameter node) {
-    _storeCodeOffsetLength(builder, node);
     _writeActualType(builder, node);
   }
 
@@ -1520,6 +1493,10 @@
 
   void _storeFunctionBody(LinkedNodeBuilder builder, FunctionBody node) {}
 
+  void _storeInformativeId(LinkedNodeBuilder builder, AstNode node) {
+    builder.informativeId = getInformativeId(node);
+  }
+
   void _storeInheritsCovariant(LinkedNodeBuilder builder, AstNode node) {
     var value = LazyAst.getInheritsCovariant(node);
     builder.inheritsCovariant = value;
@@ -1543,10 +1520,8 @@
   void _storeNamedCompilationUnitMember(
       LinkedNodeBuilder builder, NamedCompilationUnitMember node) {
     _storeCompilationUnitMember(builder, node);
-    _storeCodeOffsetLength(builder, node);
-    builder
-      ..name = node.name.name
-      ..nameOffset = node.name.offset;
+    _storeInformativeId(builder, node);
+    builder.name = node.name.name;
   }
 
   void _storeNamespaceDirective(
@@ -1555,15 +1530,13 @@
     builder
       ..namespaceDirective_combinators = _writeNodeList(node.combinators)
       ..namespaceDirective_configurations = _writeNodeList(node.configurations)
-      ..namespaceDirective_selectedUri = LazyDirective.getSelectedUri(node)
-      ..nameOffset = node.offset;
+      ..namespaceDirective_selectedUri = LazyDirective.getSelectedUri(node);
   }
 
   void _storeNormalFormalParameter(
       LinkedNodeBuilder builder, NormalFormalParameter node, Token keyword) {
     _storeFormalParameter(builder, node);
     builder
-      ..normalFormalParameter_comment = node.documentationComment?.accept(this)
       ..flags = AstBinaryFlags.encode(
         isConst: keyword?.type == Keyword.CONST,
         isCovariant: node.covariantKeyword != null,
@@ -1571,8 +1544,8 @@
         isRequired: node.requiredKeyword != null,
         isVar: keyword?.type == Keyword.VAR,
       )
+      ..informativeId = getInformativeId(node)
       ..name = node.identifier?.name
-      ..nameOffset = node.identifier?.offset ?? 0
       ..normalFormalParameter_metadata = _writeNodeList(node.metadata);
   }
 
diff --git a/pkg/analyzer/lib/src/summary2/informative_data.dart b/pkg/analyzer/lib/src/summary2/informative_data.dart
new file mode 100644
index 0000000..a09494f
--- /dev/null
+++ b/pkg/analyzer/lib/src/summary2/informative_data.dart
@@ -0,0 +1,391 @@
+// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/ast/visitor.dart';
+import 'package:analyzer/src/summary/format.dart';
+
+/// Create informative data for nodes that need it, and set IDs of this
+/// data to the nodes.
+List<UnlinkedInformativeDataBuilder> createInformativeData(
+    CompilationUnit unit) {
+  var visitor = _SetInformativeId();
+  unit.accept(visitor);
+  return visitor.dataList;
+}
+
+/// If [createInformativeData] set the informative data identifier for the
+/// [node], return it, otherwise return zero.
+int getInformativeId(AstNode node) {
+  int id = node.getProperty(_SetInformativeId.ID);
+  return id ?? 0;
+}
+
+class _SetInformativeId extends SimpleAstVisitor<void> {
+  static final String ID = 'informativeId';
+
+  final List<UnlinkedInformativeDataBuilder> dataList = [];
+
+  void setData(AstNode node, UnlinkedInformativeDataBuilder data) {
+    var id = 1 + dataList.length;
+    node.setProperty(ID, id);
+    dataList.add(data);
+  }
+
+  @override
+  void visitClassDeclaration(ClassDeclaration node) {
+    setData(
+      node,
+      UnlinkedInformativeDataBuilder.classDeclaration(
+        codeOffset: node.offset,
+        codeLength: node.length,
+        documentationComment_tokens: _nodeCommentTokens(node),
+        nameOffset: node.name.offset,
+      ),
+    );
+
+    node.typeParameters?.accept(this);
+    node.members.accept(this);
+  }
+
+  @override
+  void visitClassTypeAlias(ClassTypeAlias node) {
+    setData(
+      node,
+      UnlinkedInformativeDataBuilder.classTypeAlias(
+        codeOffset: node.offset,
+        codeLength: node.length,
+        documentationComment_tokens: _nodeCommentTokens(node),
+        nameOffset: node.name.offset,
+      ),
+    );
+
+    node.typeParameters?.accept(this);
+  }
+
+  @override
+  void visitCompilationUnit(CompilationUnit node) {
+    setData(
+      node,
+      UnlinkedInformativeDataBuilder.compilationUnit(
+        codeOffset: node.offset,
+        codeLength: node.length,
+        compilationUnit_lineStarts: node.lineInfo.lineStarts,
+      ),
+    );
+
+    node.directives.accept(this);
+    node.declarations.accept(this);
+  }
+
+  @override
+  void visitConstructorDeclaration(ConstructorDeclaration node) {
+    setData(
+      node,
+      UnlinkedInformativeDataBuilder.constructorDeclaration(
+        codeOffset: node.offset,
+        codeLength: node.length,
+        documentationComment_tokens: _nodeCommentTokens(node),
+        nameOffset: node.name?.offset ?? 0,
+        constructorDeclaration_periodOffset: node.period?.offset ?? 0,
+        constructorDeclaration_returnTypeOffset: node.returnType.offset,
+      ),
+    );
+
+    node.parameters?.accept(this);
+  }
+
+  @override
+  void visitDefaultFormalParameter(DefaultFormalParameter node) {
+    setData(
+      node,
+      UnlinkedInformativeDataBuilder.defaultFormalParameter(
+        codeOffset: node.offset,
+        codeLength: node.length,
+      ),
+    );
+
+    node.parameter.accept(this);
+  }
+
+  @override
+  void visitEnumConstantDeclaration(EnumConstantDeclaration node) {
+    setData(
+      node,
+      UnlinkedInformativeDataBuilder.enumConstantDeclaration(
+        documentationComment_tokens: _nodeCommentTokens(node),
+        nameOffset: node.name.offset,
+      ),
+    );
+  }
+
+  @override
+  void visitEnumDeclaration(EnumDeclaration node) {
+    setData(
+      node,
+      UnlinkedInformativeDataBuilder.enumDeclaration(
+        codeOffset: node.offset,
+        codeLength: node.length,
+        documentationComment_tokens: _nodeCommentTokens(node),
+        nameOffset: node.name.offset,
+      ),
+    );
+
+    node.constants.accept(this);
+  }
+
+  @override
+  void visitExportDirective(ExportDirective node) {
+    setData(
+      node,
+      UnlinkedInformativeDataBuilder.exportDirective(
+        directiveKeywordOffset: node.keyword.offset,
+      ),
+    );
+  }
+
+  @override
+  void visitFieldDeclaration(FieldDeclaration node) {
+    setData(
+      node,
+      UnlinkedInformativeDataBuilder.fieldDeclaration(
+        documentationComment_tokens: _nodeCommentTokens(node),
+      ),
+    );
+
+    node.fields.accept(this);
+  }
+
+  @override
+  void visitFieldFormalParameter(FieldFormalParameter node) {
+    setData(
+      node,
+      UnlinkedInformativeDataBuilder.fieldFormalParameter(
+        codeOffset: node.offset,
+        codeLength: node.length,
+        nameOffset: node.identifier.offset,
+      ),
+    );
+  }
+
+  @override
+  void visitFormalParameterList(FormalParameterList node) {
+    node.parameters.accept(this);
+  }
+
+  @override
+  void visitFunctionDeclaration(FunctionDeclaration node) {
+    setData(
+      node,
+      UnlinkedInformativeDataBuilder.functionDeclaration(
+        codeOffset: node.offset,
+        codeLength: node.length,
+        documentationComment_tokens: _nodeCommentTokens(node),
+        nameOffset: node.name.offset,
+      ),
+    );
+
+    node.functionExpression.accept(this);
+  }
+
+  @override
+  void visitFunctionExpression(FunctionExpression node) {
+    node.typeParameters?.accept(this);
+    node.parameters?.accept(this);
+  }
+
+  @override
+  void visitFunctionTypeAlias(FunctionTypeAlias node) {
+    setData(
+      node,
+      UnlinkedInformativeDataBuilder.functionTypeAlias(
+        codeOffset: node.offset,
+        codeLength: node.length,
+        documentationComment_tokens: _nodeCommentTokens(node),
+        nameOffset: node.name.offset,
+      ),
+    );
+
+    node.typeParameters?.accept(this);
+    node.parameters.accept(this);
+  }
+
+  @override
+  void visitFunctionTypedFormalParameter(FunctionTypedFormalParameter node) {
+    setData(
+      node,
+      UnlinkedInformativeDataBuilder.functionTypedFormalParameter(
+        codeOffset: node.offset,
+        codeLength: node.length,
+        nameOffset: node.identifier.offset,
+      ),
+    );
+  }
+
+  @override
+  void visitGenericFunctionType(GenericFunctionType node) {
+    node.typeParameters?.accept(this);
+    node.parameters.accept(this);
+  }
+
+  @override
+  void visitGenericTypeAlias(GenericTypeAlias node) {
+    setData(
+      node,
+      UnlinkedInformativeDataBuilder.genericTypeAlias(
+        codeOffset: node.offset,
+        codeLength: node.length,
+        documentationComment_tokens: _nodeCommentTokens(node),
+        nameOffset: node.name.offset,
+      ),
+    );
+
+    node.typeParameters?.accept(this);
+    node.functionType?.accept(this);
+  }
+
+  @override
+  void visitImportDirective(ImportDirective node) {
+    setData(
+      node,
+      UnlinkedInformativeDataBuilder.importDirective(
+        directiveKeywordOffset: node.keyword.offset,
+      ),
+    );
+  }
+
+  @override
+  void visitLibraryDirective(LibraryDirective node) {
+    setData(
+      node,
+      UnlinkedInformativeDataBuilder.libraryDirective(
+        documentationComment_tokens: _nodeCommentTokens(node),
+      ),
+    );
+  }
+
+  @override
+  void visitMethodDeclaration(MethodDeclaration node) {
+    setData(
+      node,
+      UnlinkedInformativeDataBuilder.methodDeclaration(
+        codeOffset: node.offset,
+        codeLength: node.length,
+        documentationComment_tokens: _nodeCommentTokens(node),
+        nameOffset: node.name.offset,
+      ),
+    );
+
+    node.typeParameters?.accept(this);
+    node.parameters?.accept(this);
+  }
+
+  @override
+  void visitMixinDeclaration(MixinDeclaration node) {
+    setData(
+      node,
+      UnlinkedInformativeDataBuilder.mixinDeclaration(
+        codeOffset: node.offset,
+        codeLength: node.length,
+        documentationComment_tokens: _nodeCommentTokens(node),
+        nameOffset: node.name.offset,
+      ),
+    );
+
+    node.typeParameters?.accept(this);
+    node.members.accept(this);
+  }
+
+  @override
+  void visitPartDirective(PartDirective node) {
+    setData(
+      node,
+      UnlinkedInformativeDataBuilder.partDirective(
+        directiveKeywordOffset: node.keyword.offset,
+      ),
+    );
+  }
+
+  @override
+  void visitPartOfDirective(PartOfDirective node) {
+    setData(
+      node,
+      UnlinkedInformativeDataBuilder.partDirective(
+        directiveKeywordOffset: node.keyword.offset,
+      ),
+    );
+  }
+
+  @override
+  void visitSimpleFormalParameter(SimpleFormalParameter node) {
+    setData(
+      node,
+      UnlinkedInformativeDataBuilder.simpleFormalParameter(
+        codeOffset: node.offset,
+        codeLength: node.length,
+        nameOffset: node.identifier?.offset ?? 0,
+      ),
+    );
+  }
+
+  @override
+  void visitTopLevelVariableDeclaration(TopLevelVariableDeclaration node) {
+    setData(
+      node,
+      UnlinkedInformativeDataBuilder.topLevelVariableDeclaration(
+        documentationComment_tokens: _nodeCommentTokens(node),
+      ),
+    );
+
+    node.variables.accept(this);
+  }
+
+  @override
+  void visitTypeParameter(TypeParameter node) {
+    setData(
+      node,
+      UnlinkedInformativeDataBuilder.typeParameter(
+        codeOffset: node.offset,
+        codeLength: node.length,
+        nameOffset: node.name.offset,
+      ),
+    );
+  }
+
+  @override
+  void visitTypeParameterList(TypeParameterList node) {
+    node.typeParameters.accept(this);
+  }
+
+  @override
+  void visitVariableDeclaration(VariableDeclaration node) {
+    var variableList = node.parent as VariableDeclarationList;
+    var isFirst = identical(variableList.variables[0], node);
+    var codeOffset = (isFirst ? variableList.parent : node).offset;
+    var codeLength = node.end - codeOffset;
+
+    setData(
+      node,
+      UnlinkedInformativeDataBuilder.variableDeclaration(
+        codeOffset: codeOffset,
+        codeLength: codeLength,
+        nameOffset: node.name.offset,
+      ),
+    );
+  }
+
+  @override
+  void visitVariableDeclarationList(VariableDeclarationList node) {
+    node.variables.accept(this);
+  }
+
+  static List<String> _commentTokens(Comment comment) {
+    if (comment == null) return null;
+    return comment.tokens.map((token) => token.lexeme).toList();
+  }
+
+  static List<String> _nodeCommentTokens(AnnotatedNode node) {
+    return _commentTokens(node.documentationComment);
+  }
+}
diff --git a/pkg/analyzer/lib/src/summary2/lazy_ast.dart b/pkg/analyzer/lib/src/summary2/lazy_ast.dart
index 13d6511..57fa474 100644
--- a/pkg/analyzer/lib/src/summary2/lazy_ast.dart
+++ b/pkg/analyzer/lib/src/summary2/lazy_ast.dart
@@ -9,6 +9,7 @@
 import 'package:analyzer/src/summary/idl.dart';
 import 'package:analyzer/src/summary2/ast_binary_flags.dart';
 import 'package:analyzer/src/summary2/ast_binary_reader.dart';
+import 'package:analyzer/src/summary2/linked_unit_context.dart';
 
 /// Accessor for reading AST lazily, or read data that is stored in IDL, but
 /// cannot be stored in AST, like inferred types.
@@ -111,36 +112,36 @@
   }
 
   static int getCodeLength(
-    AstBinaryReader reader,
+    LinkedUnitContext context,
     ClassDeclaration node,
   ) {
-    if (reader.isLazy) {
+    var lazy = LazyClassDeclaration.get(node);
+    if (lazy != null) {
       var lazy = get(node);
-      return lazy.data.codeLength;
+      return context.getInformativeData(lazy.data)?.codeLength ?? 0;
     }
     return node.length;
   }
 
   static int getCodeOffset(
-    AstBinaryReader reader,
+    LinkedUnitContext context,
     ClassDeclaration node,
   ) {
-    if (reader.isLazy) {
+    var lazy = LazyClassDeclaration.get(node);
+    if (lazy != null) {
       var lazy = get(node);
-      return lazy.data.codeOffset;
+      return context.getInformativeData(lazy.data)?.codeOffset ?? 0;
     }
     return node.offset;
   }
 
   static void readDocumentationComment(
-    AstBinaryReader reader,
+    LinkedUnitContext context,
     ClassDeclaration node,
   ) {
     var lazy = LazyClassDeclaration.get(node);
     if (lazy != null && !lazy._hasDocumentationComment) {
-      node.documentationComment = reader.readNode(
-        lazy.data.annotatedNode_comment,
-      );
+      node.documentationComment = context.createComment(lazy.data);
       lazy._hasDocumentationComment = true;
     }
   }
@@ -238,36 +239,36 @@
   }
 
   static int getCodeLength(
-    AstBinaryReader reader,
+    LinkedUnitContext context,
     ClassTypeAlias node,
   ) {
-    if (reader.isLazy) {
+    var lazy = LazyClassTypeAlias.get(node);
+    if (lazy != null) {
       var lazy = get(node);
-      return lazy.data.codeLength;
+      return context.getInformativeData(lazy.data)?.codeLength ?? 0;
     }
     return node.length;
   }
 
   static int getCodeOffset(
-    AstBinaryReader reader,
+    LinkedUnitContext context,
     ClassTypeAlias node,
   ) {
-    if (reader.isLazy) {
+    var lazy = LazyClassTypeAlias.get(node);
+    if (lazy != null) {
       var lazy = get(node);
-      return lazy.data.codeOffset;
+      return context.getInformativeData(lazy.data)?.codeOffset ?? 0;
     }
     return node.offset;
   }
 
   static void readDocumentationComment(
-    AstBinaryReader reader,
+    LinkedUnitContext context,
     ClassTypeAlias node,
   ) {
     var lazy = LazyClassTypeAlias.get(node);
     if (lazy != null && !lazy._hasDocumentationComment) {
-      node.documentationComment = reader.readNode(
-        lazy.data.annotatedNode_comment,
-      );
+      node.documentationComment = context.createComment(lazy.data);
       lazy._hasDocumentationComment = true;
     }
   }
@@ -346,23 +347,25 @@
   }
 
   static int getCodeLength(
-    AstBinaryReader reader,
+    LinkedUnitContext context,
     CompilationUnit node,
   ) {
-    if (reader.isLazy) {
+    var lazy = LazyCompilationUnit.get(node);
+    if (lazy != null) {
       var lazy = get(node);
-      return lazy.data.codeLength;
+      return context.getInformativeData(lazy.data)?.codeLength ?? 0;
     }
     return node.length;
   }
 
   static int getCodeOffset(
-    AstBinaryReader reader,
+    LinkedUnitContext context,
     CompilationUnit node,
   ) {
-    if (reader.isLazy) {
+    var lazy = LazyCompilationUnit.get(node);
+    if (lazy != null) {
       var lazy = get(node);
-      return lazy.data.codeOffset;
+      return context.getInformativeData(lazy.data)?.codeOffset ?? 0;
     }
     return node.offset;
   }
@@ -391,23 +394,25 @@
   }
 
   static int getCodeLength(
-    AstBinaryReader reader,
+    LinkedUnitContext context,
     ConstructorDeclaration node,
   ) {
-    if (reader.isLazy) {
+    var lazy = LazyConstructorDeclaration.get(node);
+    if (lazy != null) {
       var lazy = get(node);
-      return lazy.data.codeLength;
+      return context.getInformativeData(lazy.data)?.codeLength ?? 0;
     }
     return node.length;
   }
 
   static int getCodeOffset(
-    AstBinaryReader reader,
+    LinkedUnitContext context,
     ConstructorDeclaration node,
   ) {
-    if (reader.isLazy) {
+    var lazy = LazyConstructorDeclaration.get(node);
+    if (lazy != null) {
       var lazy = get(node);
-      return lazy.data.codeOffset;
+      return context.getInformativeData(lazy.data)?.codeOffset ?? 0;
     }
     return node.offset;
   }
@@ -426,14 +431,12 @@
   }
 
   static void readDocumentationComment(
-    AstBinaryReader reader,
+    LinkedUnitContext context,
     ConstructorDeclaration node,
   ) {
     var lazy = LazyConstructorDeclaration.get(node);
     if (lazy != null && !lazy._hasDocumentationComment) {
-      node.documentationComment = reader.readNode(
-        lazy.data.annotatedNode_comment,
-      );
+      node.documentationComment = context.createComment(lazy.data);
       lazy._hasDocumentationComment = true;
     }
   }
@@ -513,15 +516,6 @@
     return node.getProperty(_key);
   }
 
-  static int getNameOffset(Directive node) {
-    var lazy = get(node);
-    if (lazy != null) {
-      return lazy.data.nameOffset;
-    } else {
-      return node.offset;
-    }
-  }
-
   static String getSelectedUri(UriBasedDirective node) {
     return node.getProperty(_uriKey);
   }
@@ -565,14 +559,12 @@
   }
 
   static void readDocumentationComment(
-    AstBinaryReader reader,
+    LinkedUnitContext context,
     EnumConstantDeclaration node,
   ) {
     var lazy = get(node);
     if (lazy != null && !lazy._hasDocumentationComment) {
-      node.documentationComment = reader.readNode(
-        lazy.data.annotatedNode_comment,
-      );
+      node.documentationComment = context.createComment(lazy.data);
       lazy._hasDocumentationComment = true;
     }
   }
@@ -613,23 +605,25 @@
   }
 
   static int getCodeLength(
-    AstBinaryReader reader,
+    LinkedUnitContext context,
     EnumDeclaration node,
   ) {
-    if (reader.isLazy) {
+    var lazy = LazyEnumDeclaration.get(node);
+    if (lazy != null) {
       var lazy = get(node);
-      return lazy.data.codeLength;
+      return context.getInformativeData(lazy.data)?.codeLength ?? 0;
     }
     return node.length;
   }
 
   static int getCodeOffset(
-    AstBinaryReader reader,
+    LinkedUnitContext context,
     EnumDeclaration node,
   ) {
-    if (reader.isLazy) {
+    var lazy = LazyEnumDeclaration.get(node);
+    if (lazy != null) {
       var lazy = get(node);
-      return lazy.data.codeOffset;
+      return context.getInformativeData(lazy.data)?.codeOffset ?? 0;
     }
     return node.offset;
   }
@@ -650,14 +644,12 @@
   }
 
   static void readDocumentationComment(
-    AstBinaryReader reader,
+    LinkedUnitContext context,
     EnumDeclaration node,
   ) {
     var lazy = get(node);
     if (lazy != null && !lazy._hasDocumentationComment) {
-      node.documentationComment = reader.readNode(
-        lazy.data.annotatedNode_comment,
-      );
+      node.documentationComment = context.createComment(lazy.data);
       lazy._hasDocumentationComment = true;
     }
   }
@@ -697,14 +689,12 @@
   }
 
   static void readDocumentationComment(
-    AstBinaryReader reader,
+    LinkedUnitContext context,
     FieldDeclaration node,
   ) {
     var lazy = get(node);
     if (lazy != null && !lazy._hasDocumentationComment) {
-      node.documentationComment = reader.readNode(
-        lazy.data.annotatedNode_comment,
-      );
+      node.documentationComment = context.createComment(lazy.data);
       lazy._hasDocumentationComment = true;
     }
   }
@@ -748,23 +738,25 @@
   }
 
   static int getCodeLength(
-    AstBinaryReader reader,
+    LinkedUnitContext context,
     FormalParameter node,
   ) {
-    if (reader.isLazy) {
+    var lazy = LazyFormalParameter.get(node);
+    if (lazy != null) {
       var lazy = get(node);
-      return lazy.data.codeLength;
+      return context.getInformativeData(lazy.data)?.codeLength ?? 0;
     }
     return node.length;
   }
 
   static int getCodeOffset(
-    AstBinaryReader reader,
+    LinkedUnitContext context,
     FormalParameter node,
   ) {
-    if (reader.isLazy) {
+    var lazy = LazyFormalParameter.get(node);
+    if (lazy != null) {
       var lazy = get(node);
-      return lazy.data.codeOffset;
+      return context.getInformativeData(lazy.data)?.codeOffset ?? 0;
     }
     return node.offset;
   }
@@ -891,23 +883,25 @@
   }
 
   static int getCodeLength(
-    AstBinaryReader reader,
+    LinkedUnitContext context,
     FunctionDeclaration node,
   ) {
-    if (reader.isLazy) {
+    var lazy = LazyFunctionDeclaration.get(node);
+    if (lazy != null) {
       var lazy = get(node);
-      return lazy.data.codeLength;
+      return context.getInformativeData(lazy.data)?.codeLength ?? 0;
     }
     return node.length;
   }
 
   static int getCodeOffset(
-    AstBinaryReader reader,
+    LinkedUnitContext context,
     FunctionDeclaration node,
   ) {
-    if (reader.isLazy) {
+    var lazy = LazyFunctionDeclaration.get(node);
+    if (lazy != null) {
       var lazy = get(node);
-      return lazy.data.codeOffset;
+      return context.getInformativeData(lazy.data)?.codeOffset ?? 0;
     }
     return node.offset;
   }
@@ -929,14 +923,12 @@
   }
 
   static void readDocumentationComment(
-    AstBinaryReader reader,
+    LinkedUnitContext context,
     FunctionDeclaration node,
   ) {
     var lazy = LazyFunctionDeclaration.get(node);
     if (lazy != null && !lazy._hasDocumentationComment) {
-      node.documentationComment = reader.readNode(
-        lazy.data.annotatedNode_comment,
-      );
+      node.documentationComment = context.createComment(lazy.data);
       lazy._hasDocumentationComment = true;
     }
   }
@@ -1068,23 +1060,25 @@
   }
 
   static int getCodeLength(
-    AstBinaryReader reader,
+    LinkedUnitContext context,
     FunctionTypeAlias node,
   ) {
-    if (reader.isLazy) {
+    var lazy = LazyFunctionTypeAlias.get(node);
+    if (lazy != null) {
       var lazy = get(node);
-      return lazy.data.codeLength;
+      return context.getInformativeData(lazy.data)?.codeLength ?? 0;
     }
     return node.length;
   }
 
   static int getCodeOffset(
-    AstBinaryReader reader,
+    LinkedUnitContext context,
     FunctionTypeAlias node,
   ) {
-    if (reader.isLazy) {
+    var lazy = LazyFunctionTypeAlias.get(node);
+    if (lazy != null) {
       var lazy = get(node);
-      return lazy.data.codeOffset;
+      return context.getInformativeData(lazy.data)?.codeOffset ?? 0;
     }
     return node.offset;
   }
@@ -1109,14 +1103,12 @@
   }
 
   static void readDocumentationComment(
-    AstBinaryReader reader,
+    LinkedUnitContext context,
     FunctionTypeAlias node,
   ) {
     var lazy = get(node);
     if (lazy != null && !lazy._hasDocumentationComment) {
-      node.documentationComment = reader.readNode(
-        lazy.data.annotatedNode_comment,
-      );
+      node.documentationComment = context.createComment(lazy.data);
       lazy._hasDocumentationComment = true;
     }
   }
@@ -1189,23 +1181,25 @@
   }
 
   static int getCodeLength(
-    AstBinaryReader reader,
+    LinkedUnitContext context,
     GenericTypeAlias node,
   ) {
-    if (reader.isLazy) {
+    var lazy = LazyGenericTypeAlias.get(node);
+    if (lazy != null) {
       var lazy = get(node);
-      return lazy.data.codeLength;
+      return context.getInformativeData(lazy.data)?.codeLength ?? 0;
     }
     return node.length;
   }
 
   static int getCodeOffset(
-    AstBinaryReader reader,
+    LinkedUnitContext context,
     GenericTypeAlias node,
   ) {
-    if (reader.isLazy) {
+    var lazy = LazyGenericTypeAlias.get(node);
+    if (lazy != null) {
       var lazy = get(node);
-      return lazy.data.codeOffset;
+      return context.getInformativeData(lazy.data)?.codeOffset ?? 0;
     }
     return node.offset;
   }
@@ -1215,14 +1209,12 @@
   }
 
   static void readDocumentationComment(
-    AstBinaryReader reader,
+    LinkedUnitContext context,
     GenericTypeAlias node,
   ) {
     var lazy = get(node);
     if (lazy != null && !lazy._hasDocumentationComment) {
-      node.documentationComment = reader.readNode(
-        lazy.data.annotatedNode_comment,
-      );
+      node.documentationComment = context.createComment(lazy.data);
       lazy._hasDocumentationComment = true;
     }
   }
@@ -1284,23 +1276,25 @@
   }
 
   static int getCodeLength(
-    AstBinaryReader reader,
+    LinkedUnitContext context,
     MethodDeclaration node,
   ) {
-    if (reader.isLazy) {
+    var lazy = LazyMethodDeclaration.get(node);
+    if (lazy != null) {
       var lazy = get(node);
-      return lazy.data.codeLength;
+      return context.getInformativeData(lazy.data)?.codeLength ?? 0;
     }
     return node.length;
   }
 
   static int getCodeOffset(
-    AstBinaryReader reader,
+    LinkedUnitContext context,
     MethodDeclaration node,
   ) {
-    if (reader.isLazy) {
+    var lazy = LazyMethodDeclaration.get(node);
+    if (lazy != null) {
       var lazy = get(node);
-      return lazy.data.codeOffset;
+      return context.getInformativeData(lazy.data)?.codeOffset ?? 0;
     }
     return node.offset;
   }
@@ -1361,14 +1355,12 @@
   }
 
   static void readDocumentationComment(
-    AstBinaryReader reader,
+    LinkedUnitContext context,
     MethodDeclaration node,
   ) {
     var lazy = LazyMethodDeclaration.get(node);
     if (lazy != null && !lazy._hasDocumentationComment) {
-      node.documentationComment = reader.readNode(
-        lazy.data.annotatedNode_comment,
-      );
+      node.documentationComment = context.createComment(lazy.data);
       lazy._hasDocumentationComment = true;
     }
   }
@@ -1460,36 +1452,36 @@
   }
 
   static int getCodeLength(
-    AstBinaryReader reader,
+    LinkedUnitContext context,
     MixinDeclaration node,
   ) {
-    if (reader.isLazy) {
+    var lazy = LazyMixinDeclaration.get(node);
+    if (lazy != null) {
       var lazy = get(node);
-      return lazy.data.codeLength;
+      return context.getInformativeData(lazy.data)?.codeLength ?? 0;
     }
     return node.length;
   }
 
   static int getCodeOffset(
-    AstBinaryReader reader,
+    LinkedUnitContext context,
     MixinDeclaration node,
   ) {
-    if (reader.isLazy) {
+    var lazy = LazyMixinDeclaration.get(node);
+    if (lazy != null) {
       var lazy = get(node);
-      return lazy.data.codeOffset;
+      return context.getInformativeData(lazy.data)?.codeOffset ?? 0;
     }
     return node.offset;
   }
 
   static void readDocumentationComment(
-    AstBinaryReader reader,
+    LinkedUnitContext context,
     MixinDeclaration node,
   ) {
     var lazy = get(node);
     if (lazy.data != null && !lazy._hasDocumentationComment) {
-      node.documentationComment = reader.readNode(
-        lazy.data.annotatedNode_comment,
-      );
+      node.documentationComment = context.createComment(lazy.data);
       lazy._hasDocumentationComment = true;
     }
   }
@@ -1566,14 +1558,12 @@
   }
 
   static void readDocumentationComment(
-    AstBinaryReader reader,
+    LinkedUnitContext context,
     TopLevelVariableDeclaration node,
   ) {
     var lazy = get(node);
     if (lazy != null && !lazy._hasDocumentationComment) {
-      node.documentationComment = reader.readNode(
-        lazy.data.annotatedNode_comment,
-      );
+      node.documentationComment = context.createComment(lazy.data);
       lazy._hasDocumentationComment = true;
     }
   }
@@ -1614,23 +1604,25 @@
   }
 
   static int getCodeLength(
-    AstBinaryReader reader,
+    LinkedUnitContext context,
     TypeParameter node,
   ) {
-    if (reader.isLazy) {
+    var lazy = LazyTypeParameter.get(node);
+    if (lazy != null) {
       var lazy = get(node);
-      return lazy.data.codeLength;
+      return context.getInformativeData(lazy.data)?.codeLength ?? 0;
     }
     return node.length;
   }
 
   static int getCodeOffset(
-    AstBinaryReader reader,
+    LinkedUnitContext context,
     TypeParameter node,
   ) {
-    if (reader.isLazy) {
+    var lazy = LazyTypeParameter.get(node);
+    if (lazy != null) {
       var lazy = get(node);
-      return lazy.data.codeOffset;
+      return context.getInformativeData(lazy.data)?.codeOffset ?? 0;
     }
     return node.offset;
   }
@@ -1690,12 +1682,13 @@
   }
 
   static int getCodeLength(
-    AstBinaryReader reader,
+    LinkedUnitContext context,
     VariableDeclaration node,
   ) {
-    if (reader.isLazy) {
+    var lazy = LazyVariableDeclaration.get(node);
+    if (lazy != null) {
       var lazy = get(node);
-      return lazy.data.codeLength;
+      return context.getInformativeData(lazy.data)?.codeLength ?? 0;
     }
     VariableDeclarationList parent = node.parent;
     if (parent.variables[0] == node) {
@@ -1706,12 +1699,13 @@
   }
 
   static int getCodeOffset(
-    AstBinaryReader reader,
+    LinkedUnitContext context,
     VariableDeclaration node,
   ) {
-    if (reader.isLazy) {
+    var lazy = LazyVariableDeclaration.get(node);
+    if (lazy != null) {
       var lazy = get(node);
-      return lazy.data.codeOffset;
+      return context.getInformativeData(lazy.data)?.codeOffset ?? 0;
     }
     VariableDeclarationList parent = node.parent;
     if (parent.variables[0] == node) {
diff --git a/pkg/analyzer/lib/src/summary2/link.dart b/pkg/analyzer/lib/src/summary2/link.dart
index 784b60e..af4948d 100644
--- a/pkg/analyzer/lib/src/summary2/link.dart
+++ b/pkg/analyzer/lib/src/summary2/link.dart
@@ -189,7 +189,6 @@
           LinkedNodeUnitBuilder(
             isSynthetic: unitContext.isSynthetic,
             uriStr: unitContext.uriStr,
-            lineStarts: unit.lineInfo.lineStarts,
             node: unitLinkedNode,
             isNNBD: unit.featureSet.isEnabled(Feature.non_nullable),
           ),
diff --git a/pkg/analyzer/lib/src/summary2/linked_bundle_context.dart b/pkg/analyzer/lib/src/summary2/linked_bundle_context.dart
index 7688746..4c218be 100644
--- a/pkg/analyzer/lib/src/summary2/linked_bundle_context.dart
+++ b/pkg/analyzer/lib/src/summary2/linked_bundle_context.dart
@@ -5,6 +5,7 @@
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/src/summary/format.dart';
 import 'package:analyzer/src/summary/idl.dart';
+import 'package:analyzer/src/summary2/informative_data.dart';
 import 'package:analyzer/src/summary2/link.dart';
 import 'package:analyzer/src/summary2/linked_element_factory.dart';
 import 'package:analyzer/src/summary2/linked_unit_context.dart';
@@ -72,6 +73,7 @@
       var source = inputUnit.source;
       var uriStr = source != null ? '${source.uri}' : '';
       var reference = unitRef.getChild(uriStr);
+      createInformativeData(inputUnit.unit);
       libraryContext.units.add(
         LinkedUnitContext(
           this,
diff --git a/pkg/analyzer/lib/src/summary2/linked_element_factory.dart b/pkg/analyzer/lib/src/summary2/linked_element_factory.dart
index 3e8d48e..e1561c0 100644
--- a/pkg/analyzer/lib/src/summary2/linked_element_factory.dart
+++ b/pkg/analyzer/lib/src/summary2/linked_element_factory.dart
@@ -8,6 +8,7 @@
 import 'package:analyzer/src/dart/element/element.dart';
 import 'package:analyzer/src/dart/resolver/scope.dart';
 import 'package:analyzer/src/generated/engine.dart' show AnalysisContext;
+import 'package:analyzer/src/summary/idl.dart';
 import 'package:analyzer/src/summary2/core_types.dart';
 import 'package:analyzer/src/summary2/linked_bundle_context.dart';
 import 'package:analyzer/src/summary2/linked_unit_context.dart';
@@ -102,6 +103,23 @@
       rootReference.removeChild(uriStr);
     }
   }
+
+  /// Set optional informative data for the unit.
+  void setInformativeData(
+    String libraryUriStr,
+    String unitUriStr,
+    List<UnlinkedInformativeData> informativeData,
+  ) {
+    var libraryContext = libraryMap[libraryUriStr];
+    if (libraryContext != null) {
+      for (var unitContext in libraryContext.units) {
+        if (unitContext.uriStr == unitUriStr) {
+          unitContext.informativeData = informativeData;
+          return;
+        }
+      }
+    }
+  }
 }
 
 class _ElementRequest {
diff --git a/pkg/analyzer/lib/src/summary2/linked_unit_context.dart b/pkg/analyzer/lib/src/summary2/linked_unit_context.dart
index 9f7385e..2f285f7 100644
--- a/pkg/analyzer/lib/src/summary2/linked_unit_context.dart
+++ b/pkg/analyzer/lib/src/summary2/linked_unit_context.dart
@@ -4,6 +4,7 @@
 
 import 'package:analyzer/dart/analysis/features.dart';
 import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/ast/standard_ast_factory.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/type.dart';
 import 'package:analyzer/source/line_info.dart';
@@ -11,6 +12,7 @@
 import 'package:analyzer/src/dart/element/element.dart';
 import 'package:analyzer/src/dart/element/type.dart';
 import 'package:analyzer/src/generated/resolver.dart';
+import 'package:analyzer/src/generated/testing/token_factory.dart';
 import 'package:analyzer/src/generated/utilities_dart.dart';
 import 'package:analyzer/src/summary/idl.dart';
 import 'package:analyzer/src/summary2/ast_binary_reader.dart';
@@ -28,6 +30,9 @@
   final bool isSynthetic;
   final LinkedNodeUnit data;
 
+  /// Optional informative data for the unit.
+  List<UnlinkedInformativeData> informativeData;
+
   AstBinaryReader _astReader;
 
   CompilationUnit _unit;
@@ -83,7 +88,8 @@
     if (_unit == null) {
       _unit = _astReader.readNode(data.node);
 
-      var lineStarts = data.lineStarts;
+      var informativeData = getInformativeData(data.node);
+      var lineStarts = informativeData?.compilationUnit_lineStarts ?? [];
       if (lineStarts.isEmpty) {
         lineStarts = [0];
       }
@@ -115,6 +121,19 @@
     node.declaredElement = element;
   }
 
+  Comment createComment(LinkedNode data) {
+    var informativeData = getInformativeData(data);
+    var tokenStringList = informativeData?.documentationComment_tokens;
+    if (tokenStringList == null || tokenStringList.isEmpty) {
+      return null;
+    }
+
+    var tokens = tokenStringList
+        .map((lexeme) => TokenFactory.tokenFromString(lexeme))
+        .toList();
+    return astFactory.documentationComment(tokens);
+  }
+
   /// Return the [LibraryElement] referenced in the [node].
   LibraryElement directiveLibrary(UriBasedDirective node) {
     var uriStr = LazyDirective.getSelectedUri(node);
@@ -124,66 +143,66 @@
 
   int getCodeLength(AstNode node) {
     if (node is ClassDeclaration) {
-      return LazyClassDeclaration.getCodeLength(_astReader, node);
+      return LazyClassDeclaration.getCodeLength(this, node);
     } else if (node is ClassTypeAlias) {
-      return LazyClassTypeAlias.getCodeLength(_astReader, node);
+      return LazyClassTypeAlias.getCodeLength(this, node);
     } else if (node is CompilationUnit) {
       if (data != null) {
-        return data.node.codeLength;
+        return getInformativeData(data.node)?.codeLength ?? 0;
       } else {
         return node.length;
       }
     } else if (node is ConstructorDeclaration) {
-      return LazyConstructorDeclaration.getCodeLength(_astReader, node);
+      return LazyConstructorDeclaration.getCodeLength(this, node);
     } else if (node is EnumDeclaration) {
-      return LazyEnumDeclaration.getCodeLength(_astReader, node);
+      return LazyEnumDeclaration.getCodeLength(this, node);
     } else if (node is FormalParameter) {
-      return LazyFormalParameter.getCodeLength(_astReader, node);
+      return LazyFormalParameter.getCodeLength(this, node);
     } else if (node is FunctionDeclaration) {
-      return LazyFunctionDeclaration.getCodeLength(_astReader, node);
+      return LazyFunctionDeclaration.getCodeLength(this, node);
     } else if (node is FunctionTypeAliasImpl) {
-      return LazyFunctionTypeAlias.getCodeLength(_astReader, node);
+      return LazyFunctionTypeAlias.getCodeLength(this, node);
     } else if (node is GenericTypeAlias) {
-      return LazyGenericTypeAlias.getCodeLength(_astReader, node);
+      return LazyGenericTypeAlias.getCodeLength(this, node);
     } else if (node is MethodDeclaration) {
-      return LazyMethodDeclaration.getCodeLength(_astReader, node);
+      return LazyMethodDeclaration.getCodeLength(this, node);
     } else if (node is MixinDeclaration) {
-      return LazyMixinDeclaration.getCodeLength(_astReader, node);
+      return LazyMixinDeclaration.getCodeLength(this, node);
     } else if (node is TypeParameter) {
-      return LazyTypeParameter.getCodeLength(_astReader, node);
+      return LazyTypeParameter.getCodeLength(this, node);
     } else if (node is VariableDeclaration) {
-      return LazyVariableDeclaration.getCodeLength(_astReader, node);
+      return LazyVariableDeclaration.getCodeLength(this, node);
     }
     throw UnimplementedError('${node.runtimeType}');
   }
 
   int getCodeOffset(AstNode node) {
     if (node is ClassDeclaration) {
-      return LazyClassDeclaration.getCodeOffset(_astReader, node);
+      return LazyClassDeclaration.getCodeOffset(this, node);
     } else if (node is ClassTypeAlias) {
-      return LazyClassTypeAlias.getCodeOffset(_astReader, node);
+      return LazyClassTypeAlias.getCodeOffset(this, node);
     } else if (node is CompilationUnit) {
       return 0;
     } else if (node is ConstructorDeclaration) {
-      return LazyConstructorDeclaration.getCodeOffset(_astReader, node);
+      return LazyConstructorDeclaration.getCodeOffset(this, node);
     } else if (node is EnumDeclaration) {
-      return LazyEnumDeclaration.getCodeOffset(_astReader, node);
+      return LazyEnumDeclaration.getCodeOffset(this, node);
     } else if (node is FormalParameter) {
-      return LazyFormalParameter.getCodeOffset(_astReader, node);
+      return LazyFormalParameter.getCodeOffset(this, node);
     } else if (node is FunctionDeclaration) {
-      return LazyFunctionDeclaration.getCodeOffset(_astReader, node);
+      return LazyFunctionDeclaration.getCodeOffset(this, node);
     } else if (node is FunctionTypeAliasImpl) {
-      return LazyFunctionTypeAlias.getCodeOffset(_astReader, node);
+      return LazyFunctionTypeAlias.getCodeOffset(this, node);
     } else if (node is GenericTypeAlias) {
-      return LazyGenericTypeAlias.getCodeOffset(_astReader, node);
+      return LazyGenericTypeAlias.getCodeOffset(this, node);
     } else if (node is MethodDeclaration) {
-      return LazyMethodDeclaration.getCodeOffset(_astReader, node);
+      return LazyMethodDeclaration.getCodeOffset(this, node);
     } else if (node is MixinDeclaration) {
-      return LazyMixinDeclaration.getCodeOffset(_astReader, node);
+      return LazyMixinDeclaration.getCodeOffset(this, node);
     } else if (node is TypeParameter) {
-      return LazyTypeParameter.getCodeOffset(_astReader, node);
+      return LazyTypeParameter.getCodeOffset(this, node);
     } else if (node is VariableDeclaration) {
-      return LazyVariableDeclaration.getCodeOffset(_astReader, node);
+      return LazyVariableDeclaration.getCodeOffset(this, node);
     }
     throw UnimplementedError('${node.runtimeType}');
   }
@@ -223,49 +242,49 @@
     return null;
   }
 
-  int getDirectiveOffset(AstNode node) {
-    return LazyDirective.getNameOffset(node);
+  int getDirectiveOffset(Directive node) {
+    return node.keyword.offset;
   }
 
   Comment getDocumentationComment(AstNode node) {
     if (node is ClassDeclaration) {
-      LazyClassDeclaration.readDocumentationComment(_astReader, node);
+      LazyClassDeclaration.readDocumentationComment(this, node);
       return node.documentationComment;
     } else if (node is ClassTypeAlias) {
-      LazyClassTypeAlias.readDocumentationComment(_astReader, node);
+      LazyClassTypeAlias.readDocumentationComment(this, node);
       return node.documentationComment;
     } else if (node is ConstructorDeclaration) {
-      LazyConstructorDeclaration.readDocumentationComment(_astReader, node);
+      LazyConstructorDeclaration.readDocumentationComment(this, node);
       return node.documentationComment;
     } else if (node is EnumConstantDeclaration) {
-      LazyEnumConstantDeclaration.readDocumentationComment(_astReader, node);
+      LazyEnumConstantDeclaration.readDocumentationComment(this, node);
       return node.documentationComment;
     } else if (node is EnumDeclaration) {
-      LazyEnumDeclaration.readDocumentationComment(_astReader, node);
+      LazyEnumDeclaration.readDocumentationComment(this, node);
       return node.documentationComment;
     } else if (node is FunctionDeclaration) {
-      LazyFunctionDeclaration.readDocumentationComment(_astReader, node);
+      LazyFunctionDeclaration.readDocumentationComment(this, node);
       return node.documentationComment;
     } else if (node is FunctionTypeAlias) {
-      LazyFunctionTypeAlias.readDocumentationComment(_astReader, node);
+      LazyFunctionTypeAlias.readDocumentationComment(this, node);
       return node.documentationComment;
     } else if (node is GenericTypeAlias) {
-      LazyGenericTypeAlias.readDocumentationComment(_astReader, node);
+      LazyGenericTypeAlias.readDocumentationComment(this, node);
       return node.documentationComment;
     } else if (node is MethodDeclaration) {
-      LazyMethodDeclaration.readDocumentationComment(_astReader, node);
+      LazyMethodDeclaration.readDocumentationComment(this, node);
       return node.documentationComment;
     } else if (node is MixinDeclaration) {
-      LazyMixinDeclaration.readDocumentationComment(_astReader, node);
+      LazyMixinDeclaration.readDocumentationComment(this, node);
       return node.documentationComment;
     } else if (node is VariableDeclaration) {
       var parent2 = node.parent.parent;
       if (parent2 is FieldDeclaration) {
-        LazyFieldDeclaration.readDocumentationComment(_astReader, parent2);
+        LazyFieldDeclaration.readDocumentationComment(this, parent2);
         return parent2.documentationComment;
       } else if (parent2 is TopLevelVariableDeclaration) {
         LazyTopLevelVariableDeclaration.readDocumentationComment(
-          _astReader,
+          this,
           parent2,
         );
         return parent2.documentationComment;
@@ -373,6 +392,15 @@
     }
   }
 
+  UnlinkedInformativeData getInformativeData(LinkedNode data) {
+    if (informativeData == null) return null;
+
+    var id = data.informativeId;
+    if (id == 0) return null;
+
+    return informativeData[id - 1];
+  }
+
   bool getInheritsCovariant(AstNode node) {
     if (node is DefaultFormalParameter) {
       return getInheritsCovariant(node.parameter);
diff --git a/pkg/analyzer/test/src/summary/resynthesize_ast2_test.dart b/pkg/analyzer/test/src/summary/resynthesize_ast2_test.dart
index 800bdd1..ec7bbef 100644
--- a/pkg/analyzer/test/src/summary/resynthesize_ast2_test.dart
+++ b/pkg/analyzer/test/src/summary/resynthesize_ast2_test.dart
@@ -11,6 +11,7 @@
 import 'package:analyzer/src/generated/source.dart';
 import 'package:analyzer/src/summary/idl.dart';
 import 'package:analyzer/src/summary/summary_sdk.dart';
+import 'package:analyzer/src/summary2/informative_data.dart';
 import 'package:analyzer/src/summary2/link.dart';
 import 'package:analyzer/src/summary2/linked_bundle_context.dart';
 import 'package:analyzer/src/summary2/linked_element_factory.dart';
@@ -103,6 +104,23 @@
       LinkedBundleContext(elementFactory, linkResult.bundle),
     );
 
+    // Set informative data.
+    for (var inputLibrary in inputLibraries) {
+      var libraryUriStr = '${inputLibrary.source.uri}';
+      for (var inputUnit in inputLibrary.units) {
+        var unitSource = inputUnit.source;
+        if (unitSource != null) {
+          var unitUriStr = '${unitSource.uri}';
+          var informativeData = createInformativeData(inputUnit.unit);
+          elementFactory.setInformativeData(
+            libraryUriStr,
+            unitUriStr,
+            informativeData,
+          );
+        }
+      }
+    }
+
     if (analysisContext.typeProvider == null) {
       var dartCore = elementFactory.libraryOfUri('dart:core');
       var dartAsync = elementFactory.libraryOfUri('dart:async');