Optimize summary2.

1. Don't store tokens.
2. Start moving toward storing only semantic information.
3. Don't use DeclarationSplicer, DeclarationResolver.
4. GenericFunctionType(s) don't work, we need a way to associate AST
location to summary location. I think it is solvable.

Change-Id: If0bf9f20f8092068488322129853b788dd947eb0
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/102127
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
diff --git a/pkg/analyzer/lib/src/dart/analysis/driver.dart b/pkg/analyzer/lib/src/dart/analysis/driver.dart
index 2098c3f..f92f743 100644
--- a/pkg/analyzer/lib/src/dart/analysis/driver.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/driver.dart
@@ -1622,7 +1622,7 @@
       }
     }
 
-    if (_libraryContext == null || useSummary2) {
+    if (_libraryContext == null) {
       _libraryContext = new LibraryContext(
         session: currentSession,
         logger: _logger,
@@ -1635,6 +1635,8 @@
         targetLibrary: library,
         useSummary2: useSummary2,
       );
+    } else if (useSummary2) {
+      _libraryContext.load2(library);
     } else {
       _libraryContext.load(library);
     }
diff --git a/pkg/analyzer/lib/src/dart/analysis/file_state.dart b/pkg/analyzer/lib/src/dart/analysis/file_state.dart
index 7c8377e..9536953 100644
--- a/pkg/analyzer/lib/src/dart/analysis/file_state.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/file_state.dart
@@ -35,6 +35,10 @@
 import 'package:front_end/src/fasta/scanner/token.dart';
 import 'package:meta/meta.dart';
 
+var counterFileStateRefresh = 0;
+var counterUnlinkedLinkedBytes = 0;
+var timerFileStateRefresh = Stopwatch();
+
 /**
  * [FileContentOverlay] is used to temporary override content of files.
  */
@@ -118,9 +122,11 @@
   String _unlinkedKey;
   AnalysisDriverUnlinkedUnit _driverUnlinkedUnit;
   UnlinkedUnit _unlinked;
-  UnlinkedUnit2 _unlinked2;
   List<int> _apiSignature;
 
+  UnlinkedUnit2 _unlinked2;
+  CompilationUnit _unitForLinking;
+
   List<FileState> _importedFiles;
   List<FileState> _exportedFiles;
   List<FileState> _partedFiles;
@@ -454,10 +460,17 @@
    * Return `true` if the API signature changed since the last refresh.
    */
   bool refresh({bool allowCached: false}) {
+    counterFileStateRefresh++;
+
     if (_fsState.useSummary2) {
       return _refresh2();
     }
 
+    var timerWasRunning = timerFileStateRefresh.isRunning;
+    if (!timerWasRunning) {
+      timerFileStateRefresh.start();
+    }
+
     _invalidateCurrentUnresolvedData();
 
     {
@@ -494,6 +507,7 @@
                   referencedNames: referencedNames,
                   subtypedNames: subtypedNames)
               .toBuffer();
+          counterUnlinkedLinkedBytes += bytes.length;
           _fsState._byteStore.put(_unlinkedKey, bytes);
         });
       }
@@ -582,10 +596,26 @@
       files.add(this);
     }
 
+    if (!timerWasRunning) {
+      timerFileStateRefresh.stop();
+    }
+
     // Return whether the API signature changed.
     return apiSignatureChanged;
   }
 
+  /// If the file has a parsed unit from computing unlinked data, return it.
+  /// Otherwise, parse it afresh now.
+  CompilationUnit takeUnitForLinking() {
+    if (_unitForLinking != null) {
+      var result = _unitForLinking;
+      _unitForLinking = null;
+      return result;
+    } else {
+      return parse();
+    }
+  }
+
   @override
   String toString() => path ?? '<unresolved>';
 
@@ -730,6 +760,11 @@
   }
 
   bool _refresh2() {
+    var timerWasRunning = timerFileStateRefresh.isRunning;
+    if (!timerWasRunning) {
+      timerFileStateRefresh.start();
+    }
+
     _invalidateCurrentUnresolvedData();
 
     {
@@ -756,6 +791,7 @@
       bytes = _fsState._byteStore.get(_unlinkedKey);
       if (bytes == null || bytes.isEmpty) {
         CompilationUnit unit = parse();
+        _unitForLinking = unit;
         _fsState._logger.run('Create unlinked for $path', () {
           var unlinkedUnit = serializeAstUnlinked2(contentSignature, unit);
           var definedNames = computeDefinedNames(unit);
@@ -853,6 +889,10 @@
       files.add(this);
     }
 
+    if (!timerWasRunning) {
+      timerFileStateRefresh.stop();
+    }
+
     // Return whether the API signature changed.
     return apiSignatureChanged;
   }
diff --git a/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart b/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
index 1de0d3f..699c335 100644
--- a/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
@@ -32,11 +32,17 @@
 import 'package:analyzer/src/lint/linter.dart';
 import 'package:analyzer/src/lint/linter_visitor.dart';
 import 'package:analyzer/src/services/lint.dart';
-import 'package:analyzer/src/summary2/declaration_splicer.dart';
 import 'package:analyzer/src/summary2/linked_element_factory.dart';
 import 'package:analyzer/src/task/strong/checker.dart';
 import 'package:pub_semver/pub_semver.dart';
 
+var timerLibraryAnalyzer = Stopwatch();
+var timerLibraryAnalyzerConst = Stopwatch();
+var timerLibraryAnalyzerFreshUnit = Stopwatch();
+var timerLibraryAnalyzerResolve = Stopwatch();
+var timerLibraryAnalyzerSplicer = Stopwatch();
+var timerLibraryAnalyzerVerify = Stopwatch();
+
 /**
  * Analyzer of a single library.
  */
@@ -107,13 +113,15 @@
    * Compute analysis results for all units of the library.
    */
   Map<FileState, UnitAnalysisResult> analyzeSync() {
+    timerLibraryAnalyzer.start();
     Map<FileState, CompilationUnit> units = {};
 
     // Parse all files.
+    timerLibraryAnalyzerFreshUnit.start();
     for (FileState file in _library.libraryFiles) {
       units[file] = _parse(file);
     }
-    // TODO(danrubel): Verify that all units have the same @dart override
+    timerLibraryAnalyzerFreshUnit.stop();
 
     // Resolve URIs in directives to corresponding sources.
     units.forEach((file, unit) {
@@ -128,17 +136,22 @@
     }
     _libraryScope = new LibraryScope(_libraryElement);
 
+    timerLibraryAnalyzerResolve.start();
     _resolveDirectives(units);
 
     units.forEach((file, unit) {
       _resolveFile(file, unit);
       _computePendingMissingRequiredParameters(file, unit);
     });
+    timerLibraryAnalyzerResolve.stop();
 
+    timerLibraryAnalyzerConst.start();
     units.values.forEach(_findConstants);
     _clearConstantEvaluationResults();
     _computeConstants();
+    timerLibraryAnalyzerConst.stop();
 
+    timerLibraryAnalyzerVerify.start();
     PerformanceStatistics.errors.makeCurrentWhile(() {
       units.forEach((file, unit) {
         _computeVerifyErrors(file, unit);
@@ -176,6 +189,7 @@
         }
       });
     }
+    timerLibraryAnalyzerVerify.stop();
 
     // Return full results.
     Map<FileState, UnitAnalysisResult> results = {};
@@ -184,6 +198,7 @@
       errors = _filterIgnoredErrors(file, errors);
       results[file] = new UnitAnalysisResult(file, unit, errors);
     });
+    timerLibraryAnalyzer.stop();
     return results;
   }
 
@@ -628,11 +643,9 @@
       }
     }
 
-    if (_elementFactory != null) {
-      new DeclarationSplicer(unitElement).splice(unit);
-    } else {
-      new DeclarationResolver().resolve(unit, unitElement);
-    }
+    timerLibraryAnalyzerSplicer.start();
+    new DeclarationResolver().resolve(unit, unitElement);
+    timerLibraryAnalyzerSplicer.stop();
 
     unit.accept(new AstRewriteVisitor(_context.typeSystem, _libraryElement,
         source, _typeProvider, errorListener,
diff --git a/pkg/analyzer/lib/src/dart/analysis/library_context.dart b/pkg/analyzer/lib/src/dart/analysis/library_context.dart
index 7340b1e..f8f7f01 100644
--- a/pkg/analyzer/lib/src/dart/analysis/library_context.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/library_context.dart
@@ -31,6 +31,14 @@
 import 'package:analyzer/src/summary2/reference.dart';
 import 'package:meta/meta.dart';
 
+var counterInputLibrariesFiles = 0;
+var counterLinkedLibraries = 0;
+var counterLoadedLibraries = 0;
+var timerBundleToBytes = Stopwatch();
+var timerInputLibraries = Stopwatch();
+var timerLinking = Stopwatch();
+var timerLoad2 = Stopwatch();
+
 /**
  * Context information necessary to analyze one or more libraries within an
  * [AnalysisDriver].
@@ -55,6 +63,8 @@
   LinkedElementFactory elementFactory;
   InheritanceManager2 inheritanceManager;
 
+  var loadedBundles = Set<LibraryCycle>.identity();
+
   LibraryContext({
     @required AnalysisSession session,
     @required PerformanceLog logger,
@@ -81,6 +91,7 @@
     );
 
     if (useSummary2) {
+      _createElementFactory();
       load2(targetLibrary);
     } else {
       // Fill the store with summaries required for the initial library.
@@ -144,6 +155,8 @@
       return;
     }
 
+    timerLoad2.start();
+
     var libraries = <String, FileState>{};
     void appendLibraryFiles(FileState library) {
       // Stop if this library is already a part of the context.
@@ -191,8 +204,10 @@
       }
       int numOfLoaded = libraries.length - libraryUrisToLink.length;
       logger.writeln('Loaded $numOfLoaded linked bundles.');
+      counterLoadedLibraries += numOfLoaded;
     });
 
+    timerLinking.start();
     var linkedLibraries = <String, LinkedLibraryBuilder>{};
     logger.run('Link libraries', () {
       linkedLibraries = link(libraryUrisToLink, (String uri) {
@@ -204,26 +219,35 @@
       }, DeclaredVariables(), analysisContext.analysisOptions);
       logger.writeln('Linked ${linkedLibraries.length} libraries.');
     });
+    timerLinking.stop();
+    counterLinkedLibraries += linkedLibraries.length;
 
     // Store freshly linked libraries into the byte store.
     // Append them to the context.
+    timerBundleToBytes.start();
     for (String uri in linkedLibraries.keys) {
+      counterLoadedLibraries++;
       FileState library = libraries[uri];
       String key = library.transitiveSignatureLinked;
 
+      timerBundleToBytes.start();
       LinkedLibraryBuilder linkedBuilder = linkedLibraries[uri];
       List<int> bytes = linkedBuilder.toBuffer();
+      timerBundleToBytes.stop();
       byteStore.put(key, bytes);
+      counterUnlinkedLinkedBytes += bytes.length;
 
       LinkedLibrary linked = new LinkedLibrary.fromBuffer(bytes);
       store.addLinkedLibrary(uri, linked);
       _linkedDataInBytes += bytes.length;
     }
+    timerBundleToBytes.stop();
+    timerLoad2.stop();
   }
 
   /// Load data required to access elements of the given [targetLibrary].
   void load2(FileState targetLibrary) {
-    var loadedBundles = Set<LibraryCycle>.identity();
+    timerLoad2.start();
     var inputBundles = <LinkedNodeBundle>[];
 
     void loadBundle(LibraryCycle cycle) {
@@ -237,17 +261,20 @@
         var bytes = byteStore.get(key);
 
         if (bytes == null) {
+          timerInputLibraries.start();
           var inputLibraries = <link2.LinkInputLibrary>[];
           logger.run('Prepare input libraries', () {
             for (var libraryFile in cycle.libraries) {
+              counterInputLibrariesFiles++;
               var librarySource = libraryFile.source;
               if (librarySource == null) continue;
 
               var inputUnits = <link2.LinkInputUnit>[];
               for (var file in libraryFile.libraryFiles) {
                 var isSynthetic = !file.exists;
+                var unit = file.takeUnitForLinking();
                 inputUnits.add(
-                  link2.LinkInputUnit(file.source, isSynthetic, file.parse()),
+                  link2.LinkInputUnit(file.source, isSynthetic, unit),
                 );
               }
 
@@ -257,29 +284,48 @@
             }
             logger.writeln('Prepared ${inputLibraries.length} libraries.');
           });
+          timerInputLibraries.stop();
 
+          timerLinking.start();
           link2.LinkResult linkResult;
           logger.run('Link libraries', () {
-            linkResult = link2.link(
-              analysisContext.analysisOptions,
-              analysisContext.sourceFactory,
-              analysisContext.declaredVariables,
-              inputBundles,
-              inputLibraries,
-            );
+            linkResult = link2.link(elementFactory, inputLibraries);
             logger.writeln('Linked ${inputLibraries.length} libraries.');
           });
+          timerLinking.stop();
+          counterLinkedLibraries += linkResult.bundle.libraries.length;
 
+          timerBundleToBytes.start();
           bytes = linkResult.bundle.toBuffer();
+          timerBundleToBytes.stop();
           byteStore.put(key, bytes);
           logger.writeln('Stored ${bytes.length} bytes.');
+          counterUnlinkedLinkedBytes += bytes.length;
         } else {
+          // TODO(scheglov) Take / clear parsed units in files.
           logger.writeln('Loaded ${bytes.length} bytes.');
         }
 
-        inputBundles.add(
-          LinkedNodeBundle.fromBuffer(bytes),
+        // We are about to load dart:core, but if we have just linked it, the
+        // linker might have set the type provider. So, clear it, and recreate
+        // the element factory - it is empty anyway.
+        var hasDartCoreBeforeBundle = elementFactory.hasDartCore;
+        if (!hasDartCoreBeforeBundle) {
+          analysisContext.clearTypeProvider();
+          _createElementFactory();
+        }
+
+        var bundle = LinkedNodeBundle.fromBuffer(bytes);
+        inputBundles.add(bundle);
+        elementFactory.addBundle(
+          LinkedBundleContext(elementFactory, bundle),
         );
+        counterLoadedLibraries += bundle.libraries.length;
+
+        // If the first bundle, with dart:core, create the type provider.
+        if (!hasDartCoreBeforeBundle && elementFactory.hasDartCore) {
+          _createElementFactoryTypeProvider();
+        }
       });
     }
 
@@ -288,33 +334,7 @@
       loadBundle(libraryCycle);
     });
 
-    var rootReference = Reference.root();
-    rootReference.getChild('dart:core').getChild('dynamic').element =
-        DynamicElementImpl.instance;
-    rootReference.getChild('dart:core').getChild('Never').element =
-        NeverElementImpl.instance;
-
-    elementFactory = LinkedElementFactory(
-      analysisContext,
-      analysisSession,
-      rootReference,
-    );
-
-    for (var bundle in inputBundles) {
-      elementFactory.addBundle(
-        LinkedBundleContext(elementFactory, bundle),
-      );
-    }
-
-    var dartCore = elementFactory.libraryOfUri('dart:core');
-    var dartAsync = elementFactory.libraryOfUri('dart:async');
-    var typeProvider = SummaryTypeProvider()
-      ..initializeCore(dartCore)
-      ..initializeAsync(dartAsync);
-    analysisContext.typeProvider = typeProvider;
-
-    dartCore.createLoadLibraryFunction(typeProvider);
-    dartAsync.createLoadLibraryFunction(typeProvider);
+    timerLoad2.stop();
   }
 
   /// Return `true` if this context grew too large, and should be recreated.
@@ -325,4 +345,28 @@
   bool pack() {
     return _linkedDataInBytes > _maxLinkedDataInBytes;
   }
+
+  void _createElementFactory() {
+    elementFactory = LinkedElementFactory(
+      analysisContext,
+      analysisSession,
+      Reference.root(),
+    );
+
+    var dartCoreRef = elementFactory.rootReference.getChild('dart:core');
+    dartCoreRef.getChild('dynamic').element = DynamicElementImpl.instance;
+    dartCoreRef.getChild('Never').element = NeverElementImpl.instance;
+  }
+
+  void _createElementFactoryTypeProvider() {
+    var dartCore = elementFactory.libraryOfUri('dart:core');
+    var dartAsync = elementFactory.libraryOfUri('dart:async');
+    var typeProvider = SummaryTypeProvider()
+      ..initializeCore(dartCore)
+      ..initializeAsync(dartAsync);
+    analysisContext.typeProvider = typeProvider;
+
+    dartCore.createLoadLibraryFunction(typeProvider);
+    dartAsync.createLoadLibraryFunction(typeProvider);
+  }
 }
diff --git a/pkg/analyzer/lib/src/dart/analysis/restricted_analysis_context.dart b/pkg/analyzer/lib/src/dart/analysis/restricted_analysis_context.dart
index f10e3a5..60b7db7 100644
--- a/pkg/analyzer/lib/src/dart/analysis/restricted_analysis_context.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/restricted_analysis_context.dart
@@ -43,4 +43,8 @@
   noSuchMethod(Invocation invocation) {
     return super.noSuchMethod(invocation);
   }
+
+  void clearTypeProvider() {
+    synchronousSession.clearTypeProvider();
+  }
 }
diff --git a/pkg/analyzer/lib/src/dart/analysis/session.dart b/pkg/analyzer/lib/src/dart/analysis/session.dart
index 7461fe9..30db6fa 100644
--- a/pkg/analyzer/lib/src/dart/analysis/session.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/session.dart
@@ -222,4 +222,9 @@
       implicitCasts: analysisOptions.implicitCasts,
     );
   }
+
+  void clearTypeProvider() {
+    _typeProvider = null;
+    _typeSystem = null;
+  }
 }
diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart
index f5a4de1..f317b8f 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -7924,7 +7924,8 @@
         if (linkedContext.hasInitializer(linkedNode)) {
           _initializer = new FunctionElementImpl('', -1)
             ..isSynthetic = true
-            .._type = FunctionTypeImpl.synthetic(type, [], []);
+            .._type = FunctionTypeImpl.synthetic(type, [], [])
+            ..enclosingElement = this;
         }
       }
       if (_unlinkedVariable != null) {
diff --git a/pkg/analyzer/lib/src/summary/format.dart b/pkg/analyzer/lib/src/summary/format.dart
index 80a9ed3..a83f7c0 100644
--- a/pkg/analyzer/lib/src/summary/format.dart
+++ b/pkg/analyzer/lib/src/summary/format.dart
@@ -4734,6 +4734,7 @@
   int _variantField_16;
   int _variantField_18;
   int _variantField_19;
+  idl.UnlinkedTokenType _variantField_28;
   bool _variantField_27;
   LinkedNodeBuilder _variantField_9;
   LinkedNodeBuilder _variantField_12;
@@ -4741,7 +4742,7 @@
   LinkedNodeBuilder _variantField_13;
   int _variantField_34;
   int _variantField_33;
-  List<int> _variantField_28;
+  List<String> _variantField_36;
   idl.LinkedNodeCommentType _variantField_29;
   List<LinkedNodeBuilder> _variantField_3;
   LinkedNodeBuilder _variantField_10;
@@ -4749,13 +4750,16 @@
   double _variantField_21;
   bool _variantField_37;
   LinkedNodeTypeBuilder _variantField_25;
+  int _flags;
+  String _variantField_41;
   String _variantField_30;
   LinkedNodeBuilder _variantField_14;
   bool _isSynthetic;
   idl.LinkedNodeKind _kind;
-  List<String> _variantField_36;
+  String _name;
   String _variantField_20;
   bool _variantField_31;
+  idl.UnlinkedTokenType _variantField_40;
   TopLevelInferenceErrorBuilder _variantField_35;
   String _variantField_22;
   LinkedNodeVariablesDeclarationBuilder _variantField_32;
@@ -4882,12 +4886,6 @@
   }
 
   @override
-  List<LinkedNodeBuilder> get hideCombinator_hiddenNames {
-    assert(kind == idl.LinkedNodeKind.hideCombinator);
-    return _variantField_2 ??= <LinkedNodeBuilder>[];
-  }
-
-  @override
   List<LinkedNodeBuilder> get implementsClause_interfaces {
     assert(kind == idl.LinkedNodeKind.implementsClause);
     return _variantField_2 ??= <LinkedNodeBuilder>[];
@@ -4931,12 +4929,6 @@
   }
 
   @override
-  List<LinkedNodeBuilder> get showCombinator_shownNames {
-    assert(kind == idl.LinkedNodeKind.showCombinator);
-    return _variantField_2 ??= <LinkedNodeBuilder>[];
-  }
-
-  @override
   List<LinkedNodeBuilder> get stringInterpolation_elements {
     assert(kind == idl.LinkedNodeKind.stringInterpolation);
     return _variantField_2 ??= <LinkedNodeBuilder>[];
@@ -5028,11 +5020,6 @@
     _variantField_2 = value;
   }
 
-  set hideCombinator_hiddenNames(List<LinkedNodeBuilder> value) {
-    assert(kind == idl.LinkedNodeKind.hideCombinator);
-    _variantField_2 = value;
-  }
-
   set implementsClause_interfaces(List<LinkedNodeBuilder> value) {
     assert(kind == idl.LinkedNodeKind.implementsClause);
     _variantField_2 = value;
@@ -5069,11 +5056,6 @@
     _variantField_2 = value;
   }
 
-  set showCombinator_shownNames(List<LinkedNodeBuilder> value) {
-    assert(kind == idl.LinkedNodeKind.showCombinator);
-    _variantField_2 = value;
-  }
-
   set stringInterpolation_elements(List<LinkedNodeBuilder> value) {
     assert(kind == idl.LinkedNodeKind.stringInterpolation);
     _variantField_2 = value;
@@ -5384,12 +5366,6 @@
   }
 
   @override
-  LinkedNodeBuilder get enumConstantDeclaration_name {
-    assert(kind == idl.LinkedNodeKind.enumConstantDeclaration);
-    return _variantField_6;
-  }
-
-  @override
   LinkedNodeBuilder get expressionFunctionBody_expression {
     assert(kind == idl.LinkedNodeKind.expressionFunctionBody);
     return _variantField_6;
@@ -5496,12 +5472,6 @@
   }
 
   @override
-  LinkedNodeBuilder get importDirective_prefix {
-    assert(kind == idl.LinkedNodeKind.importDirective);
-    return _variantField_6;
-  }
-
-  @override
   LinkedNodeBuilder get indexExpression_index {
     assert(kind == idl.LinkedNodeKind.indexExpression);
     return _variantField_6;
@@ -5837,11 +5807,6 @@
     _variantField_6 = value;
   }
 
-  set enumConstantDeclaration_name(LinkedNodeBuilder value) {
-    assert(kind == idl.LinkedNodeKind.enumConstantDeclaration);
-    _variantField_6 = value;
-  }
-
   set expressionFunctionBody_expression(LinkedNodeBuilder value) {
     assert(kind == idl.LinkedNodeKind.expressionFunctionBody);
     _variantField_6 = value;
@@ -5932,11 +5897,6 @@
     _variantField_6 = value;
   }
 
-  set importDirective_prefix(LinkedNodeBuilder value) {
-    assert(kind == idl.LinkedNodeKind.importDirective);
-    _variantField_6 = value;
-  }
-
   set indexExpression_index(LinkedNodeBuilder value) {
     assert(kind == idl.LinkedNodeKind.indexExpression);
     _variantField_6 = value;
@@ -6178,12 +6138,6 @@
   }
 
   @override
-  int get booleanLiteral_literal {
-    assert(kind == idl.LinkedNodeKind.booleanLiteral);
-    return _variantField_15 ??= 0;
-  }
-
-  @override
   int get breakStatement_breakKeyword {
     assert(kind == idl.LinkedNodeKind.breakStatement);
     return _variantField_15 ??= 0;
@@ -6196,18 +6150,6 @@
   }
 
   @override
-  int get classDeclaration_abstractKeyword {
-    assert(kind == idl.LinkedNodeKind.classDeclaration);
-    return _variantField_15 ??= 0;
-  }
-
-  @override
-  int get classTypeAlias_abstractKeyword {
-    assert(kind == idl.LinkedNodeKind.classTypeAlias);
-    return _variantField_15 ??= 0;
-  }
-
-  @override
   int get commentReference_newKeyword {
     assert(kind == idl.LinkedNodeKind.commentReference);
     return _variantField_15 ??= 0;
@@ -6232,12 +6174,6 @@
   }
 
   @override
-  int get constructorDeclaration_constKeyword {
-    assert(kind == idl.LinkedNodeKind.constructorDeclaration);
-    return _variantField_15 ??= 0;
-  }
-
-  @override
   int get constructorFieldInitializer_equals {
     assert(kind == idl.LinkedNodeKind.constructorFieldInitializer);
     return _variantField_15 ??= 0;
@@ -6274,12 +6210,6 @@
   }
 
   @override
-  int get doubleLiteral_literal {
-    assert(kind == idl.LinkedNodeKind.doubleLiteral);
-    return _variantField_15 ??= 0;
-  }
-
-  @override
   int get emptyFunctionBody_semicolon {
     assert(kind == idl.LinkedNodeKind.emptyFunctionBody);
     return _variantField_15 ??= 0;
@@ -6292,12 +6222,6 @@
   }
 
   @override
-  int get enumDeclaration_enumKeyword {
-    assert(kind == idl.LinkedNodeKind.enumDeclaration);
-    return _variantField_15 ??= 0;
-  }
-
-  @override
   int get expressionFunctionBody_arrow {
     assert(kind == idl.LinkedNodeKind.expressionFunctionBody);
     return _variantField_15 ??= 0;
@@ -6316,18 +6240,6 @@
   }
 
   @override
-  int get fieldDeclaration_covariantKeyword {
-    assert(kind == idl.LinkedNodeKind.fieldDeclaration);
-    return _variantField_15 ??= 0;
-  }
-
-  @override
-  int get fieldFormalParameter_keyword {
-    assert(kind == idl.LinkedNodeKind.fieldFormalParameter);
-    return _variantField_15 ??= 0;
-  }
-
-  @override
   int get forEachParts_inKeyword {
     assert(kind == idl.LinkedNodeKind.forEachPartsWithDeclaration ||
         kind == idl.LinkedNodeKind.forEachPartsWithIdentifier);
@@ -6355,12 +6267,6 @@
   }
 
   @override
-  int get functionDeclaration_externalKeyword {
-    assert(kind == idl.LinkedNodeKind.functionDeclaration);
-    return _variantField_15 ??= 0;
-  }
-
-  @override
   int get genericFunctionType_functionKeyword {
     assert(kind == idl.LinkedNodeKind.genericFunctionType);
     return _variantField_15 ??= 0;
@@ -6380,7 +6286,7 @@
   }
 
   @override
-  int get importDirective_asKeyword {
+  int get importDirective_prefixOffset {
     assert(kind == idl.LinkedNodeKind.importDirective);
     return _variantField_15 ??= 0;
   }
@@ -6392,18 +6298,6 @@
   }
 
   @override
-  int get instanceCreationExpression_keyword {
-    assert(kind == idl.LinkedNodeKind.instanceCreationExpression);
-    return _variantField_15 ??= 0;
-  }
-
-  @override
-  int get integerLiteral_literal {
-    assert(kind == idl.LinkedNodeKind.integerLiteral);
-    return _variantField_15 ??= 0;
-  }
-
-  @override
   int get interpolationExpression_leftBracket {
     assert(kind == idl.LinkedNodeKind.interpolationExpression);
     return _variantField_15 ??= 0;
@@ -6440,12 +6334,6 @@
   }
 
   @override
-  int get methodDeclaration_externalKeyword {
-    assert(kind == idl.LinkedNodeKind.methodDeclaration);
-    return _variantField_15 ??= 0;
-  }
-
-  @override
   int get methodInvocation_operator {
     assert(kind == idl.LinkedNodeKind.methodInvocation);
     return _variantField_15 ??= 0;
@@ -6542,30 +6430,12 @@
   }
 
   @override
-  int get simpleFormalParameter_keyword {
-    assert(kind == idl.LinkedNodeKind.simpleFormalParameter);
-    return _variantField_15 ??= 0;
-  }
-
-  @override
   int get simpleIdentifier_element {
     assert(kind == idl.LinkedNodeKind.simpleIdentifier);
     return _variantField_15 ??= 0;
   }
 
   @override
-  int get simpleStringLiteral_token {
-    assert(kind == idl.LinkedNodeKind.simpleStringLiteral);
-    return _variantField_15 ??= 0;
-  }
-
-  @override
-  int get spreadElement_spreadOperator {
-    assert(kind == idl.LinkedNodeKind.spreadElement);
-    return _variantField_15 ??= 0;
-  }
-
-  @override
   int get superConstructorInvocation_element {
     assert(kind == idl.LinkedNodeKind.superConstructorInvocation);
     return _variantField_15 ??= 0;
@@ -6651,12 +6521,6 @@
   }
 
   @override
-  int get variableDeclarationList_keyword {
-    assert(kind == idl.LinkedNodeKind.variableDeclarationList);
-    return _variantField_15 ??= 0;
-  }
-
-  @override
   int get variableDeclarationStatement_semicolon {
     assert(kind == idl.LinkedNodeKind.variableDeclarationStatement);
     return _variantField_15 ??= 0;
@@ -6740,12 +6604,6 @@
     _variantField_15 = value;
   }
 
-  set booleanLiteral_literal(int value) {
-    assert(kind == idl.LinkedNodeKind.booleanLiteral);
-    assert(value == null || value >= 0);
-    _variantField_15 = value;
-  }
-
   set breakStatement_breakKeyword(int value) {
     assert(kind == idl.LinkedNodeKind.breakStatement);
     assert(value == null || value >= 0);
@@ -6758,18 +6616,6 @@
     _variantField_15 = value;
   }
 
-  set classDeclaration_abstractKeyword(int value) {
-    assert(kind == idl.LinkedNodeKind.classDeclaration);
-    assert(value == null || value >= 0);
-    _variantField_15 = value;
-  }
-
-  set classTypeAlias_abstractKeyword(int value) {
-    assert(kind == idl.LinkedNodeKind.classTypeAlias);
-    assert(value == null || value >= 0);
-    _variantField_15 = value;
-  }
-
   set commentReference_newKeyword(int value) {
     assert(kind == idl.LinkedNodeKind.commentReference);
     assert(value == null || value >= 0);
@@ -6794,12 +6640,6 @@
     _variantField_15 = value;
   }
 
-  set constructorDeclaration_constKeyword(int value) {
-    assert(kind == idl.LinkedNodeKind.constructorDeclaration);
-    assert(value == null || value >= 0);
-    _variantField_15 = value;
-  }
-
   set constructorFieldInitializer_equals(int value) {
     assert(kind == idl.LinkedNodeKind.constructorFieldInitializer);
     assert(value == null || value >= 0);
@@ -6836,12 +6676,6 @@
     _variantField_15 = value;
   }
 
-  set doubleLiteral_literal(int value) {
-    assert(kind == idl.LinkedNodeKind.doubleLiteral);
-    assert(value == null || value >= 0);
-    _variantField_15 = value;
-  }
-
   set emptyFunctionBody_semicolon(int value) {
     assert(kind == idl.LinkedNodeKind.emptyFunctionBody);
     assert(value == null || value >= 0);
@@ -6854,12 +6688,6 @@
     _variantField_15 = value;
   }
 
-  set enumDeclaration_enumKeyword(int value) {
-    assert(kind == idl.LinkedNodeKind.enumDeclaration);
-    assert(value == null || value >= 0);
-    _variantField_15 = value;
-  }
-
   set expressionFunctionBody_arrow(int value) {
     assert(kind == idl.LinkedNodeKind.expressionFunctionBody);
     assert(value == null || value >= 0);
@@ -6878,18 +6706,6 @@
     _variantField_15 = value;
   }
 
-  set fieldDeclaration_covariantKeyword(int value) {
-    assert(kind == idl.LinkedNodeKind.fieldDeclaration);
-    assert(value == null || value >= 0);
-    _variantField_15 = value;
-  }
-
-  set fieldFormalParameter_keyword(int value) {
-    assert(kind == idl.LinkedNodeKind.fieldFormalParameter);
-    assert(value == null || value >= 0);
-    _variantField_15 = value;
-  }
-
   set forEachParts_inKeyword(int value) {
     assert(kind == idl.LinkedNodeKind.forEachPartsWithDeclaration ||
         kind == idl.LinkedNodeKind.forEachPartsWithIdentifier);
@@ -6917,12 +6733,6 @@
     _variantField_15 = value;
   }
 
-  set functionDeclaration_externalKeyword(int value) {
-    assert(kind == idl.LinkedNodeKind.functionDeclaration);
-    assert(value == null || value >= 0);
-    _variantField_15 = value;
-  }
-
   set genericFunctionType_functionKeyword(int value) {
     assert(kind == idl.LinkedNodeKind.genericFunctionType);
     assert(value == null || value >= 0);
@@ -6942,7 +6752,7 @@
     _variantField_15 = value;
   }
 
-  set importDirective_asKeyword(int value) {
+  set importDirective_prefixOffset(int value) {
     assert(kind == idl.LinkedNodeKind.importDirective);
     assert(value == null || value >= 0);
     _variantField_15 = value;
@@ -6954,18 +6764,6 @@
     _variantField_15 = value;
   }
 
-  set instanceCreationExpression_keyword(int value) {
-    assert(kind == idl.LinkedNodeKind.instanceCreationExpression);
-    assert(value == null || value >= 0);
-    _variantField_15 = value;
-  }
-
-  set integerLiteral_literal(int value) {
-    assert(kind == idl.LinkedNodeKind.integerLiteral);
-    assert(value == null || value >= 0);
-    _variantField_15 = value;
-  }
-
   set interpolationExpression_leftBracket(int value) {
     assert(kind == idl.LinkedNodeKind.interpolationExpression);
     assert(value == null || value >= 0);
@@ -7002,12 +6800,6 @@
     _variantField_15 = value;
   }
 
-  set methodDeclaration_externalKeyword(int value) {
-    assert(kind == idl.LinkedNodeKind.methodDeclaration);
-    assert(value == null || value >= 0);
-    _variantField_15 = value;
-  }
-
   set methodInvocation_operator(int value) {
     assert(kind == idl.LinkedNodeKind.methodInvocation);
     assert(value == null || value >= 0);
@@ -7104,30 +6896,12 @@
     _variantField_15 = value;
   }
 
-  set simpleFormalParameter_keyword(int value) {
-    assert(kind == idl.LinkedNodeKind.simpleFormalParameter);
-    assert(value == null || value >= 0);
-    _variantField_15 = value;
-  }
-
   set simpleIdentifier_element(int value) {
     assert(kind == idl.LinkedNodeKind.simpleIdentifier);
     assert(value == null || value >= 0);
     _variantField_15 = value;
   }
 
-  set simpleStringLiteral_token(int value) {
-    assert(kind == idl.LinkedNodeKind.simpleStringLiteral);
-    assert(value == null || value >= 0);
-    _variantField_15 = value;
-  }
-
-  set spreadElement_spreadOperator(int value) {
-    assert(kind == idl.LinkedNodeKind.spreadElement);
-    assert(value == null || value >= 0);
-    _variantField_15 = value;
-  }
-
   set superConstructorInvocation_element(int value) {
     assert(kind == idl.LinkedNodeKind.superConstructorInvocation);
     assert(value == null || value >= 0);
@@ -7213,12 +6987,6 @@
     _variantField_15 = value;
   }
 
-  set variableDeclarationList_keyword(int value) {
-    assert(kind == idl.LinkedNodeKind.variableDeclarationList);
-    assert(value == null || value >= 0);
-    _variantField_15 = value;
-  }
-
   set variableDeclarationStatement_semicolon(int value) {
     assert(kind == idl.LinkedNodeKind.variableDeclarationStatement);
     assert(value == null || value >= 0);
@@ -7310,12 +7078,6 @@
   }
 
   @override
-  LinkedNodeBuilder get constructorDeclaration_name {
-    assert(kind == idl.LinkedNodeKind.constructorDeclaration);
-    return _variantField_7;
-  }
-
-  @override
   LinkedNodeBuilder get constructorFieldInitializer_fieldName {
     assert(kind == idl.LinkedNodeKind.constructorFieldInitializer);
     return _variantField_7;
@@ -7520,18 +7282,6 @@
   }
 
   @override
-  LinkedNodeBuilder get typeParameter_name {
-    assert(kind == idl.LinkedNodeKind.typeParameter);
-    return _variantField_7;
-  }
-
-  @override
-  LinkedNodeBuilder get variableDeclaration_name {
-    assert(kind == idl.LinkedNodeKind.variableDeclaration);
-    return _variantField_7;
-  }
-
-  @override
   LinkedNodeBuilder get whileStatement_condition {
     assert(kind == idl.LinkedNodeKind.whileStatement);
     return _variantField_7;
@@ -7592,11 +7342,6 @@
     _variantField_7 = value;
   }
 
-  set constructorDeclaration_name(LinkedNodeBuilder value) {
-    assert(kind == idl.LinkedNodeKind.constructorDeclaration);
-    _variantField_7 = value;
-  }
-
   set constructorFieldInitializer_fieldName(LinkedNodeBuilder value) {
     assert(kind == idl.LinkedNodeKind.constructorFieldInitializer);
     _variantField_7 = value;
@@ -7768,16 +7513,6 @@
     _variantField_7 = value;
   }
 
-  set typeParameter_name(LinkedNodeBuilder value) {
-    assert(kind == idl.LinkedNodeKind.typeParameter);
-    _variantField_7 = value;
-  }
-
-  set variableDeclaration_name(LinkedNodeBuilder value) {
-    assert(kind == idl.LinkedNodeKind.variableDeclaration);
-    _variantField_7 = value;
-  }
-
   set whileStatement_condition(LinkedNodeBuilder value) {
     assert(kind == idl.LinkedNodeKind.whileStatement);
     _variantField_7 = value;
@@ -7814,12 +7549,6 @@
   }
 
   @override
-  int get constructorDeclaration_factoryKeyword {
-    assert(kind == idl.LinkedNodeKind.constructorDeclaration);
-    return _variantField_17 ??= 0;
-  }
-
-  @override
   int get constructorFieldInitializer_thisKeyword {
     assert(kind == idl.LinkedNodeKind.constructorFieldInitializer);
     return _variantField_17 ??= 0;
@@ -7832,24 +7561,12 @@
   }
 
   @override
-  int get enumDeclaration_rightBracket {
-    assert(kind == idl.LinkedNodeKind.enumDeclaration);
-    return _variantField_17 ??= 0;
-  }
-
-  @override
   int get expressionFunctionBody_semicolon {
     assert(kind == idl.LinkedNodeKind.expressionFunctionBody);
     return _variantField_17 ??= 0;
   }
 
   @override
-  int get fieldDeclaration_staticKeyword {
-    assert(kind == idl.LinkedNodeKind.fieldDeclaration);
-    return _variantField_17 ??= 0;
-  }
-
-  @override
   int get fieldFormalParameter_thisKeyword {
     assert(kind == idl.LinkedNodeKind.fieldFormalParameter);
     return _variantField_17 ??= 0;
@@ -7953,12 +7670,6 @@
     _variantField_17 = value;
   }
 
-  set constructorDeclaration_factoryKeyword(int value) {
-    assert(kind == idl.LinkedNodeKind.constructorDeclaration);
-    assert(value == null || value >= 0);
-    _variantField_17 = value;
-  }
-
   set constructorFieldInitializer_thisKeyword(int value) {
     assert(kind == idl.LinkedNodeKind.constructorFieldInitializer);
     assert(value == null || value >= 0);
@@ -7971,24 +7682,12 @@
     _variantField_17 = value;
   }
 
-  set enumDeclaration_rightBracket(int value) {
-    assert(kind == idl.LinkedNodeKind.enumDeclaration);
-    assert(value == null || value >= 0);
-    _variantField_17 = value;
-  }
-
   set expressionFunctionBody_semicolon(int value) {
     assert(kind == idl.LinkedNodeKind.expressionFunctionBody);
     assert(value == null || value >= 0);
     _variantField_17 = value;
   }
 
-  set fieldDeclaration_staticKeyword(int value) {
-    assert(kind == idl.LinkedNodeKind.fieldDeclaration);
-    assert(value == null || value >= 0);
-    _variantField_17 = value;
-  }
-
   set fieldFormalParameter_thisKeyword(int value) {
     assert(kind == idl.LinkedNodeKind.fieldFormalParameter);
     assert(value == null || value >= 0);
@@ -8403,12 +8102,6 @@
   }
 
   @override
-  int get binaryExpression_operator {
-    assert(kind == idl.LinkedNodeKind.binaryExpression);
-    return _variantField_16 ??= 0;
-  }
-
-  @override
   int get block_rightBracket {
     assert(kind == idl.LinkedNodeKind.block);
     return _variantField_16 ??= 0;
@@ -8433,18 +8126,6 @@
   }
 
   @override
-  int get classDeclaration_classKeyword {
-    assert(kind == idl.LinkedNodeKind.classDeclaration);
-    return _variantField_16 ??= 0;
-  }
-
-  @override
-  int get classTypeAlias_equals {
-    assert(kind == idl.LinkedNodeKind.classTypeAlias);
-    return _variantField_16 ??= 0;
-  }
-
-  @override
   int get compilationUnit_endToken {
     assert(kind == idl.LinkedNodeKind.compilationUnit);
     return _variantField_16 ??= 0;
@@ -8463,12 +8144,6 @@
   }
 
   @override
-  int get constructorDeclaration_externalKeyword {
-    assert(kind == idl.LinkedNodeKind.constructorDeclaration);
-    return _variantField_16 ??= 0;
-  }
-
-  @override
   int get constructorFieldInitializer_period {
     assert(kind == idl.LinkedNodeKind.constructorFieldInitializer);
     return _variantField_16 ??= 0;
@@ -8493,12 +8168,6 @@
   }
 
   @override
-  int get enumDeclaration_leftBracket {
-    assert(kind == idl.LinkedNodeKind.enumDeclaration);
-    return _variantField_16 ??= 0;
-  }
-
-  @override
   int get expressionFunctionBody_keyword {
     assert(kind == idl.LinkedNodeKind.expressionFunctionBody);
     return _variantField_16 ??= 0;
@@ -8511,12 +8180,6 @@
   }
 
   @override
-  int get fieldFormalParameter_period {
-    assert(kind == idl.LinkedNodeKind.fieldFormalParameter);
-    return _variantField_16 ??= 0;
-  }
-
-  @override
   int get formalParameterList_leftParenthesis {
     assert(kind == idl.LinkedNodeKind.formalParameterList);
     return _variantField_16 ??= 0;
@@ -8537,24 +8200,12 @@
   }
 
   @override
-  int get functionDeclaration_propertyKeyword {
-    assert(kind == idl.LinkedNodeKind.functionDeclaration);
-    return _variantField_16 ??= 0;
-  }
-
-  @override
   int get genericFunctionType_question {
     assert(kind == idl.LinkedNodeKind.genericFunctionType);
     return _variantField_16 ??= 0;
   }
 
   @override
-  int get genericTypeAlias_equals {
-    assert(kind == idl.LinkedNodeKind.genericTypeAlias);
-    return _variantField_16 ??= 0;
-  }
-
-  @override
   int get ifMixin_ifKeyword {
     assert(kind == idl.LinkedNodeKind.ifElement ||
         kind == idl.LinkedNodeKind.ifStatement);
@@ -8562,12 +8213,6 @@
   }
 
   @override
-  int get importDirective_deferredKeyword {
-    assert(kind == idl.LinkedNodeKind.importDirective);
-    return _variantField_16 ??= 0;
-  }
-
-  @override
   int get indexExpression_period {
     assert(kind == idl.LinkedNodeKind.indexExpression);
     return _variantField_16 ??= 0;
@@ -8598,8 +8243,25 @@
   }
 
   @override
-  int get methodDeclaration_modifierKeyword {
-    assert(kind == idl.LinkedNodeKind.methodDeclaration);
+  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;
   }
 
@@ -8628,12 +8290,6 @@
   }
 
   @override
-  int get prefixExpression_operator {
-    assert(kind == idl.LinkedNodeKind.prefixExpression);
-    return _variantField_16 ??= 0;
-  }
-
-  @override
   int get redirectingConstructorInvocation_period {
     assert(kind == idl.LinkedNodeKind.redirectingConstructorInvocation);
     return _variantField_16 ??= 0;
@@ -8652,12 +8308,6 @@
   }
 
   @override
-  int get simpleIdentifier_token {
-    assert(kind == idl.LinkedNodeKind.simpleIdentifier);
-    return _variantField_16 ??= 0;
-  }
-
-  @override
   int get superConstructorInvocation_period {
     assert(kind == idl.LinkedNodeKind.superConstructorInvocation);
     return _variantField_16 ??= 0;
@@ -8695,12 +8345,6 @@
   }
 
   @override
-  int get variableDeclarationList_lateKeyword {
-    assert(kind == idl.LinkedNodeKind.variableDeclarationList);
-    return _variantField_16 ??= 0;
-  }
-
-  @override
   int get whileStatement_rightParenthesis {
     assert(kind == idl.LinkedNodeKind.whileStatement);
     return _variantField_16 ??= 0;
@@ -8742,12 +8386,6 @@
     _variantField_16 = value;
   }
 
-  set binaryExpression_operator(int value) {
-    assert(kind == idl.LinkedNodeKind.binaryExpression);
-    assert(value == null || value >= 0);
-    _variantField_16 = value;
-  }
-
   set block_rightBracket(int value) {
     assert(kind == idl.LinkedNodeKind.block);
     assert(value == null || value >= 0);
@@ -8772,18 +8410,6 @@
     _variantField_16 = value;
   }
 
-  set classDeclaration_classKeyword(int value) {
-    assert(kind == idl.LinkedNodeKind.classDeclaration);
-    assert(value == null || value >= 0);
-    _variantField_16 = value;
-  }
-
-  set classTypeAlias_equals(int value) {
-    assert(kind == idl.LinkedNodeKind.classTypeAlias);
-    assert(value == null || value >= 0);
-    _variantField_16 = value;
-  }
-
   set compilationUnit_endToken(int value) {
     assert(kind == idl.LinkedNodeKind.compilationUnit);
     assert(value == null || value >= 0);
@@ -8802,12 +8428,6 @@
     _variantField_16 = value;
   }
 
-  set constructorDeclaration_externalKeyword(int value) {
-    assert(kind == idl.LinkedNodeKind.constructorDeclaration);
-    assert(value == null || value >= 0);
-    _variantField_16 = value;
-  }
-
   set constructorFieldInitializer_period(int value) {
     assert(kind == idl.LinkedNodeKind.constructorFieldInitializer);
     assert(value == null || value >= 0);
@@ -8832,12 +8452,6 @@
     _variantField_16 = value;
   }
 
-  set enumDeclaration_leftBracket(int value) {
-    assert(kind == idl.LinkedNodeKind.enumDeclaration);
-    assert(value == null || value >= 0);
-    _variantField_16 = value;
-  }
-
   set expressionFunctionBody_keyword(int value) {
     assert(kind == idl.LinkedNodeKind.expressionFunctionBody);
     assert(value == null || value >= 0);
@@ -8850,12 +8464,6 @@
     _variantField_16 = value;
   }
 
-  set fieldFormalParameter_period(int value) {
-    assert(kind == idl.LinkedNodeKind.fieldFormalParameter);
-    assert(value == null || value >= 0);
-    _variantField_16 = value;
-  }
-
   set formalParameterList_leftParenthesis(int value) {
     assert(kind == idl.LinkedNodeKind.formalParameterList);
     assert(value == null || value >= 0);
@@ -8876,24 +8484,12 @@
     _variantField_16 = value;
   }
 
-  set functionDeclaration_propertyKeyword(int value) {
-    assert(kind == idl.LinkedNodeKind.functionDeclaration);
-    assert(value == null || value >= 0);
-    _variantField_16 = value;
-  }
-
   set genericFunctionType_question(int value) {
     assert(kind == idl.LinkedNodeKind.genericFunctionType);
     assert(value == null || value >= 0);
     _variantField_16 = value;
   }
 
-  set genericTypeAlias_equals(int value) {
-    assert(kind == idl.LinkedNodeKind.genericTypeAlias);
-    assert(value == null || value >= 0);
-    _variantField_16 = value;
-  }
-
   set ifMixin_ifKeyword(int value) {
     assert(kind == idl.LinkedNodeKind.ifElement ||
         kind == idl.LinkedNodeKind.ifStatement);
@@ -8901,12 +8497,6 @@
     _variantField_16 = value;
   }
 
-  set importDirective_deferredKeyword(int value) {
-    assert(kind == idl.LinkedNodeKind.importDirective);
-    assert(value == null || value >= 0);
-    _variantField_16 = value;
-  }
-
   set indexExpression_period(int value) {
     assert(kind == idl.LinkedNodeKind.indexExpression);
     assert(value == null || value >= 0);
@@ -8937,8 +8527,25 @@
     _variantField_16 = value;
   }
 
-  set methodDeclaration_modifierKeyword(int value) {
-    assert(kind == idl.LinkedNodeKind.methodDeclaration);
+  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;
   }
@@ -8967,12 +8574,6 @@
     _variantField_16 = value;
   }
 
-  set prefixExpression_operator(int value) {
-    assert(kind == idl.LinkedNodeKind.prefixExpression);
-    assert(value == null || value >= 0);
-    _variantField_16 = value;
-  }
-
   set redirectingConstructorInvocation_period(int value) {
     assert(kind == idl.LinkedNodeKind.redirectingConstructorInvocation);
     assert(value == null || value >= 0);
@@ -8991,12 +8592,6 @@
     _variantField_16 = value;
   }
 
-  set simpleIdentifier_token(int value) {
-    assert(kind == idl.LinkedNodeKind.simpleIdentifier);
-    assert(value == null || value >= 0);
-    _variantField_16 = value;
-  }
-
   set superConstructorInvocation_period(int value) {
     assert(kind == idl.LinkedNodeKind.superConstructorInvocation);
     assert(value == null || value >= 0);
@@ -9034,12 +8629,6 @@
     _variantField_16 = value;
   }
 
-  set variableDeclarationList_lateKeyword(int value) {
-    assert(kind == idl.LinkedNodeKind.variableDeclarationList);
-    assert(value == null || value >= 0);
-    _variantField_16 = value;
-  }
-
   set whileStatement_rightParenthesis(int value) {
     assert(kind == idl.LinkedNodeKind.whileStatement);
     assert(value == null || value >= 0);
@@ -9125,12 +8714,6 @@
   }
 
   @override
-  int get methodDeclaration_propertyKeyword {
-    assert(kind == idl.LinkedNodeKind.methodDeclaration);
-    return _variantField_18 ??= 0;
-  }
-
-  @override
   int get normalFormalParameter_requiredKeyword {
     assert(kind == idl.LinkedNodeKind.fieldFormalParameter ||
         kind == idl.LinkedNodeKind.functionTypedFormalParameter ||
@@ -9224,12 +8807,6 @@
     _variantField_18 = value;
   }
 
-  set methodDeclaration_propertyKeyword(int value) {
-    assert(kind == idl.LinkedNodeKind.methodDeclaration);
-    assert(value == null || value >= 0);
-    _variantField_18 = value;
-  }
-
   set normalFormalParameter_requiredKeyword(int value) {
     assert(kind == idl.LinkedNodeKind.fieldFormalParameter ||
         kind == idl.LinkedNodeKind.functionTypedFormalParameter ||
@@ -9304,14 +8881,6 @@
   }
 
   @override
-  int get normalFormalParameter_covariantKeyword {
-    assert(kind == idl.LinkedNodeKind.fieldFormalParameter ||
-        kind == idl.LinkedNodeKind.functionTypedFormalParameter ||
-        kind == idl.LinkedNodeKind.simpleFormalParameter);
-    return _variantField_19 ??= 0;
-  }
-
-  @override
   int get switchStatement_rightBracket {
     assert(kind == idl.LinkedNodeKind.switchStatement);
     return _variantField_19 ??= 0;
@@ -9326,13 +8895,6 @@
   }
 
   @override
-  int get typedLiteral_constKeyword {
-    assert(kind == idl.LinkedNodeKind.listLiteral ||
-        kind == idl.LinkedNodeKind.setOrMapLiteral);
-    return _variantField_19 ??= 0;
-  }
-
-  @override
   int get uriBasedDirective_uriElement {
     assert(kind == idl.LinkedNodeKind.exportDirective ||
         kind == idl.LinkedNodeKind.importDirective ||
@@ -9391,14 +8953,6 @@
     _variantField_19 = value;
   }
 
-  set normalFormalParameter_covariantKeyword(int value) {
-    assert(kind == idl.LinkedNodeKind.fieldFormalParameter ||
-        kind == idl.LinkedNodeKind.functionTypedFormalParameter ||
-        kind == idl.LinkedNodeKind.simpleFormalParameter);
-    assert(value == null || value >= 0);
-    _variantField_19 = value;
-  }
-
   set switchStatement_rightBracket(int value) {
     assert(kind == idl.LinkedNodeKind.switchStatement);
     assert(value == null || value >= 0);
@@ -9413,13 +8967,6 @@
     _variantField_19 = value;
   }
 
-  set typedLiteral_constKeyword(int value) {
-    assert(kind == idl.LinkedNodeKind.listLiteral ||
-        kind == idl.LinkedNodeKind.setOrMapLiteral);
-    assert(value == null || value >= 0);
-    _variantField_19 = value;
-  }
-
   set uriBasedDirective_uriElement(int value) {
     assert(kind == idl.LinkedNodeKind.exportDirective ||
         kind == idl.LinkedNodeKind.importDirective ||
@@ -9429,6 +8976,28 @@
   }
 
   @override
+  idl.UnlinkedTokenType get binaryExpression_operator {
+    assert(kind == idl.LinkedNodeKind.binaryExpression);
+    return _variantField_28 ??= idl.UnlinkedTokenType.NOTHING;
+  }
+
+  @override
+  idl.UnlinkedTokenType get prefixExpression_operator {
+    assert(kind == idl.LinkedNodeKind.prefixExpression);
+    return _variantField_28 ??= idl.UnlinkedTokenType.NOTHING;
+  }
+
+  set binaryExpression_operator(idl.UnlinkedTokenType value) {
+    assert(kind == idl.LinkedNodeKind.binaryExpression);
+    _variantField_28 = value;
+  }
+
+  set prefixExpression_operator(idl.UnlinkedTokenType value) {
+    assert(kind == idl.LinkedNodeKind.prefixExpression);
+    _variantField_28 = value;
+  }
+
+  @override
   bool get booleanLiteral_value {
     assert(kind == idl.LinkedNodeKind.booleanLiteral);
     return _variantField_27 ??= false;
@@ -9586,14 +9155,6 @@
     return _variantField_12;
   }
 
-  @override
-  LinkedNodeBuilder get normalFormalParameter_identifier {
-    assert(kind == idl.LinkedNodeKind.fieldFormalParameter ||
-        kind == idl.LinkedNodeKind.functionTypedFormalParameter ||
-        kind == idl.LinkedNodeKind.simpleFormalParameter);
-    return _variantField_12;
-  }
-
   set classOrMixinDeclaration_implementsClause(LinkedNodeBuilder value) {
     assert(kind == idl.LinkedNodeKind.classDeclaration ||
         kind == idl.LinkedNodeKind.mixinDeclaration);
@@ -9606,13 +9167,6 @@
     _variantField_12 = value;
   }
 
-  set normalFormalParameter_identifier(LinkedNodeBuilder value) {
-    assert(kind == idl.LinkedNodeKind.fieldFormalParameter ||
-        kind == idl.LinkedNodeKind.functionTypedFormalParameter ||
-        kind == idl.LinkedNodeKind.simpleFormalParameter);
-    _variantField_12 = value;
-  }
-
   @override
   List<LinkedNodeBuilder> get classOrMixinDeclaration_members {
     assert(kind == idl.LinkedNodeKind.classDeclaration ||
@@ -9757,27 +9311,40 @@
   }
 
   @override
-  List<int> get comment_tokens {
+  List<String> get comment_tokens {
     assert(kind == idl.LinkedNodeKind.comment);
-    return _variantField_28 ??= <int>[];
+    return _variantField_36 ??= <String>[];
   }
 
   @override
-  List<int> get symbolLiteral_components {
-    assert(kind == idl.LinkedNodeKind.symbolLiteral);
-    return _variantField_28 ??= <int>[];
+  List<String> get mixinDeclaration_superInvokedNames {
+    assert(kind == idl.LinkedNodeKind.mixinDeclaration);
+    return _variantField_36 ??= <String>[];
   }
 
-  set comment_tokens(List<int> value) {
+  @override
+  List<String> get names {
+    assert(kind == idl.LinkedNodeKind.hideCombinator ||
+        kind == idl.LinkedNodeKind.showCombinator ||
+        kind == idl.LinkedNodeKind.symbolLiteral);
+    return _variantField_36 ??= <String>[];
+  }
+
+  set comment_tokens(List<String> value) {
     assert(kind == idl.LinkedNodeKind.comment);
-    assert(value == null || value.every((e) => e >= 0));
-    _variantField_28 = value;
+    _variantField_36 = value;
   }
 
-  set symbolLiteral_components(List<int> value) {
-    assert(kind == idl.LinkedNodeKind.symbolLiteral);
-    assert(value == null || value.every((e) => e >= 0));
-    _variantField_28 = value;
+  set mixinDeclaration_superInvokedNames(List<String> value) {
+    assert(kind == idl.LinkedNodeKind.mixinDeclaration);
+    _variantField_36 = value;
+  }
+
+  set names(List<String> value) {
+    assert(kind == idl.LinkedNodeKind.hideCombinator ||
+        kind == idl.LinkedNodeKind.showCombinator ||
+        kind == idl.LinkedNodeKind.symbolLiteral);
+    _variantField_36 = value;
   }
 
   @override
@@ -9834,22 +9401,11 @@
     return _variantField_10;
   }
 
-  @override
-  LinkedNodeBuilder get methodDeclaration_name {
-    assert(kind == idl.LinkedNodeKind.methodDeclaration);
-    return _variantField_10;
-  }
-
   set constructorDeclaration_returnType(LinkedNodeBuilder value) {
     assert(kind == idl.LinkedNodeKind.constructorDeclaration);
     _variantField_10 = value;
   }
 
-  set methodDeclaration_name(LinkedNodeBuilder value) {
-    assert(kind == idl.LinkedNodeKind.methodDeclaration);
-    _variantField_10 = value;
-  }
-
   @override
   idl.LinkedNodeFormalParameterKind get defaultFormalParameter_kind {
     assert(kind == idl.LinkedNodeKind.defaultFormalParameter);
@@ -9890,23 +9446,17 @@
 
   @override
   LinkedNodeTypeBuilder get expression_type {
-    assert(kind == idl.LinkedNodeKind.adjacentStrings ||
-        kind == idl.LinkedNodeKind.assignmentExpression ||
+    assert(kind == idl.LinkedNodeKind.assignmentExpression ||
         kind == idl.LinkedNodeKind.asExpression ||
         kind == idl.LinkedNodeKind.awaitExpression ||
         kind == idl.LinkedNodeKind.binaryExpression ||
-        kind == idl.LinkedNodeKind.booleanLiteral ||
         kind == idl.LinkedNodeKind.cascadeExpression ||
         kind == idl.LinkedNodeKind.conditionalExpression ||
-        kind == idl.LinkedNodeKind.doubleLiteral ||
         kind == idl.LinkedNodeKind.functionExpressionInvocation ||
         kind == idl.LinkedNodeKind.indexExpression ||
         kind == idl.LinkedNodeKind.instanceCreationExpression ||
-        kind == idl.LinkedNodeKind.integerLiteral ||
-        kind == idl.LinkedNodeKind.isExpression ||
         kind == idl.LinkedNodeKind.listLiteral ||
         kind == idl.LinkedNodeKind.methodInvocation ||
-        kind == idl.LinkedNodeKind.namedExpression ||
         kind == idl.LinkedNodeKind.nullLiteral ||
         kind == idl.LinkedNodeKind.parenthesizedExpression ||
         kind == idl.LinkedNodeKind.prefixExpression ||
@@ -9916,8 +9466,6 @@
         kind == idl.LinkedNodeKind.rethrowExpression ||
         kind == idl.LinkedNodeKind.setOrMapLiteral ||
         kind == idl.LinkedNodeKind.simpleIdentifier ||
-        kind == idl.LinkedNodeKind.simpleStringLiteral ||
-        kind == idl.LinkedNodeKind.stringInterpolation ||
         kind == idl.LinkedNodeKind.superExpression ||
         kind == idl.LinkedNodeKind.symbolLiteral ||
         kind == idl.LinkedNodeKind.thisExpression ||
@@ -9932,23 +9480,17 @@
   }
 
   set expression_type(LinkedNodeTypeBuilder value) {
-    assert(kind == idl.LinkedNodeKind.adjacentStrings ||
-        kind == idl.LinkedNodeKind.assignmentExpression ||
+    assert(kind == idl.LinkedNodeKind.assignmentExpression ||
         kind == idl.LinkedNodeKind.asExpression ||
         kind == idl.LinkedNodeKind.awaitExpression ||
         kind == idl.LinkedNodeKind.binaryExpression ||
-        kind == idl.LinkedNodeKind.booleanLiteral ||
         kind == idl.LinkedNodeKind.cascadeExpression ||
         kind == idl.LinkedNodeKind.conditionalExpression ||
-        kind == idl.LinkedNodeKind.doubleLiteral ||
         kind == idl.LinkedNodeKind.functionExpressionInvocation ||
         kind == idl.LinkedNodeKind.indexExpression ||
         kind == idl.LinkedNodeKind.instanceCreationExpression ||
-        kind == idl.LinkedNodeKind.integerLiteral ||
-        kind == idl.LinkedNodeKind.isExpression ||
         kind == idl.LinkedNodeKind.listLiteral ||
         kind == idl.LinkedNodeKind.methodInvocation ||
-        kind == idl.LinkedNodeKind.namedExpression ||
         kind == idl.LinkedNodeKind.nullLiteral ||
         kind == idl.LinkedNodeKind.parenthesizedExpression ||
         kind == idl.LinkedNodeKind.prefixExpression ||
@@ -9958,8 +9500,6 @@
         kind == idl.LinkedNodeKind.rethrowExpression ||
         kind == idl.LinkedNodeKind.setOrMapLiteral ||
         kind == idl.LinkedNodeKind.simpleIdentifier ||
-        kind == idl.LinkedNodeKind.simpleStringLiteral ||
-        kind == idl.LinkedNodeKind.stringInterpolation ||
         kind == idl.LinkedNodeKind.superExpression ||
         kind == idl.LinkedNodeKind.symbolLiteral ||
         kind == idl.LinkedNodeKind.thisExpression ||
@@ -9973,6 +9513,25 @@
   }
 
   @override
+  int get flags => _flags ??= 0;
+
+  set flags(int value) {
+    assert(value == null || value >= 0);
+    this._flags = value;
+  }
+
+  @override
+  String get importDirective_prefix {
+    assert(kind == idl.LinkedNodeKind.importDirective);
+    return _variantField_41 ??= '';
+  }
+
+  set importDirective_prefix(String value) {
+    assert(kind == idl.LinkedNodeKind.importDirective);
+    _variantField_41 = value;
+  }
+
+  @override
   String get interpolationString_value {
     assert(kind == idl.LinkedNodeKind.interpolationString);
     return _variantField_30 ??= '';
@@ -9991,18 +9550,6 @@
   }
 
   @override
-  LinkedNodeBuilder get namedCompilationUnitMember_name {
-    assert(kind == idl.LinkedNodeKind.classDeclaration ||
-        kind == idl.LinkedNodeKind.classTypeAlias ||
-        kind == idl.LinkedNodeKind.enumDeclaration ||
-        kind == idl.LinkedNodeKind.functionDeclaration ||
-        kind == idl.LinkedNodeKind.functionTypeAlias ||
-        kind == idl.LinkedNodeKind.genericTypeAlias ||
-        kind == idl.LinkedNodeKind.mixinDeclaration);
-    return _variantField_14;
-  }
-
-  @override
   LinkedNodeBuilder get normalFormalParameter_comment {
     assert(kind == idl.LinkedNodeKind.fieldFormalParameter ||
         kind == idl.LinkedNodeKind.functionTypedFormalParameter ||
@@ -10031,17 +9578,6 @@
     _variantField_14 = value;
   }
 
-  set namedCompilationUnitMember_name(LinkedNodeBuilder value) {
-    assert(kind == idl.LinkedNodeKind.classDeclaration ||
-        kind == idl.LinkedNodeKind.classTypeAlias ||
-        kind == idl.LinkedNodeKind.enumDeclaration ||
-        kind == idl.LinkedNodeKind.functionDeclaration ||
-        kind == idl.LinkedNodeKind.functionTypeAlias ||
-        kind == idl.LinkedNodeKind.genericTypeAlias ||
-        kind == idl.LinkedNodeKind.mixinDeclaration);
-    _variantField_14 = value;
-  }
-
   set normalFormalParameter_comment(LinkedNodeBuilder value) {
     assert(kind == idl.LinkedNodeKind.fieldFormalParameter ||
         kind == idl.LinkedNodeKind.functionTypedFormalParameter ||
@@ -10077,14 +9613,10 @@
   }
 
   @override
-  List<String> get mixinDeclaration_superInvokedNames {
-    assert(kind == idl.LinkedNodeKind.mixinDeclaration);
-    return _variantField_36 ??= <String>[];
-  }
+  String get name => _name ??= '';
 
-  set mixinDeclaration_superInvokedNames(List<String> value) {
-    assert(kind == idl.LinkedNodeKind.mixinDeclaration);
-    _variantField_36 = value;
+  set name(String value) {
+    this._name = value;
   }
 
   @override
@@ -10142,6 +9674,17 @@
   }
 
   @override
+  idl.UnlinkedTokenType get spreadElement_spreadOperator2 {
+    assert(kind == idl.LinkedNodeKind.spreadElement);
+    return _variantField_40 ??= idl.UnlinkedTokenType.NOTHING;
+  }
+
+  set spreadElement_spreadOperator2(idl.UnlinkedTokenType value) {
+    assert(kind == idl.LinkedNodeKind.spreadElement);
+    _variantField_40 = value;
+  }
+
+  @override
   TopLevelInferenceErrorBuilder get topLevelTypeInferenceError {
     assert(kind == idl.LinkedNodeKind.simpleFormalParameter ||
         kind == idl.LinkedNodeKind.variableDeclaration);
@@ -10186,23 +9729,19 @@
     LinkedNodeBuilder annotatedNode_comment,
     List<LinkedNodeBuilder> annotatedNode_metadata,
     LinkedNodeBuilder functionDeclaration_functionExpression,
-    int functionDeclaration_externalKeyword,
     LinkedNodeBuilder functionDeclaration_returnType,
-    int functionDeclaration_propertyKeyword,
+    int nameOffset,
     int codeLength,
     int codeOffset,
-    LinkedNodeBuilder namedCompilationUnitMember_name,
   })  : _kind = idl.LinkedNodeKind.functionDeclaration,
         _variantField_24 = actualReturnType,
         _variantField_11 = annotatedNode_comment,
         _variantField_4 = annotatedNode_metadata,
         _variantField_6 = functionDeclaration_functionExpression,
-        _variantField_15 = functionDeclaration_externalKeyword,
         _variantField_7 = functionDeclaration_returnType,
-        _variantField_16 = functionDeclaration_propertyKeyword,
+        _variantField_16 = nameOffset,
         _variantField_34 = codeLength,
-        _variantField_33 = codeOffset,
-        _variantField_14 = namedCompilationUnitMember_name;
+        _variantField_33 = codeOffset;
 
   LinkedNodeBuilder.functionExpression({
     LinkedNodeTypeBuilder actualReturnType,
@@ -10226,12 +9765,12 @@
     LinkedNodeBuilder functionTypeAlias_formalParameters,
     LinkedNodeBuilder functionTypeAlias_returnType,
     LinkedNodeBuilder functionTypeAlias_typeParameters,
+    int nameOffset,
     int typeAlias_typedefKeyword,
     int typeAlias_semicolon,
     bool typeAlias_hasSelfReference,
     int codeLength,
     int codeOffset,
-    LinkedNodeBuilder namedCompilationUnitMember_name,
     bool simplyBoundable_isSimplyBounded,
   })  : _kind = idl.LinkedNodeKind.functionTypeAlias,
         _variantField_24 = actualReturnType,
@@ -10240,12 +9779,12 @@
         _variantField_6 = functionTypeAlias_formalParameters,
         _variantField_7 = functionTypeAlias_returnType,
         _variantField_8 = functionTypeAlias_typeParameters,
+        _variantField_16 = nameOffset,
         _variantField_18 = typeAlias_typedefKeyword,
         _variantField_19 = typeAlias_semicolon,
         _variantField_27 = typeAlias_hasSelfReference,
         _variantField_34 = codeLength,
         _variantField_33 = codeOffset,
-        _variantField_14 = namedCompilationUnitMember_name,
         _variantField_31 = simplyBoundable_isSimplyBounded;
 
   LinkedNodeBuilder.genericFunctionType({
@@ -10272,51 +9811,42 @@
     LinkedNodeBuilder annotatedNode_comment,
     List<LinkedNodeBuilder> annotatedNode_metadata,
     LinkedNodeBuilder methodDeclaration_body,
-    int methodDeclaration_externalKeyword,
     LinkedNodeBuilder methodDeclaration_formalParameters,
     int methodDeclaration_operatorKeyword,
     LinkedNodeBuilder methodDeclaration_returnType,
-    int methodDeclaration_modifierKeyword,
-    int methodDeclaration_propertyKeyword,
+    int nameOffset,
     int methodDeclaration_actualProperty,
     bool executable_isAsynchronous,
     LinkedNodeBuilder methodDeclaration_typeParameters,
     int codeLength,
     int codeOffset,
-    LinkedNodeBuilder methodDeclaration_name,
     bool executable_isGenerator,
   })  : _kind = idl.LinkedNodeKind.methodDeclaration,
         _variantField_24 = actualReturnType,
         _variantField_11 = annotatedNode_comment,
         _variantField_4 = annotatedNode_metadata,
         _variantField_6 = methodDeclaration_body,
-        _variantField_15 = methodDeclaration_externalKeyword,
         _variantField_7 = methodDeclaration_formalParameters,
         _variantField_17 = methodDeclaration_operatorKeyword,
         _variantField_8 = methodDeclaration_returnType,
-        _variantField_16 = methodDeclaration_modifierKeyword,
-        _variantField_18 = methodDeclaration_propertyKeyword,
+        _variantField_16 = nameOffset,
         _variantField_19 = methodDeclaration_actualProperty,
         _variantField_27 = executable_isAsynchronous,
         _variantField_9 = methodDeclaration_typeParameters,
         _variantField_34 = codeLength,
         _variantField_33 = codeOffset,
-        _variantField_10 = methodDeclaration_name,
         _variantField_37 = executable_isGenerator;
 
   LinkedNodeBuilder.fieldFormalParameter({
     LinkedNodeTypeBuilder actualType,
     List<LinkedNodeBuilder> normalFormalParameter_metadata,
     LinkedNodeBuilder fieldFormalParameter_type,
-    int fieldFormalParameter_keyword,
     LinkedNodeBuilder fieldFormalParameter_typeParameters,
     int fieldFormalParameter_thisKeyword,
     LinkedNodeBuilder fieldFormalParameter_formalParameters,
-    int fieldFormalParameter_period,
+    int nameOffset,
     int normalFormalParameter_requiredKeyword,
-    int normalFormalParameter_covariantKeyword,
     bool inheritsCovariant,
-    LinkedNodeBuilder normalFormalParameter_identifier,
     int codeLength,
     int codeOffset,
     LinkedNodeBuilder normalFormalParameter_comment,
@@ -10324,15 +9854,12 @@
         _variantField_24 = actualType,
         _variantField_4 = normalFormalParameter_metadata,
         _variantField_6 = fieldFormalParameter_type,
-        _variantField_15 = fieldFormalParameter_keyword,
         _variantField_7 = fieldFormalParameter_typeParameters,
         _variantField_17 = fieldFormalParameter_thisKeyword,
         _variantField_8 = fieldFormalParameter_formalParameters,
-        _variantField_16 = fieldFormalParameter_period,
+        _variantField_16 = nameOffset,
         _variantField_18 = normalFormalParameter_requiredKeyword,
-        _variantField_19 = normalFormalParameter_covariantKeyword,
         _variantField_27 = inheritsCovariant,
-        _variantField_12 = normalFormalParameter_identifier,
         _variantField_34 = codeLength,
         _variantField_33 = codeOffset,
         _variantField_14 = normalFormalParameter_comment;
@@ -10343,10 +9870,9 @@
     LinkedNodeBuilder functionTypedFormalParameter_formalParameters,
     LinkedNodeBuilder functionTypedFormalParameter_returnType,
     LinkedNodeBuilder functionTypedFormalParameter_typeParameters,
+    int nameOffset,
     int normalFormalParameter_requiredKeyword,
-    int normalFormalParameter_covariantKeyword,
     bool inheritsCovariant,
-    LinkedNodeBuilder normalFormalParameter_identifier,
     int codeLength,
     int codeOffset,
     LinkedNodeBuilder normalFormalParameter_comment,
@@ -10356,10 +9882,9 @@
         _variantField_6 = functionTypedFormalParameter_formalParameters,
         _variantField_7 = functionTypedFormalParameter_returnType,
         _variantField_8 = functionTypedFormalParameter_typeParameters,
+        _variantField_16 = nameOffset,
         _variantField_18 = normalFormalParameter_requiredKeyword,
-        _variantField_19 = normalFormalParameter_covariantKeyword,
         _variantField_27 = inheritsCovariant,
-        _variantField_12 = normalFormalParameter_identifier,
         _variantField_34 = codeLength,
         _variantField_33 = codeOffset,
         _variantField_14 = normalFormalParameter_comment;
@@ -10368,11 +9893,9 @@
     LinkedNodeTypeBuilder actualType,
     List<LinkedNodeBuilder> normalFormalParameter_metadata,
     LinkedNodeBuilder simpleFormalParameter_type,
-    int simpleFormalParameter_keyword,
+    int nameOffset,
     int normalFormalParameter_requiredKeyword,
-    int normalFormalParameter_covariantKeyword,
     bool inheritsCovariant,
-    LinkedNodeBuilder normalFormalParameter_identifier,
     int codeLength,
     int codeOffset,
     LinkedNodeBuilder normalFormalParameter_comment,
@@ -10381,11 +9904,9 @@
         _variantField_24 = actualType,
         _variantField_4 = normalFormalParameter_metadata,
         _variantField_6 = simpleFormalParameter_type,
-        _variantField_15 = simpleFormalParameter_keyword,
+        _variantField_16 = nameOffset,
         _variantField_18 = normalFormalParameter_requiredKeyword,
-        _variantField_19 = normalFormalParameter_covariantKeyword,
         _variantField_27 = inheritsCovariant,
-        _variantField_12 = normalFormalParameter_identifier,
         _variantField_34 = codeLength,
         _variantField_33 = codeOffset,
         _variantField_14 = normalFormalParameter_comment,
@@ -10397,7 +9918,7 @@
     List<LinkedNodeBuilder> annotatedNode_metadata,
     LinkedNodeBuilder variableDeclaration_initializer,
     int variableDeclaration_equals,
-    LinkedNodeBuilder variableDeclaration_name,
+    int nameOffset,
     bool inheritsCovariant,
     int codeLength,
     int codeOffset,
@@ -10409,7 +9930,7 @@
         _variantField_4 = annotatedNode_metadata,
         _variantField_6 = variableDeclaration_initializer,
         _variantField_15 = variableDeclaration_equals,
-        _variantField_7 = variableDeclaration_name,
+        _variantField_16 = nameOffset,
         _variantField_27 = inheritsCovariant,
         _variantField_34 = codeLength,
         _variantField_33 = codeOffset,
@@ -10422,7 +9943,7 @@
     int binaryExpression_element,
     LinkedNodeBuilder binaryExpression_rightOperand,
     LinkedNodeTypeBuilder binaryExpression_elementType,
-    int binaryExpression_operator,
+    idl.UnlinkedTokenType binaryExpression_operator,
     LinkedNodeTypeBuilder expression_type,
   })  : _kind = idl.LinkedNodeKind.binaryExpression,
         _variantField_24 = binaryExpression_invokeType,
@@ -10430,7 +9951,7 @@
         _variantField_15 = binaryExpression_element,
         _variantField_7 = binaryExpression_rightOperand,
         _variantField_23 = binaryExpression_elementType,
-        _variantField_16 = binaryExpression_operator,
+        _variantField_28 = binaryExpression_operator,
         _variantField_25 = expression_type;
 
   LinkedNodeBuilder.functionExpressionInvocation({
@@ -10465,10 +9986,8 @@
 
   LinkedNodeBuilder.adjacentStrings({
     List<LinkedNodeBuilder> adjacentStrings_strings,
-    LinkedNodeTypeBuilder expression_type,
   })  : _kind = idl.LinkedNodeKind.adjacentStrings,
-        _variantField_2 = adjacentStrings_strings,
-        _variantField_25 = expression_type;
+        _variantField_2 = adjacentStrings_strings;
 
   LinkedNodeBuilder.argumentList({
     List<LinkedNodeBuilder> argumentList_arguments,
@@ -10499,11 +10018,11 @@
 
   LinkedNodeBuilder.comment({
     List<LinkedNodeBuilder> comment_references,
-    List<int> comment_tokens,
+    List<String> comment_tokens,
     idl.LinkedNodeCommentType comment_type,
   })  : _kind = idl.LinkedNodeKind.comment,
         _variantField_2 = comment_references,
-        _variantField_28 = comment_tokens,
+        _variantField_36 = comment_tokens,
         _variantField_29 = comment_type;
 
   LinkedNodeBuilder.compilationUnit({
@@ -10528,11 +10047,8 @@
     LinkedNodeBuilder annotatedNode_comment,
     List<LinkedNodeBuilder> annotatedNode_metadata,
     LinkedNodeBuilder constructorDeclaration_body,
-    int constructorDeclaration_constKeyword,
-    LinkedNodeBuilder constructorDeclaration_name,
-    int constructorDeclaration_factoryKeyword,
     LinkedNodeBuilder constructorDeclaration_parameters,
-    int constructorDeclaration_externalKeyword,
+    int nameOffset,
     int constructorDeclaration_period,
     int constructorDeclaration_separator,
     bool executable_isAsynchronous,
@@ -10546,11 +10062,8 @@
         _variantField_11 = annotatedNode_comment,
         _variantField_4 = annotatedNode_metadata,
         _variantField_6 = constructorDeclaration_body,
-        _variantField_15 = constructorDeclaration_constKeyword,
-        _variantField_7 = constructorDeclaration_name,
-        _variantField_17 = constructorDeclaration_factoryKeyword,
         _variantField_8 = constructorDeclaration_parameters,
-        _variantField_16 = constructorDeclaration_externalKeyword,
+        _variantField_16 = nameOffset,
         _variantField_18 = constructorDeclaration_period,
         _variantField_19 = constructorDeclaration_separator,
         _variantField_27 = executable_isAsynchronous,
@@ -10569,22 +10082,16 @@
     List<LinkedNodeBuilder> enumDeclaration_constants,
     LinkedNodeBuilder annotatedNode_comment,
     List<LinkedNodeBuilder> annotatedNode_metadata,
-    int enumDeclaration_enumKeyword,
-    int enumDeclaration_rightBracket,
-    int enumDeclaration_leftBracket,
+    int nameOffset,
     int codeLength,
     int codeOffset,
-    LinkedNodeBuilder namedCompilationUnitMember_name,
   })  : _kind = idl.LinkedNodeKind.enumDeclaration,
         _variantField_2 = enumDeclaration_constants,
         _variantField_11 = annotatedNode_comment,
         _variantField_4 = annotatedNode_metadata,
-        _variantField_15 = enumDeclaration_enumKeyword,
-        _variantField_17 = enumDeclaration_rightBracket,
-        _variantField_16 = enumDeclaration_leftBracket,
+        _variantField_16 = nameOffset,
         _variantField_34 = codeLength,
-        _variantField_33 = codeOffset,
-        _variantField_14 = namedCompilationUnitMember_name;
+        _variantField_33 = codeOffset;
 
   LinkedNodeBuilder.formalParameterList({
     List<LinkedNodeBuilder> formalParameterList_parameters,
@@ -10599,13 +10106,6 @@
         _variantField_16 = formalParameterList_leftParenthesis,
         _variantField_18 = formalParameterList_rightParenthesis;
 
-  LinkedNodeBuilder.hideCombinator({
-    List<LinkedNodeBuilder> hideCombinator_hiddenNames,
-    int combinator_keyword,
-  })  : _kind = idl.LinkedNodeKind.hideCombinator,
-        _variantField_2 = hideCombinator_hiddenNames,
-        _variantField_19 = combinator_keyword;
-
   LinkedNodeBuilder.implementsClause({
     List<LinkedNodeBuilder> implementsClause_interfaces,
     int implementsClause_implementsKeyword,
@@ -10629,14 +10129,12 @@
     List<LinkedNodeBuilder> listLiteral_elements,
     int listLiteral_leftBracket,
     int listLiteral_rightBracket,
-    int typedLiteral_constKeyword,
     LinkedNodeTypeBuilder expression_type,
     LinkedNodeBuilder typedLiteral_typeArguments,
   })  : _kind = idl.LinkedNodeKind.listLiteral,
         _variantField_2 = listLiteral_elements,
         _variantField_15 = listLiteral_leftBracket,
         _variantField_16 = listLiteral_rightBracket,
-        _variantField_19 = typedLiteral_constKeyword,
         _variantField_25 = expression_type,
         _variantField_14 = typedLiteral_typeArguments;
 
@@ -10644,6 +10142,7 @@
     List<LinkedNodeBuilder> namespaceDirective_combinators,
     LinkedNodeBuilder annotatedNode_comment,
     List<LinkedNodeBuilder> annotatedNode_metadata,
+    int nameOffset,
     int directive_keyword,
     int uriBasedDirective_uriElement,
     int directive_semicolon,
@@ -10655,6 +10154,7 @@
         _variantField_2 = namespaceDirective_combinators,
         _variantField_11 = annotatedNode_comment,
         _variantField_4 = annotatedNode_metadata,
+        _variantField_16 = nameOffset,
         _variantField_18 = directive_keyword,
         _variantField_19 = uriBasedDirective_uriElement,
         _variantField_33 = directive_semicolon,
@@ -10667,13 +10167,13 @@
     List<LinkedNodeBuilder> namespaceDirective_combinators,
     LinkedNodeBuilder annotatedNode_comment,
     List<LinkedNodeBuilder> annotatedNode_metadata,
-    LinkedNodeBuilder importDirective_prefix,
-    int importDirective_asKeyword,
-    int importDirective_deferredKeyword,
+    int importDirective_prefixOffset,
+    int nameOffset,
     int directive_keyword,
     int uriBasedDirective_uriElement,
     int directive_semicolon,
     List<LinkedNodeBuilder> namespaceDirective_configurations,
+    String importDirective_prefix,
     LinkedNodeBuilder uriBasedDirective_uri,
     String namespaceDirective_selectedUri,
     String uriBasedDirective_uriContent,
@@ -10681,13 +10181,13 @@
         _variantField_2 = namespaceDirective_combinators,
         _variantField_11 = annotatedNode_comment,
         _variantField_4 = annotatedNode_metadata,
-        _variantField_6 = importDirective_prefix,
-        _variantField_15 = importDirective_asKeyword,
-        _variantField_16 = importDirective_deferredKeyword,
+        _variantField_15 = importDirective_prefixOffset,
+        _variantField_16 = nameOffset,
         _variantField_18 = directive_keyword,
         _variantField_19 = uriBasedDirective_uriElement,
         _variantField_33 = directive_semicolon,
         _variantField_3 = namespaceDirective_configurations,
+        _variantField_41 = importDirective_prefix,
         _variantField_14 = uriBasedDirective_uri,
         _variantField_20 = namespaceDirective_selectedUri,
         _variantField_22 = uriBasedDirective_uriContent;
@@ -10703,7 +10203,6 @@
     List<LinkedNodeBuilder> setOrMapLiteral_elements,
     int setOrMapLiteral_leftBracket,
     int setOrMapLiteral_rightBracket,
-    int typedLiteral_constKeyword,
     bool setOrMapLiteral_isMap,
     LinkedNodeTypeBuilder expression_type,
     LinkedNodeBuilder typedLiteral_typeArguments,
@@ -10712,25 +10211,15 @@
         _variantField_2 = setOrMapLiteral_elements,
         _variantField_15 = setOrMapLiteral_leftBracket,
         _variantField_16 = setOrMapLiteral_rightBracket,
-        _variantField_19 = typedLiteral_constKeyword,
         _variantField_27 = setOrMapLiteral_isMap,
         _variantField_25 = expression_type,
         _variantField_14 = typedLiteral_typeArguments,
         _variantField_31 = setOrMapLiteral_isSet;
 
-  LinkedNodeBuilder.showCombinator({
-    List<LinkedNodeBuilder> showCombinator_shownNames,
-    int combinator_keyword,
-  })  : _kind = idl.LinkedNodeKind.showCombinator,
-        _variantField_2 = showCombinator_shownNames,
-        _variantField_19 = combinator_keyword;
-
   LinkedNodeBuilder.stringInterpolation({
     List<LinkedNodeBuilder> stringInterpolation_elements,
-    LinkedNodeTypeBuilder expression_type,
   })  : _kind = idl.LinkedNodeKind.stringInterpolation,
-        _variantField_2 = stringInterpolation_elements,
-        _variantField_25 = expression_type;
+        _variantField_2 = stringInterpolation_elements;
 
   LinkedNodeBuilder.switchStatement({
     List<LinkedNodeBuilder> switchStatement_members,
@@ -10785,15 +10274,11 @@
     LinkedNodeBuilder annotatedNode_comment,
     List<LinkedNodeBuilder> annotatedNode_metadata,
     LinkedNodeBuilder variableDeclarationList_type,
-    int variableDeclarationList_keyword,
-    int variableDeclarationList_lateKeyword,
   })  : _kind = idl.LinkedNodeKind.variableDeclarationList,
         _variantField_2 = variableDeclarationList_variables,
         _variantField_11 = annotatedNode_comment,
         _variantField_4 = annotatedNode_metadata,
-        _variantField_6 = variableDeclarationList_type,
-        _variantField_15 = variableDeclarationList_keyword,
-        _variantField_16 = variableDeclarationList_lateKeyword;
+        _variantField_6 = variableDeclarationList_type;
 
   LinkedNodeBuilder.withClause({
     List<LinkedNodeBuilder> withClause_mixinTypes,
@@ -10806,10 +10291,9 @@
     LinkedNodeBuilder annotatedNode_comment,
     List<LinkedNodeBuilder> annotatedNode_metadata,
     LinkedNodeBuilder classDeclaration_extendsClause,
-    int classDeclaration_abstractKeyword,
     LinkedNodeBuilder classDeclaration_withClause,
     LinkedNodeBuilder classDeclaration_nativeClause,
-    int classDeclaration_classKeyword,
+    int nameOffset,
     int classOrMixinDeclaration_rightBracket,
     int classOrMixinDeclaration_leftBracket,
     bool classDeclaration_isDartObject,
@@ -10818,16 +10302,14 @@
     LinkedNodeBuilder classOrMixinDeclaration_typeParameters,
     int codeLength,
     int codeOffset,
-    LinkedNodeBuilder namedCompilationUnitMember_name,
     bool simplyBoundable_isSimplyBounded,
   })  : _kind = idl.LinkedNodeKind.classDeclaration,
         _variantField_11 = annotatedNode_comment,
         _variantField_4 = annotatedNode_metadata,
         _variantField_6 = classDeclaration_extendsClause,
-        _variantField_15 = classDeclaration_abstractKeyword,
         _variantField_7 = classDeclaration_withClause,
         _variantField_8 = classDeclaration_nativeClause,
-        _variantField_16 = classDeclaration_classKeyword,
+        _variantField_16 = nameOffset,
         _variantField_18 = classOrMixinDeclaration_rightBracket,
         _variantField_19 = classOrMixinDeclaration_leftBracket,
         _variantField_27 = classDeclaration_isDartObject,
@@ -10836,38 +10318,33 @@
         _variantField_13 = classOrMixinDeclaration_typeParameters,
         _variantField_34 = codeLength,
         _variantField_33 = codeOffset,
-        _variantField_14 = namedCompilationUnitMember_name,
         _variantField_31 = simplyBoundable_isSimplyBounded;
 
   LinkedNodeBuilder.classTypeAlias({
     LinkedNodeBuilder annotatedNode_comment,
     List<LinkedNodeBuilder> annotatedNode_metadata,
     LinkedNodeBuilder classTypeAlias_typeParameters,
-    int classTypeAlias_abstractKeyword,
     LinkedNodeBuilder classTypeAlias_superclass,
     LinkedNodeBuilder classTypeAlias_withClause,
-    int classTypeAlias_equals,
+    int nameOffset,
     int typeAlias_typedefKeyword,
     int typeAlias_semicolon,
     LinkedNodeBuilder classTypeAlias_implementsClause,
     int codeLength,
     int codeOffset,
-    LinkedNodeBuilder namedCompilationUnitMember_name,
     bool simplyBoundable_isSimplyBounded,
   })  : _kind = idl.LinkedNodeKind.classTypeAlias,
         _variantField_11 = annotatedNode_comment,
         _variantField_4 = annotatedNode_metadata,
         _variantField_6 = classTypeAlias_typeParameters,
-        _variantField_15 = classTypeAlias_abstractKeyword,
         _variantField_7 = classTypeAlias_superclass,
         _variantField_8 = classTypeAlias_withClause,
-        _variantField_16 = classTypeAlias_equals,
+        _variantField_16 = nameOffset,
         _variantField_18 = typeAlias_typedefKeyword,
         _variantField_19 = typeAlias_semicolon,
         _variantField_9 = classTypeAlias_implementsClause,
         _variantField_34 = codeLength,
         _variantField_33 = codeOffset,
-        _variantField_14 = namedCompilationUnitMember_name,
         _variantField_31 = simplyBoundable_isSimplyBounded;
 
   LinkedNodeBuilder.declaredIdentifier({
@@ -10886,25 +10363,21 @@
   LinkedNodeBuilder.enumConstantDeclaration({
     LinkedNodeBuilder annotatedNode_comment,
     List<LinkedNodeBuilder> annotatedNode_metadata,
-    LinkedNodeBuilder enumConstantDeclaration_name,
+    int nameOffset,
   })  : _kind = idl.LinkedNodeKind.enumConstantDeclaration,
         _variantField_11 = annotatedNode_comment,
         _variantField_4 = annotatedNode_metadata,
-        _variantField_6 = enumConstantDeclaration_name;
+        _variantField_16 = nameOffset;
 
   LinkedNodeBuilder.fieldDeclaration({
     LinkedNodeBuilder annotatedNode_comment,
     List<LinkedNodeBuilder> annotatedNode_metadata,
     LinkedNodeBuilder fieldDeclaration_fields,
-    int fieldDeclaration_covariantKeyword,
-    int fieldDeclaration_staticKeyword,
     int fieldDeclaration_semicolon,
   })  : _kind = idl.LinkedNodeKind.fieldDeclaration,
         _variantField_11 = annotatedNode_comment,
         _variantField_4 = annotatedNode_metadata,
         _variantField_6 = fieldDeclaration_fields,
-        _variantField_15 = fieldDeclaration_covariantKeyword,
-        _variantField_17 = fieldDeclaration_staticKeyword,
         _variantField_16 = fieldDeclaration_semicolon;
 
   LinkedNodeBuilder.genericTypeAlias({
@@ -10912,26 +10385,24 @@
     List<LinkedNodeBuilder> annotatedNode_metadata,
     LinkedNodeBuilder genericTypeAlias_typeParameters,
     LinkedNodeBuilder genericTypeAlias_functionType,
-    int genericTypeAlias_equals,
+    int nameOffset,
     int typeAlias_typedefKeyword,
     int typeAlias_semicolon,
     bool typeAlias_hasSelfReference,
     int codeLength,
     int codeOffset,
-    LinkedNodeBuilder namedCompilationUnitMember_name,
     bool simplyBoundable_isSimplyBounded,
   })  : _kind = idl.LinkedNodeKind.genericTypeAlias,
         _variantField_11 = annotatedNode_comment,
         _variantField_4 = annotatedNode_metadata,
         _variantField_6 = genericTypeAlias_typeParameters,
         _variantField_7 = genericTypeAlias_functionType,
-        _variantField_16 = genericTypeAlias_equals,
+        _variantField_16 = nameOffset,
         _variantField_18 = typeAlias_typedefKeyword,
         _variantField_19 = typeAlias_semicolon,
         _variantField_27 = typeAlias_hasSelfReference,
         _variantField_34 = codeLength,
         _variantField_33 = codeOffset,
-        _variantField_14 = namedCompilationUnitMember_name,
         _variantField_31 = simplyBoundable_isSimplyBounded;
 
   LinkedNodeBuilder.libraryDirective({
@@ -10952,6 +10423,7 @@
     List<LinkedNodeBuilder> annotatedNode_metadata,
     LinkedNodeBuilder mixinDeclaration_onClause,
     int mixinDeclaration_mixinKeyword,
+    int nameOffset,
     int classOrMixinDeclaration_rightBracket,
     int classOrMixinDeclaration_leftBracket,
     LinkedNodeBuilder classOrMixinDeclaration_implementsClause,
@@ -10959,7 +10431,6 @@
     LinkedNodeBuilder classOrMixinDeclaration_typeParameters,
     int codeLength,
     int codeOffset,
-    LinkedNodeBuilder namedCompilationUnitMember_name,
     List<String> mixinDeclaration_superInvokedNames,
     bool simplyBoundable_isSimplyBounded,
   })  : _kind = idl.LinkedNodeKind.mixinDeclaration,
@@ -10967,6 +10438,7 @@
         _variantField_4 = annotatedNode_metadata,
         _variantField_6 = mixinDeclaration_onClause,
         _variantField_15 = mixinDeclaration_mixinKeyword,
+        _variantField_16 = nameOffset,
         _variantField_18 = classOrMixinDeclaration_rightBracket,
         _variantField_19 = classOrMixinDeclaration_leftBracket,
         _variantField_12 = classOrMixinDeclaration_implementsClause,
@@ -10974,13 +10446,13 @@
         _variantField_13 = classOrMixinDeclaration_typeParameters,
         _variantField_34 = codeLength,
         _variantField_33 = codeOffset,
-        _variantField_14 = namedCompilationUnitMember_name,
         _variantField_36 = mixinDeclaration_superInvokedNames,
         _variantField_31 = simplyBoundable_isSimplyBounded;
 
   LinkedNodeBuilder.partDirective({
     LinkedNodeBuilder annotatedNode_comment,
     List<LinkedNodeBuilder> annotatedNode_metadata,
+    int nameOffset,
     int directive_keyword,
     int uriBasedDirective_uriElement,
     int directive_semicolon,
@@ -10989,6 +10461,7 @@
   })  : _kind = idl.LinkedNodeKind.partDirective,
         _variantField_11 = annotatedNode_comment,
         _variantField_4 = annotatedNode_metadata,
+        _variantField_16 = nameOffset,
         _variantField_18 = directive_keyword,
         _variantField_19 = uriBasedDirective_uriElement,
         _variantField_33 = directive_semicolon,
@@ -11028,8 +10501,8 @@
     List<LinkedNodeBuilder> annotatedNode_metadata,
     LinkedNodeBuilder typeParameter_bound,
     int typeParameter_extendsKeyword,
-    LinkedNodeBuilder typeParameter_name,
     LinkedNodeTypeBuilder typeParameter_defaultType,
+    int nameOffset,
     int codeLength,
     int codeOffset,
   })  : _kind = idl.LinkedNodeKind.typeParameter,
@@ -11037,8 +10510,8 @@
         _variantField_4 = annotatedNode_metadata,
         _variantField_6 = typeParameter_bound,
         _variantField_15 = typeParameter_extendsKeyword,
-        _variantField_7 = typeParameter_name,
         _variantField_23 = typeParameter_defaultType,
+        _variantField_16 = nameOffset,
         _variantField_34 = codeLength,
         _variantField_33 = codeOffset;
 
@@ -11454,13 +10927,11 @@
 
   LinkedNodeBuilder.instanceCreationExpression({
     LinkedNodeBuilder instanceCreationExpression_arguments,
-    int instanceCreationExpression_keyword,
     LinkedNodeBuilder instanceCreationExpression_constructorName,
     LinkedNodeBuilder instanceCreationExpression_typeArguments,
     LinkedNodeTypeBuilder expression_type,
   })  : _kind = idl.LinkedNodeKind.instanceCreationExpression,
         _variantField_6 = instanceCreationExpression_arguments,
-        _variantField_15 = instanceCreationExpression_keyword,
         _variantField_7 = instanceCreationExpression_constructorName,
         _variantField_8 = instanceCreationExpression_typeArguments,
         _variantField_25 = expression_type;
@@ -11479,13 +10950,11 @@
     int isExpression_isOperator,
     LinkedNodeBuilder isExpression_type,
     int isExpression_notOperator,
-    LinkedNodeTypeBuilder expression_type,
   })  : _kind = idl.LinkedNodeKind.isExpression,
         _variantField_6 = isExpression_expression,
         _variantField_15 = isExpression_isOperator,
         _variantField_7 = isExpression_type,
-        _variantField_16 = isExpression_notOperator,
-        _variantField_25 = expression_type;
+        _variantField_16 = isExpression_notOperator;
 
   LinkedNodeBuilder.label({
     LinkedNodeBuilder label_label,
@@ -11506,11 +10975,9 @@
   LinkedNodeBuilder.namedExpression({
     LinkedNodeBuilder namedExpression_expression,
     LinkedNodeBuilder namedExpression_name,
-    LinkedNodeTypeBuilder expression_type,
   })  : _kind = idl.LinkedNodeKind.namedExpression,
         _variantField_6 = namedExpression_expression,
-        _variantField_7 = namedExpression_name,
-        _variantField_25 = expression_type;
+        _variantField_7 = namedExpression_name;
 
   LinkedNodeBuilder.nativeClause({
     LinkedNodeBuilder nativeClause_name,
@@ -11567,13 +11034,13 @@
     LinkedNodeBuilder prefixExpression_operand,
     int prefixExpression_element,
     LinkedNodeTypeBuilder prefixExpression_elementType,
-    int prefixExpression_operator,
+    idl.UnlinkedTokenType prefixExpression_operator,
     LinkedNodeTypeBuilder expression_type,
   })  : _kind = idl.LinkedNodeKind.prefixExpression,
         _variantField_6 = prefixExpression_operand,
         _variantField_15 = prefixExpression_element,
         _variantField_23 = prefixExpression_elementType,
-        _variantField_16 = prefixExpression_operator,
+        _variantField_28 = prefixExpression_operator,
         _variantField_25 = expression_type;
 
   LinkedNodeBuilder.propertyAccess({
@@ -11613,10 +11080,10 @@
 
   LinkedNodeBuilder.spreadElement({
     LinkedNodeBuilder spreadElement_expression,
-    int spreadElement_spreadOperator,
+    idl.UnlinkedTokenType spreadElement_spreadOperator2,
   })  : _kind = idl.LinkedNodeKind.spreadElement,
         _variantField_6 = spreadElement_expression,
-        _variantField_15 = spreadElement_spreadOperator;
+        _variantField_40 = spreadElement_spreadOperator2;
 
   LinkedNodeBuilder.superConstructorInvocation({
     LinkedNodeBuilder superConstructorInvocation_arguments,
@@ -11684,24 +11151,6 @@
         _variantField_17 = yieldStatement_semicolon,
         _variantField_16 = yieldStatement_star;
 
-  LinkedNodeBuilder.booleanLiteral({
-    int booleanLiteral_literal,
-    bool booleanLiteral_value,
-    LinkedNodeTypeBuilder expression_type,
-  })  : _kind = idl.LinkedNodeKind.booleanLiteral,
-        _variantField_15 = booleanLiteral_literal,
-        _variantField_27 = booleanLiteral_value,
-        _variantField_25 = expression_type;
-
-  LinkedNodeBuilder.doubleLiteral({
-    int doubleLiteral_literal,
-    double doubleLiteral_value,
-    LinkedNodeTypeBuilder expression_type,
-  })  : _kind = idl.LinkedNodeKind.doubleLiteral,
-        _variantField_15 = doubleLiteral_literal,
-        _variantField_21 = doubleLiteral_value,
-        _variantField_25 = expression_type;
-
   LinkedNodeBuilder.emptyFunctionBody({
     int emptyFunctionBody_semicolon,
   })  : _kind = idl.LinkedNodeKind.emptyFunctionBody,
@@ -11712,15 +11161,6 @@
   })  : _kind = idl.LinkedNodeKind.emptyStatement,
         _variantField_15 = emptyStatement_semicolon;
 
-  LinkedNodeBuilder.integerLiteral({
-    int integerLiteral_literal,
-    int integerLiteral_value,
-    LinkedNodeTypeBuilder expression_type,
-  })  : _kind = idl.LinkedNodeKind.integerLiteral,
-        _variantField_15 = integerLiteral_literal,
-        _variantField_16 = integerLiteral_value,
-        _variantField_25 = expression_type;
-
   LinkedNodeBuilder.interpolationString({
     int interpolationString_token,
     String interpolationString_value,
@@ -11750,25 +11190,14 @@
   LinkedNodeBuilder.simpleIdentifier({
     int simpleIdentifier_element,
     LinkedNodeTypeBuilder simpleIdentifier_elementType,
-    int simpleIdentifier_token,
     bool simpleIdentifier_isDeclaration,
     LinkedNodeTypeBuilder expression_type,
   })  : _kind = idl.LinkedNodeKind.simpleIdentifier,
         _variantField_15 = simpleIdentifier_element,
         _variantField_23 = simpleIdentifier_elementType,
-        _variantField_16 = simpleIdentifier_token,
         _variantField_27 = simpleIdentifier_isDeclaration,
         _variantField_25 = expression_type;
 
-  LinkedNodeBuilder.simpleStringLiteral({
-    int simpleStringLiteral_token,
-    LinkedNodeTypeBuilder expression_type,
-    String simpleStringLiteral_value,
-  })  : _kind = idl.LinkedNodeKind.simpleStringLiteral,
-        _variantField_15 = simpleStringLiteral_token,
-        _variantField_25 = expression_type,
-        _variantField_20 = simpleStringLiteral_value;
-
   LinkedNodeBuilder.superExpression({
     int superExpression_superKeyword,
     LinkedNodeTypeBuilder expression_type,
@@ -11778,11 +11207,11 @@
 
   LinkedNodeBuilder.symbolLiteral({
     int symbolLiteral_poundSign,
-    List<int> symbolLiteral_components,
+    List<String> names,
     LinkedNodeTypeBuilder expression_type,
   })  : _kind = idl.LinkedNodeKind.symbolLiteral,
         _variantField_15 = symbolLiteral_poundSign,
-        _variantField_28 = symbolLiteral_components,
+        _variantField_36 = names,
         _variantField_25 = expression_type;
 
   LinkedNodeBuilder.thisExpression({
@@ -11792,6 +11221,40 @@
         _variantField_15 = thisExpression_thisKeyword,
         _variantField_25 = expression_type;
 
+  LinkedNodeBuilder.integerLiteral({
+    int integerLiteral_value,
+  })  : _kind = idl.LinkedNodeKind.integerLiteral,
+        _variantField_16 = integerLiteral_value;
+
+  LinkedNodeBuilder.hideCombinator({
+    int combinator_keyword,
+    List<String> names,
+  })  : _kind = idl.LinkedNodeKind.hideCombinator,
+        _variantField_19 = combinator_keyword,
+        _variantField_36 = names;
+
+  LinkedNodeBuilder.showCombinator({
+    int combinator_keyword,
+    List<String> names,
+  })  : _kind = idl.LinkedNodeKind.showCombinator,
+        _variantField_19 = combinator_keyword,
+        _variantField_36 = names;
+
+  LinkedNodeBuilder.booleanLiteral({
+    bool booleanLiteral_value,
+  })  : _kind = idl.LinkedNodeKind.booleanLiteral,
+        _variantField_27 = booleanLiteral_value;
+
+  LinkedNodeBuilder.doubleLiteral({
+    double doubleLiteral_value,
+  })  : _kind = idl.LinkedNodeKind.doubleLiteral,
+        _variantField_21 = doubleLiteral_value;
+
+  LinkedNodeBuilder.simpleStringLiteral({
+    String simpleStringLiteral_value,
+  })  : _kind = idl.LinkedNodeKind.simpleStringLiteral,
+        _variantField_20 = simpleStringLiteral_value;
+
   /// Flush [informative] data recursively.
   void flushInformative() {
     _variantField_24?.flushInformative();
@@ -11885,14 +11348,8 @@
     signature.addInt(
         this._variantField_26 == null ? 0 : this._variantField_26.index);
     signature.addBool(this._variantField_27 == true);
-    if (this._variantField_28 == null) {
-      signature.addInt(0);
-    } else {
-      signature.addInt(this._variantField_28.length);
-      for (var x in this._variantField_28) {
-        signature.addInt(x);
-      }
-    }
+    signature.addInt(
+        this._variantField_28 == null ? 0 : this._variantField_28.index);
     signature.addInt(
         this._variantField_29 == null ? 0 : this._variantField_29.index);
     signature.addString(this._variantField_30 ?? '');
@@ -11912,6 +11369,11 @@
       }
     }
     signature.addBool(this._variantField_37 == true);
+    signature.addString(this._name ?? '');
+    signature.addInt(this._flags ?? 0);
+    signature.addInt(
+        this._variantField_40 == null ? 0 : this._variantField_40.index);
+    signature.addString(this._variantField_41 ?? '');
   }
 
   fb.Offset finish(fb.Builder fbBuilder) {
@@ -11927,13 +11389,14 @@
     fb.Offset offset_variantField_12;
     fb.Offset offset_variantField_5;
     fb.Offset offset_variantField_13;
-    fb.Offset offset_variantField_28;
+    fb.Offset offset_variantField_36;
     fb.Offset offset_variantField_3;
     fb.Offset offset_variantField_10;
     fb.Offset offset_variantField_25;
+    fb.Offset offset_variantField_41;
     fb.Offset offset_variantField_30;
     fb.Offset offset_variantField_14;
-    fb.Offset offset_variantField_36;
+    fb.Offset offset_name;
     fb.Offset offset_variantField_20;
     fb.Offset offset_variantField_35;
     fb.Offset offset_variantField_22;
@@ -11977,8 +11440,9 @@
     if (_variantField_13 != null) {
       offset_variantField_13 = _variantField_13.finish(fbBuilder);
     }
-    if (!(_variantField_28 == null || _variantField_28.isEmpty)) {
-      offset_variantField_28 = fbBuilder.writeListUint32(_variantField_28);
+    if (!(_variantField_36 == null || _variantField_36.isEmpty)) {
+      offset_variantField_36 = fbBuilder.writeList(
+          _variantField_36.map((b) => fbBuilder.writeString(b)).toList());
     }
     if (!(_variantField_3 == null || _variantField_3.isEmpty)) {
       offset_variantField_3 = fbBuilder
@@ -11990,15 +11454,17 @@
     if (_variantField_25 != null) {
       offset_variantField_25 = _variantField_25.finish(fbBuilder);
     }
+    if (_variantField_41 != null) {
+      offset_variantField_41 = fbBuilder.writeString(_variantField_41);
+    }
     if (_variantField_30 != null) {
       offset_variantField_30 = fbBuilder.writeString(_variantField_30);
     }
     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 (_name != null) {
+      offset_name = fbBuilder.writeString(_name);
     }
     if (_variantField_20 != null) {
       offset_variantField_20 = fbBuilder.writeString(_variantField_20);
@@ -12052,6 +11518,10 @@
     if (_variantField_19 != null && _variantField_19 != 0) {
       fbBuilder.addUint32(19, _variantField_19);
     }
+    if (_variantField_28 != null &&
+        _variantField_28 != idl.UnlinkedTokenType.NOTHING) {
+      fbBuilder.addUint8(28, _variantField_28.index);
+    }
     if (_variantField_27 == true) {
       fbBuilder.addBool(27, true);
     }
@@ -12073,8 +11543,8 @@
     if (_variantField_33 != null && _variantField_33 != 0) {
       fbBuilder.addUint32(33, _variantField_33);
     }
-    if (offset_variantField_28 != null) {
-      fbBuilder.addOffset(28, offset_variantField_28);
+    if (offset_variantField_36 != null) {
+      fbBuilder.addOffset(36, offset_variantField_36);
     }
     if (_variantField_29 != null &&
         _variantField_29 != idl.LinkedNodeCommentType.block) {
@@ -12100,6 +11570,12 @@
     if (offset_variantField_25 != null) {
       fbBuilder.addOffset(25, offset_variantField_25);
     }
+    if (_flags != null && _flags != 0) {
+      fbBuilder.addUint32(39, _flags);
+    }
+    if (offset_variantField_41 != null) {
+      fbBuilder.addOffset(41, offset_variantField_41);
+    }
     if (offset_variantField_30 != null) {
       fbBuilder.addOffset(30, offset_variantField_30);
     }
@@ -12112,8 +11588,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_name != null) {
+      fbBuilder.addOffset(38, offset_name);
     }
     if (offset_variantField_20 != null) {
       fbBuilder.addOffset(20, offset_variantField_20);
@@ -12121,6 +11597,10 @@
     if (_variantField_31 == true) {
       fbBuilder.addBool(31, true);
     }
+    if (_variantField_40 != null &&
+        _variantField_40 != idl.UnlinkedTokenType.NOTHING) {
+      fbBuilder.addUint8(40, _variantField_40.index);
+    }
     if (offset_variantField_35 != null) {
       fbBuilder.addOffset(35, offset_variantField_35);
     }
@@ -12163,6 +11643,7 @@
   int _variantField_16;
   int _variantField_18;
   int _variantField_19;
+  idl.UnlinkedTokenType _variantField_28;
   bool _variantField_27;
   idl.LinkedNode _variantField_9;
   idl.LinkedNode _variantField_12;
@@ -12170,7 +11651,7 @@
   idl.LinkedNode _variantField_13;
   int _variantField_34;
   int _variantField_33;
-  List<int> _variantField_28;
+  List<String> _variantField_36;
   idl.LinkedNodeCommentType _variantField_29;
   List<idl.LinkedNode> _variantField_3;
   idl.LinkedNode _variantField_10;
@@ -12178,13 +11659,16 @@
   double _variantField_21;
   bool _variantField_37;
   idl.LinkedNodeType _variantField_25;
+  int _flags;
+  String _variantField_41;
   String _variantField_30;
   idl.LinkedNode _variantField_14;
   bool _isSynthetic;
   idl.LinkedNodeKind _kind;
-  List<String> _variantField_36;
+  String _name;
   String _variantField_20;
   bool _variantField_31;
+  idl.UnlinkedTokenType _variantField_40;
   idl.TopLevelInferenceError _variantField_35;
   String _variantField_22;
   idl.LinkedNodeVariablesDeclaration _variantField_32;
@@ -12320,15 +11804,6 @@
   }
 
   @override
-  List<idl.LinkedNode> get hideCombinator_hiddenNames {
-    assert(kind == idl.LinkedNodeKind.hideCombinator);
-    _variantField_2 ??=
-        const fb.ListReader<idl.LinkedNode>(const _LinkedNodeReader())
-            .vTableGet(_bc, _bcOffset, 2, const <idl.LinkedNode>[]);
-    return _variantField_2;
-  }
-
-  @override
   List<idl.LinkedNode> get implementsClause_interfaces {
     assert(kind == idl.LinkedNodeKind.implementsClause);
     _variantField_2 ??=
@@ -12393,15 +11868,6 @@
   }
 
   @override
-  List<idl.LinkedNode> get showCombinator_shownNames {
-    assert(kind == idl.LinkedNodeKind.showCombinator);
-    _variantField_2 ??=
-        const fb.ListReader<idl.LinkedNode>(const _LinkedNodeReader())
-            .vTableGet(_bc, _bcOffset, 2, const <idl.LinkedNode>[]);
-    return _variantField_2;
-  }
-
-  @override
   List<idl.LinkedNode> get stringInterpolation_elements {
     assert(kind == idl.LinkedNodeKind.stringInterpolation);
     _variantField_2 ??=
@@ -12735,14 +12201,6 @@
   }
 
   @override
-  idl.LinkedNode get enumConstantDeclaration_name {
-    assert(kind == idl.LinkedNodeKind.enumConstantDeclaration);
-    _variantField_6 ??=
-        const _LinkedNodeReader().vTableGet(_bc, _bcOffset, 6, null);
-    return _variantField_6;
-  }
-
-  @override
   idl.LinkedNode get expressionFunctionBody_expression {
     assert(kind == idl.LinkedNodeKind.expressionFunctionBody);
     _variantField_6 ??=
@@ -12883,14 +12341,6 @@
   }
 
   @override
-  idl.LinkedNode get importDirective_prefix {
-    assert(kind == idl.LinkedNodeKind.importDirective);
-    _variantField_6 ??=
-        const _LinkedNodeReader().vTableGet(_bc, _bcOffset, 6, null);
-    return _variantField_6;
-  }
-
-  @override
   idl.LinkedNode get indexExpression_index {
     assert(kind == idl.LinkedNodeKind.indexExpression);
     _variantField_6 ??=
@@ -13259,14 +12709,6 @@
   }
 
   @override
-  int get booleanLiteral_literal {
-    assert(kind == idl.LinkedNodeKind.booleanLiteral);
-    _variantField_15 ??=
-        const fb.Uint32Reader().vTableGet(_bc, _bcOffset, 15, 0);
-    return _variantField_15;
-  }
-
-  @override
   int get breakStatement_breakKeyword {
     assert(kind == idl.LinkedNodeKind.breakStatement);
     _variantField_15 ??=
@@ -13283,22 +12725,6 @@
   }
 
   @override
-  int get classDeclaration_abstractKeyword {
-    assert(kind == idl.LinkedNodeKind.classDeclaration);
-    _variantField_15 ??=
-        const fb.Uint32Reader().vTableGet(_bc, _bcOffset, 15, 0);
-    return _variantField_15;
-  }
-
-  @override
-  int get classTypeAlias_abstractKeyword {
-    assert(kind == idl.LinkedNodeKind.classTypeAlias);
-    _variantField_15 ??=
-        const fb.Uint32Reader().vTableGet(_bc, _bcOffset, 15, 0);
-    return _variantField_15;
-  }
-
-  @override
   int get commentReference_newKeyword {
     assert(kind == idl.LinkedNodeKind.commentReference);
     _variantField_15 ??=
@@ -13331,14 +12757,6 @@
   }
 
   @override
-  int get constructorDeclaration_constKeyword {
-    assert(kind == idl.LinkedNodeKind.constructorDeclaration);
-    _variantField_15 ??=
-        const fb.Uint32Reader().vTableGet(_bc, _bcOffset, 15, 0);
-    return _variantField_15;
-  }
-
-  @override
   int get constructorFieldInitializer_equals {
     assert(kind == idl.LinkedNodeKind.constructorFieldInitializer);
     _variantField_15 ??=
@@ -13387,14 +12805,6 @@
   }
 
   @override
-  int get doubleLiteral_literal {
-    assert(kind == idl.LinkedNodeKind.doubleLiteral);
-    _variantField_15 ??=
-        const fb.Uint32Reader().vTableGet(_bc, _bcOffset, 15, 0);
-    return _variantField_15;
-  }
-
-  @override
   int get emptyFunctionBody_semicolon {
     assert(kind == idl.LinkedNodeKind.emptyFunctionBody);
     _variantField_15 ??=
@@ -13411,14 +12821,6 @@
   }
 
   @override
-  int get enumDeclaration_enumKeyword {
-    assert(kind == idl.LinkedNodeKind.enumDeclaration);
-    _variantField_15 ??=
-        const fb.Uint32Reader().vTableGet(_bc, _bcOffset, 15, 0);
-    return _variantField_15;
-  }
-
-  @override
   int get expressionFunctionBody_arrow {
     assert(kind == idl.LinkedNodeKind.expressionFunctionBody);
     _variantField_15 ??=
@@ -13443,22 +12845,6 @@
   }
 
   @override
-  int get fieldDeclaration_covariantKeyword {
-    assert(kind == idl.LinkedNodeKind.fieldDeclaration);
-    _variantField_15 ??=
-        const fb.Uint32Reader().vTableGet(_bc, _bcOffset, 15, 0);
-    return _variantField_15;
-  }
-
-  @override
-  int get fieldFormalParameter_keyword {
-    assert(kind == idl.LinkedNodeKind.fieldFormalParameter);
-    _variantField_15 ??=
-        const fb.Uint32Reader().vTableGet(_bc, _bcOffset, 15, 0);
-    return _variantField_15;
-  }
-
-  @override
   int get forEachParts_inKeyword {
     assert(kind == idl.LinkedNodeKind.forEachPartsWithDeclaration ||
         kind == idl.LinkedNodeKind.forEachPartsWithIdentifier);
@@ -13494,14 +12880,6 @@
   }
 
   @override
-  int get functionDeclaration_externalKeyword {
-    assert(kind == idl.LinkedNodeKind.functionDeclaration);
-    _variantField_15 ??=
-        const fb.Uint32Reader().vTableGet(_bc, _bcOffset, 15, 0);
-    return _variantField_15;
-  }
-
-  @override
   int get genericFunctionType_functionKeyword {
     assert(kind == idl.LinkedNodeKind.genericFunctionType);
     _variantField_15 ??=
@@ -13527,7 +12905,7 @@
   }
 
   @override
-  int get importDirective_asKeyword {
+  int get importDirective_prefixOffset {
     assert(kind == idl.LinkedNodeKind.importDirective);
     _variantField_15 ??=
         const fb.Uint32Reader().vTableGet(_bc, _bcOffset, 15, 0);
@@ -13543,22 +12921,6 @@
   }
 
   @override
-  int get instanceCreationExpression_keyword {
-    assert(kind == idl.LinkedNodeKind.instanceCreationExpression);
-    _variantField_15 ??=
-        const fb.Uint32Reader().vTableGet(_bc, _bcOffset, 15, 0);
-    return _variantField_15;
-  }
-
-  @override
-  int get integerLiteral_literal {
-    assert(kind == idl.LinkedNodeKind.integerLiteral);
-    _variantField_15 ??=
-        const fb.Uint32Reader().vTableGet(_bc, _bcOffset, 15, 0);
-    return _variantField_15;
-  }
-
-  @override
   int get interpolationExpression_leftBracket {
     assert(kind == idl.LinkedNodeKind.interpolationExpression);
     _variantField_15 ??=
@@ -13607,14 +12969,6 @@
   }
 
   @override
-  int get methodDeclaration_externalKeyword {
-    assert(kind == idl.LinkedNodeKind.methodDeclaration);
-    _variantField_15 ??=
-        const fb.Uint32Reader().vTableGet(_bc, _bcOffset, 15, 0);
-    return _variantField_15;
-  }
-
-  @override
   int get methodInvocation_operator {
     assert(kind == idl.LinkedNodeKind.methodInvocation);
     _variantField_15 ??=
@@ -13743,14 +13097,6 @@
   }
 
   @override
-  int get simpleFormalParameter_keyword {
-    assert(kind == idl.LinkedNodeKind.simpleFormalParameter);
-    _variantField_15 ??=
-        const fb.Uint32Reader().vTableGet(_bc, _bcOffset, 15, 0);
-    return _variantField_15;
-  }
-
-  @override
   int get simpleIdentifier_element {
     assert(kind == idl.LinkedNodeKind.simpleIdentifier);
     _variantField_15 ??=
@@ -13759,22 +13105,6 @@
   }
 
   @override
-  int get simpleStringLiteral_token {
-    assert(kind == idl.LinkedNodeKind.simpleStringLiteral);
-    _variantField_15 ??=
-        const fb.Uint32Reader().vTableGet(_bc, _bcOffset, 15, 0);
-    return _variantField_15;
-  }
-
-  @override
-  int get spreadElement_spreadOperator {
-    assert(kind == idl.LinkedNodeKind.spreadElement);
-    _variantField_15 ??=
-        const fb.Uint32Reader().vTableGet(_bc, _bcOffset, 15, 0);
-    return _variantField_15;
-  }
-
-  @override
   int get superConstructorInvocation_element {
     assert(kind == idl.LinkedNodeKind.superConstructorInvocation);
     _variantField_15 ??=
@@ -13888,14 +13218,6 @@
   }
 
   @override
-  int get variableDeclarationList_keyword {
-    assert(kind == idl.LinkedNodeKind.variableDeclarationList);
-    _variantField_15 ??=
-        const fb.Uint32Reader().vTableGet(_bc, _bcOffset, 15, 0);
-    return _variantField_15;
-  }
-
-  @override
   int get variableDeclarationStatement_semicolon {
     assert(kind == idl.LinkedNodeKind.variableDeclarationStatement);
     _variantField_15 ??=
@@ -14016,14 +13338,6 @@
   }
 
   @override
-  idl.LinkedNode get constructorDeclaration_name {
-    assert(kind == idl.LinkedNodeKind.constructorDeclaration);
-    _variantField_7 ??=
-        const _LinkedNodeReader().vTableGet(_bc, _bcOffset, 7, null);
-    return _variantField_7;
-  }
-
-  @override
   idl.LinkedNode get constructorFieldInitializer_fieldName {
     assert(kind == idl.LinkedNodeKind.constructorFieldInitializer);
     _variantField_7 ??=
@@ -14296,22 +13610,6 @@
   }
 
   @override
-  idl.LinkedNode get typeParameter_name {
-    assert(kind == idl.LinkedNodeKind.typeParameter);
-    _variantField_7 ??=
-        const _LinkedNodeReader().vTableGet(_bc, _bcOffset, 7, null);
-    return _variantField_7;
-  }
-
-  @override
-  idl.LinkedNode get variableDeclaration_name {
-    assert(kind == idl.LinkedNodeKind.variableDeclaration);
-    _variantField_7 ??=
-        const _LinkedNodeReader().vTableGet(_bc, _bcOffset, 7, null);
-    return _variantField_7;
-  }
-
-  @override
   idl.LinkedNode get whileStatement_condition {
     assert(kind == idl.LinkedNodeKind.whileStatement);
     _variantField_7 ??=
@@ -14360,14 +13658,6 @@
   }
 
   @override
-  int get constructorDeclaration_factoryKeyword {
-    assert(kind == idl.LinkedNodeKind.constructorDeclaration);
-    _variantField_17 ??=
-        const fb.Uint32Reader().vTableGet(_bc, _bcOffset, 17, 0);
-    return _variantField_17;
-  }
-
-  @override
   int get constructorFieldInitializer_thisKeyword {
     assert(kind == idl.LinkedNodeKind.constructorFieldInitializer);
     _variantField_17 ??=
@@ -14384,14 +13674,6 @@
   }
 
   @override
-  int get enumDeclaration_rightBracket {
-    assert(kind == idl.LinkedNodeKind.enumDeclaration);
-    _variantField_17 ??=
-        const fb.Uint32Reader().vTableGet(_bc, _bcOffset, 17, 0);
-    return _variantField_17;
-  }
-
-  @override
   int get expressionFunctionBody_semicolon {
     assert(kind == idl.LinkedNodeKind.expressionFunctionBody);
     _variantField_17 ??=
@@ -14400,14 +13682,6 @@
   }
 
   @override
-  int get fieldDeclaration_staticKeyword {
-    assert(kind == idl.LinkedNodeKind.fieldDeclaration);
-    _variantField_17 ??=
-        const fb.Uint32Reader().vTableGet(_bc, _bcOffset, 17, 0);
-    return _variantField_17;
-  }
-
-  @override
   int get fieldFormalParameter_thisKeyword {
     assert(kind == idl.LinkedNodeKind.fieldFormalParameter);
     _variantField_17 ??=
@@ -14770,14 +14044,6 @@
   }
 
   @override
-  int get binaryExpression_operator {
-    assert(kind == idl.LinkedNodeKind.binaryExpression);
-    _variantField_16 ??=
-        const fb.Uint32Reader().vTableGet(_bc, _bcOffset, 16, 0);
-    return _variantField_16;
-  }
-
-  @override
   int get block_rightBracket {
     assert(kind == idl.LinkedNodeKind.block);
     _variantField_16 ??=
@@ -14810,22 +14076,6 @@
   }
 
   @override
-  int get classDeclaration_classKeyword {
-    assert(kind == idl.LinkedNodeKind.classDeclaration);
-    _variantField_16 ??=
-        const fb.Uint32Reader().vTableGet(_bc, _bcOffset, 16, 0);
-    return _variantField_16;
-  }
-
-  @override
-  int get classTypeAlias_equals {
-    assert(kind == idl.LinkedNodeKind.classTypeAlias);
-    _variantField_16 ??=
-        const fb.Uint32Reader().vTableGet(_bc, _bcOffset, 16, 0);
-    return _variantField_16;
-  }
-
-  @override
   int get compilationUnit_endToken {
     assert(kind == idl.LinkedNodeKind.compilationUnit);
     _variantField_16 ??=
@@ -14850,14 +14100,6 @@
   }
 
   @override
-  int get constructorDeclaration_externalKeyword {
-    assert(kind == idl.LinkedNodeKind.constructorDeclaration);
-    _variantField_16 ??=
-        const fb.Uint32Reader().vTableGet(_bc, _bcOffset, 16, 0);
-    return _variantField_16;
-  }
-
-  @override
   int get constructorFieldInitializer_period {
     assert(kind == idl.LinkedNodeKind.constructorFieldInitializer);
     _variantField_16 ??=
@@ -14890,14 +14132,6 @@
   }
 
   @override
-  int get enumDeclaration_leftBracket {
-    assert(kind == idl.LinkedNodeKind.enumDeclaration);
-    _variantField_16 ??=
-        const fb.Uint32Reader().vTableGet(_bc, _bcOffset, 16, 0);
-    return _variantField_16;
-  }
-
-  @override
   int get expressionFunctionBody_keyword {
     assert(kind == idl.LinkedNodeKind.expressionFunctionBody);
     _variantField_16 ??=
@@ -14914,14 +14148,6 @@
   }
 
   @override
-  int get fieldFormalParameter_period {
-    assert(kind == idl.LinkedNodeKind.fieldFormalParameter);
-    _variantField_16 ??=
-        const fb.Uint32Reader().vTableGet(_bc, _bcOffset, 16, 0);
-    return _variantField_16;
-  }
-
-  @override
   int get formalParameterList_leftParenthesis {
     assert(kind == idl.LinkedNodeKind.formalParameterList);
     _variantField_16 ??=
@@ -14948,14 +14174,6 @@
   }
 
   @override
-  int get functionDeclaration_propertyKeyword {
-    assert(kind == idl.LinkedNodeKind.functionDeclaration);
-    _variantField_16 ??=
-        const fb.Uint32Reader().vTableGet(_bc, _bcOffset, 16, 0);
-    return _variantField_16;
-  }
-
-  @override
   int get genericFunctionType_question {
     assert(kind == idl.LinkedNodeKind.genericFunctionType);
     _variantField_16 ??=
@@ -14964,14 +14182,6 @@
   }
 
   @override
-  int get genericTypeAlias_equals {
-    assert(kind == idl.LinkedNodeKind.genericTypeAlias);
-    _variantField_16 ??=
-        const fb.Uint32Reader().vTableGet(_bc, _bcOffset, 16, 0);
-    return _variantField_16;
-  }
-
-  @override
   int get ifMixin_ifKeyword {
     assert(kind == idl.LinkedNodeKind.ifElement ||
         kind == idl.LinkedNodeKind.ifStatement);
@@ -14981,14 +14191,6 @@
   }
 
   @override
-  int get importDirective_deferredKeyword {
-    assert(kind == idl.LinkedNodeKind.importDirective);
-    _variantField_16 ??=
-        const fb.Uint32Reader().vTableGet(_bc, _bcOffset, 16, 0);
-    return _variantField_16;
-  }
-
-  @override
   int get indexExpression_period {
     assert(kind == idl.LinkedNodeKind.indexExpression);
     _variantField_16 ??=
@@ -15029,8 +14231,25 @@
   }
 
   @override
-  int get methodDeclaration_modifierKeyword {
-    assert(kind == idl.LinkedNodeKind.methodDeclaration);
+  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);
     _variantField_16 ??=
         const fb.Uint32Reader().vTableGet(_bc, _bcOffset, 16, 0);
     return _variantField_16;
@@ -15069,14 +14288,6 @@
   }
 
   @override
-  int get prefixExpression_operator {
-    assert(kind == idl.LinkedNodeKind.prefixExpression);
-    _variantField_16 ??=
-        const fb.Uint32Reader().vTableGet(_bc, _bcOffset, 16, 0);
-    return _variantField_16;
-  }
-
-  @override
   int get redirectingConstructorInvocation_period {
     assert(kind == idl.LinkedNodeKind.redirectingConstructorInvocation);
     _variantField_16 ??=
@@ -15101,14 +14312,6 @@
   }
 
   @override
-  int get simpleIdentifier_token {
-    assert(kind == idl.LinkedNodeKind.simpleIdentifier);
-    _variantField_16 ??=
-        const fb.Uint32Reader().vTableGet(_bc, _bcOffset, 16, 0);
-    return _variantField_16;
-  }
-
-  @override
   int get superConstructorInvocation_period {
     assert(kind == idl.LinkedNodeKind.superConstructorInvocation);
     _variantField_16 ??=
@@ -15158,14 +14361,6 @@
   }
 
   @override
-  int get variableDeclarationList_lateKeyword {
-    assert(kind == idl.LinkedNodeKind.variableDeclarationList);
-    _variantField_16 ??=
-        const fb.Uint32Reader().vTableGet(_bc, _bcOffset, 16, 0);
-    return _variantField_16;
-  }
-
-  @override
   int get whileStatement_rightParenthesis {
     assert(kind == idl.LinkedNodeKind.whileStatement);
     _variantField_16 ??=
@@ -15276,14 +14471,6 @@
   }
 
   @override
-  int get methodDeclaration_propertyKeyword {
-    assert(kind == idl.LinkedNodeKind.methodDeclaration);
-    _variantField_18 ??=
-        const fb.Uint32Reader().vTableGet(_bc, _bcOffset, 18, 0);
-    return _variantField_18;
-  }
-
-  @override
   int get normalFormalParameter_requiredKeyword {
     assert(kind == idl.LinkedNodeKind.fieldFormalParameter ||
         kind == idl.LinkedNodeKind.functionTypedFormalParameter ||
@@ -15379,16 +14566,6 @@
   }
 
   @override
-  int get normalFormalParameter_covariantKeyword {
-    assert(kind == idl.LinkedNodeKind.fieldFormalParameter ||
-        kind == idl.LinkedNodeKind.functionTypedFormalParameter ||
-        kind == idl.LinkedNodeKind.simpleFormalParameter);
-    _variantField_19 ??=
-        const fb.Uint32Reader().vTableGet(_bc, _bcOffset, 19, 0);
-    return _variantField_19;
-  }
-
-  @override
   int get switchStatement_rightBracket {
     assert(kind == idl.LinkedNodeKind.switchStatement);
     _variantField_19 ??=
@@ -15407,15 +14584,6 @@
   }
 
   @override
-  int get typedLiteral_constKeyword {
-    assert(kind == idl.LinkedNodeKind.listLiteral ||
-        kind == idl.LinkedNodeKind.setOrMapLiteral);
-    _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 ||
@@ -15426,6 +14594,22 @@
   }
 
   @override
+  idl.UnlinkedTokenType get binaryExpression_operator {
+    assert(kind == idl.LinkedNodeKind.binaryExpression);
+    _variantField_28 ??= const _UnlinkedTokenTypeReader()
+        .vTableGet(_bc, _bcOffset, 28, idl.UnlinkedTokenType.NOTHING);
+    return _variantField_28;
+  }
+
+  @override
+  idl.UnlinkedTokenType get prefixExpression_operator {
+    assert(kind == idl.LinkedNodeKind.prefixExpression);
+    _variantField_28 ??= const _UnlinkedTokenTypeReader()
+        .vTableGet(_bc, _bcOffset, 28, idl.UnlinkedTokenType.NOTHING);
+    return _variantField_28;
+  }
+
+  @override
   bool get booleanLiteral_value {
     assert(kind == idl.LinkedNodeKind.booleanLiteral);
     _variantField_27 ??=
@@ -15546,16 +14730,6 @@
   }
 
   @override
-  idl.LinkedNode get normalFormalParameter_identifier {
-    assert(kind == idl.LinkedNodeKind.fieldFormalParameter ||
-        kind == idl.LinkedNodeKind.functionTypedFormalParameter ||
-        kind == idl.LinkedNodeKind.simpleFormalParameter);
-    _variantField_12 ??=
-        const _LinkedNodeReader().vTableGet(_bc, _bcOffset, 12, null);
-    return _variantField_12;
-  }
-
-  @override
   List<idl.LinkedNode> get classOrMixinDeclaration_members {
     assert(kind == idl.LinkedNodeKind.classDeclaration ||
         kind == idl.LinkedNodeKind.mixinDeclaration);
@@ -15643,19 +14817,29 @@
   }
 
   @override
-  List<int> get comment_tokens {
+  List<String> get comment_tokens {
     assert(kind == idl.LinkedNodeKind.comment);
-    _variantField_28 ??= const fb.Uint32ListReader()
-        .vTableGet(_bc, _bcOffset, 28, const <int>[]);
-    return _variantField_28;
+    _variantField_36 ??= const fb.ListReader<String>(const fb.StringReader())
+        .vTableGet(_bc, _bcOffset, 36, const <String>[]);
+    return _variantField_36;
   }
 
   @override
-  List<int> get symbolLiteral_components {
-    assert(kind == idl.LinkedNodeKind.symbolLiteral);
-    _variantField_28 ??= const fb.Uint32ListReader()
-        .vTableGet(_bc, _bcOffset, 28, const <int>[]);
-    return _variantField_28;
+  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;
+  }
+
+  @override
+  List<String> get names {
+    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;
   }
 
   @override
@@ -15704,14 +14888,6 @@
   }
 
   @override
-  idl.LinkedNode get methodDeclaration_name {
-    assert(kind == idl.LinkedNodeKind.methodDeclaration);
-    _variantField_10 ??=
-        const _LinkedNodeReader().vTableGet(_bc, _bcOffset, 10, null);
-    return _variantField_10;
-  }
-
-  @override
   idl.LinkedNodeFormalParameterKind get defaultFormalParameter_kind {
     assert(kind == idl.LinkedNodeKind.defaultFormalParameter);
     _variantField_26 ??= const _LinkedNodeFormalParameterKindReader().vTableGet(
@@ -15742,23 +14918,17 @@
 
   @override
   idl.LinkedNodeType get expression_type {
-    assert(kind == idl.LinkedNodeKind.adjacentStrings ||
-        kind == idl.LinkedNodeKind.assignmentExpression ||
+    assert(kind == idl.LinkedNodeKind.assignmentExpression ||
         kind == idl.LinkedNodeKind.asExpression ||
         kind == idl.LinkedNodeKind.awaitExpression ||
         kind == idl.LinkedNodeKind.binaryExpression ||
-        kind == idl.LinkedNodeKind.booleanLiteral ||
         kind == idl.LinkedNodeKind.cascadeExpression ||
         kind == idl.LinkedNodeKind.conditionalExpression ||
-        kind == idl.LinkedNodeKind.doubleLiteral ||
         kind == idl.LinkedNodeKind.functionExpressionInvocation ||
         kind == idl.LinkedNodeKind.indexExpression ||
         kind == idl.LinkedNodeKind.instanceCreationExpression ||
-        kind == idl.LinkedNodeKind.integerLiteral ||
-        kind == idl.LinkedNodeKind.isExpression ||
         kind == idl.LinkedNodeKind.listLiteral ||
         kind == idl.LinkedNodeKind.methodInvocation ||
-        kind == idl.LinkedNodeKind.namedExpression ||
         kind == idl.LinkedNodeKind.nullLiteral ||
         kind == idl.LinkedNodeKind.parenthesizedExpression ||
         kind == idl.LinkedNodeKind.prefixExpression ||
@@ -15768,8 +14938,6 @@
         kind == idl.LinkedNodeKind.rethrowExpression ||
         kind == idl.LinkedNodeKind.setOrMapLiteral ||
         kind == idl.LinkedNodeKind.simpleIdentifier ||
-        kind == idl.LinkedNodeKind.simpleStringLiteral ||
-        kind == idl.LinkedNodeKind.stringInterpolation ||
         kind == idl.LinkedNodeKind.superExpression ||
         kind == idl.LinkedNodeKind.symbolLiteral ||
         kind == idl.LinkedNodeKind.thisExpression ||
@@ -15788,6 +14956,20 @@
   }
 
   @override
+  int get flags {
+    _flags ??= const fb.Uint32Reader().vTableGet(_bc, _bcOffset, 39, 0);
+    return _flags;
+  }
+
+  @override
+  String get importDirective_prefix {
+    assert(kind == idl.LinkedNodeKind.importDirective);
+    _variantField_41 ??=
+        const fb.StringReader().vTableGet(_bc, _bcOffset, 41, '');
+    return _variantField_41;
+  }
+
+  @override
   String get interpolationString_value {
     assert(kind == idl.LinkedNodeKind.interpolationString);
     _variantField_30 ??=
@@ -15805,20 +14987,6 @@
   }
 
   @override
-  idl.LinkedNode get namedCompilationUnitMember_name {
-    assert(kind == idl.LinkedNodeKind.classDeclaration ||
-        kind == idl.LinkedNodeKind.classTypeAlias ||
-        kind == idl.LinkedNodeKind.enumDeclaration ||
-        kind == idl.LinkedNodeKind.functionDeclaration ||
-        kind == idl.LinkedNodeKind.functionTypeAlias ||
-        kind == idl.LinkedNodeKind.genericTypeAlias ||
-        kind == idl.LinkedNodeKind.mixinDeclaration);
-    _variantField_14 ??=
-        const _LinkedNodeReader().vTableGet(_bc, _bcOffset, 14, null);
-    return _variantField_14;
-  }
-
-  @override
   idl.LinkedNode get normalFormalParameter_comment {
     assert(kind == idl.LinkedNodeKind.fieldFormalParameter ||
         kind == idl.LinkedNodeKind.functionTypedFormalParameter ||
@@ -15861,11 +15029,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;
+  String get name {
+    _name ??= const fb.StringReader().vTableGet(_bc, _bcOffset, 38, '');
+    return _name;
   }
 
   @override
@@ -15906,6 +15072,14 @@
   }
 
   @override
+  idl.UnlinkedTokenType get spreadElement_spreadOperator2 {
+    assert(kind == idl.LinkedNodeKind.spreadElement);
+    _variantField_40 ??= const _UnlinkedTokenTypeReader()
+        .vTableGet(_bc, _bcOffset, 40, idl.UnlinkedTokenType.NOTHING);
+    return _variantField_40;
+  }
+
+  @override
   idl.TopLevelInferenceError get topLevelTypeInferenceError {
     assert(kind == idl.LinkedNodeKind.simpleFormalParameter ||
         kind == idl.LinkedNodeKind.variableDeclaration);
@@ -15937,9 +15111,11 @@
   @override
   Map<String, Object> toJson() {
     Map<String, Object> _result = <String, Object>{};
+    if (flags != 0) _result["flags"] = flags;
     if (isSynthetic != false) _result["isSynthetic"] = isSynthetic;
     if (kind != idl.LinkedNodeKind.adjacentStrings)
       _result["kind"] = kind.toString().split('.')[1];
+    if (name != '') _result["name"] = name;
     if (kind == idl.LinkedNodeKind.functionDeclaration) {
       if (actualReturnType != null)
         _result["actualReturnType"] = actualReturnType.toJson();
@@ -15951,20 +15127,12 @@
       if (functionDeclaration_functionExpression != null)
         _result["functionDeclaration_functionExpression"] =
             functionDeclaration_functionExpression.toJson();
-      if (functionDeclaration_externalKeyword != 0)
-        _result["functionDeclaration_externalKeyword"] =
-            functionDeclaration_externalKeyword;
       if (functionDeclaration_returnType != null)
         _result["functionDeclaration_returnType"] =
             functionDeclaration_returnType.toJson();
-      if (functionDeclaration_propertyKeyword != 0)
-        _result["functionDeclaration_propertyKeyword"] =
-            functionDeclaration_propertyKeyword;
+      if (nameOffset != 0) _result["nameOffset"] = nameOffset;
       if (codeLength != 0) _result["codeLength"] = codeLength;
       if (codeOffset != 0) _result["codeOffset"] = codeOffset;
-      if (namedCompilationUnitMember_name != null)
-        _result["namedCompilationUnitMember_name"] =
-            namedCompilationUnitMember_name.toJson();
     }
     if (kind == idl.LinkedNodeKind.functionExpression) {
       if (actualReturnType != null)
@@ -15999,6 +15167,7 @@
       if (functionTypeAlias_typeParameters != null)
         _result["functionTypeAlias_typeParameters"] =
             functionTypeAlias_typeParameters.toJson();
+      if (nameOffset != 0) _result["nameOffset"] = nameOffset;
       if (typeAlias_typedefKeyword != 0)
         _result["typeAlias_typedefKeyword"] = typeAlias_typedefKeyword;
       if (typeAlias_semicolon != 0)
@@ -16007,9 +15176,6 @@
         _result["typeAlias_hasSelfReference"] = typeAlias_hasSelfReference;
       if (codeLength != 0) _result["codeLength"] = codeLength;
       if (codeOffset != 0) _result["codeOffset"] = codeOffset;
-      if (namedCompilationUnitMember_name != null)
-        _result["namedCompilationUnitMember_name"] =
-            namedCompilationUnitMember_name.toJson();
       if (simplyBoundable_isSimplyBounded != false)
         _result["simplyBoundable_isSimplyBounded"] =
             simplyBoundable_isSimplyBounded;
@@ -16046,9 +15212,6 @@
             annotatedNode_metadata.map((_value) => _value.toJson()).toList();
       if (methodDeclaration_body != null)
         _result["methodDeclaration_body"] = methodDeclaration_body.toJson();
-      if (methodDeclaration_externalKeyword != 0)
-        _result["methodDeclaration_externalKeyword"] =
-            methodDeclaration_externalKeyword;
       if (methodDeclaration_formalParameters != null)
         _result["methodDeclaration_formalParameters"] =
             methodDeclaration_formalParameters.toJson();
@@ -16058,12 +15221,7 @@
       if (methodDeclaration_returnType != null)
         _result["methodDeclaration_returnType"] =
             methodDeclaration_returnType.toJson();
-      if (methodDeclaration_modifierKeyword != 0)
-        _result["methodDeclaration_modifierKeyword"] =
-            methodDeclaration_modifierKeyword;
-      if (methodDeclaration_propertyKeyword != 0)
-        _result["methodDeclaration_propertyKeyword"] =
-            methodDeclaration_propertyKeyword;
+      if (nameOffset != 0) _result["nameOffset"] = nameOffset;
       if (methodDeclaration_actualProperty != 0)
         _result["methodDeclaration_actualProperty"] =
             methodDeclaration_actualProperty;
@@ -16074,8 +15232,6 @@
             methodDeclaration_typeParameters.toJson();
       if (codeLength != 0) _result["codeLength"] = codeLength;
       if (codeOffset != 0) _result["codeOffset"] = codeOffset;
-      if (methodDeclaration_name != null)
-        _result["methodDeclaration_name"] = methodDeclaration_name.toJson();
       if (executable_isGenerator != false)
         _result["executable_isGenerator"] = executable_isGenerator;
     }
@@ -16089,8 +15245,6 @@
       if (fieldFormalParameter_type != null)
         _result["fieldFormalParameter_type"] =
             fieldFormalParameter_type.toJson();
-      if (fieldFormalParameter_keyword != 0)
-        _result["fieldFormalParameter_keyword"] = fieldFormalParameter_keyword;
       if (fieldFormalParameter_typeParameters != null)
         _result["fieldFormalParameter_typeParameters"] =
             fieldFormalParameter_typeParameters.toJson();
@@ -16100,19 +15254,12 @@
       if (fieldFormalParameter_formalParameters != null)
         _result["fieldFormalParameter_formalParameters"] =
             fieldFormalParameter_formalParameters.toJson();
-      if (fieldFormalParameter_period != 0)
-        _result["fieldFormalParameter_period"] = fieldFormalParameter_period;
+      if (nameOffset != 0) _result["nameOffset"] = nameOffset;
       if (normalFormalParameter_requiredKeyword != 0)
         _result["normalFormalParameter_requiredKeyword"] =
             normalFormalParameter_requiredKeyword;
-      if (normalFormalParameter_covariantKeyword != 0)
-        _result["normalFormalParameter_covariantKeyword"] =
-            normalFormalParameter_covariantKeyword;
       if (inheritsCovariant != false)
         _result["inheritsCovariant"] = inheritsCovariant;
-      if (normalFormalParameter_identifier != null)
-        _result["normalFormalParameter_identifier"] =
-            normalFormalParameter_identifier.toJson();
       if (codeLength != 0) _result["codeLength"] = codeLength;
       if (codeOffset != 0) _result["codeOffset"] = codeOffset;
       if (normalFormalParameter_comment != null)
@@ -16135,17 +15282,12 @@
       if (functionTypedFormalParameter_typeParameters != null)
         _result["functionTypedFormalParameter_typeParameters"] =
             functionTypedFormalParameter_typeParameters.toJson();
+      if (nameOffset != 0) _result["nameOffset"] = nameOffset;
       if (normalFormalParameter_requiredKeyword != 0)
         _result["normalFormalParameter_requiredKeyword"] =
             normalFormalParameter_requiredKeyword;
-      if (normalFormalParameter_covariantKeyword != 0)
-        _result["normalFormalParameter_covariantKeyword"] =
-            normalFormalParameter_covariantKeyword;
       if (inheritsCovariant != false)
         _result["inheritsCovariant"] = inheritsCovariant;
-      if (normalFormalParameter_identifier != null)
-        _result["normalFormalParameter_identifier"] =
-            normalFormalParameter_identifier.toJson();
       if (codeLength != 0) _result["codeLength"] = codeLength;
       if (codeOffset != 0) _result["codeOffset"] = codeOffset;
       if (normalFormalParameter_comment != null)
@@ -16162,20 +15304,12 @@
       if (simpleFormalParameter_type != null)
         _result["simpleFormalParameter_type"] =
             simpleFormalParameter_type.toJson();
-      if (simpleFormalParameter_keyword != 0)
-        _result["simpleFormalParameter_keyword"] =
-            simpleFormalParameter_keyword;
+      if (nameOffset != 0) _result["nameOffset"] = nameOffset;
       if (normalFormalParameter_requiredKeyword != 0)
         _result["normalFormalParameter_requiredKeyword"] =
             normalFormalParameter_requiredKeyword;
-      if (normalFormalParameter_covariantKeyword != 0)
-        _result["normalFormalParameter_covariantKeyword"] =
-            normalFormalParameter_covariantKeyword;
       if (inheritsCovariant != false)
         _result["inheritsCovariant"] = inheritsCovariant;
-      if (normalFormalParameter_identifier != null)
-        _result["normalFormalParameter_identifier"] =
-            normalFormalParameter_identifier.toJson();
       if (codeLength != 0) _result["codeLength"] = codeLength;
       if (codeOffset != 0) _result["codeOffset"] = codeOffset;
       if (normalFormalParameter_comment != null)
@@ -16197,8 +15331,7 @@
             variableDeclaration_initializer.toJson();
       if (variableDeclaration_equals != 0)
         _result["variableDeclaration_equals"] = variableDeclaration_equals;
-      if (variableDeclaration_name != null)
-        _result["variableDeclaration_name"] = variableDeclaration_name.toJson();
+      if (nameOffset != 0) _result["nameOffset"] = nameOffset;
       if (inheritsCovariant != false)
         _result["inheritsCovariant"] = inheritsCovariant;
       if (codeLength != 0) _result["codeLength"] = codeLength;
@@ -16225,8 +15358,9 @@
       if (binaryExpression_elementType != null)
         _result["binaryExpression_elementType"] =
             binaryExpression_elementType.toJson();
-      if (binaryExpression_operator != 0)
-        _result["binaryExpression_operator"] = binaryExpression_operator;
+      if (binaryExpression_operator != idl.UnlinkedTokenType.NOTHING)
+        _result["binaryExpression_operator"] =
+            binaryExpression_operator.toString().split('.')[1];
       if (expression_type != null)
         _result["expression_type"] = expression_type.toJson();
     }
@@ -16270,8 +15404,6 @@
       if (adjacentStrings_strings.isNotEmpty)
         _result["adjacentStrings_strings"] =
             adjacentStrings_strings.map((_value) => _value.toJson()).toList();
-      if (expression_type != null)
-        _result["expression_type"] = expression_type.toJson();
     }
     if (kind == idl.LinkedNodeKind.argumentList) {
       if (argumentList_arguments.isNotEmpty)
@@ -16343,21 +15475,10 @@
       if (constructorDeclaration_body != null)
         _result["constructorDeclaration_body"] =
             constructorDeclaration_body.toJson();
-      if (constructorDeclaration_constKeyword != 0)
-        _result["constructorDeclaration_constKeyword"] =
-            constructorDeclaration_constKeyword;
-      if (constructorDeclaration_name != null)
-        _result["constructorDeclaration_name"] =
-            constructorDeclaration_name.toJson();
-      if (constructorDeclaration_factoryKeyword != 0)
-        _result["constructorDeclaration_factoryKeyword"] =
-            constructorDeclaration_factoryKeyword;
       if (constructorDeclaration_parameters != null)
         _result["constructorDeclaration_parameters"] =
             constructorDeclaration_parameters.toJson();
-      if (constructorDeclaration_externalKeyword != 0)
-        _result["constructorDeclaration_externalKeyword"] =
-            constructorDeclaration_externalKeyword;
+      if (nameOffset != 0) _result["nameOffset"] = nameOffset;
       if (constructorDeclaration_period != 0)
         _result["constructorDeclaration_period"] =
             constructorDeclaration_period;
@@ -16391,17 +15512,9 @@
       if (annotatedNode_metadata.isNotEmpty)
         _result["annotatedNode_metadata"] =
             annotatedNode_metadata.map((_value) => _value.toJson()).toList();
-      if (enumDeclaration_enumKeyword != 0)
-        _result["enumDeclaration_enumKeyword"] = enumDeclaration_enumKeyword;
-      if (enumDeclaration_rightBracket != 0)
-        _result["enumDeclaration_rightBracket"] = enumDeclaration_rightBracket;
-      if (enumDeclaration_leftBracket != 0)
-        _result["enumDeclaration_leftBracket"] = enumDeclaration_leftBracket;
+      if (nameOffset != 0) _result["nameOffset"] = nameOffset;
       if (codeLength != 0) _result["codeLength"] = codeLength;
       if (codeOffset != 0) _result["codeOffset"] = codeOffset;
-      if (namedCompilationUnitMember_name != null)
-        _result["namedCompilationUnitMember_name"] =
-            namedCompilationUnitMember_name.toJson();
     }
     if (kind == idl.LinkedNodeKind.formalParameterList) {
       if (formalParameterList_parameters.isNotEmpty)
@@ -16422,14 +15535,6 @@
         _result["formalParameterList_rightParenthesis"] =
             formalParameterList_rightParenthesis;
     }
-    if (kind == idl.LinkedNodeKind.hideCombinator) {
-      if (hideCombinator_hiddenNames.isNotEmpty)
-        _result["hideCombinator_hiddenNames"] = hideCombinator_hiddenNames
-            .map((_value) => _value.toJson())
-            .toList();
-      if (combinator_keyword != 0)
-        _result["combinator_keyword"] = combinator_keyword;
-    }
     if (kind == idl.LinkedNodeKind.implementsClause) {
       if (implementsClause_interfaces.isNotEmpty)
         _result["implementsClause_interfaces"] = implementsClause_interfaces
@@ -16461,8 +15566,6 @@
         _result["listLiteral_leftBracket"] = listLiteral_leftBracket;
       if (listLiteral_rightBracket != 0)
         _result["listLiteral_rightBracket"] = listLiteral_rightBracket;
-      if (typedLiteral_constKeyword != 0)
-        _result["typedLiteral_constKeyword"] = typedLiteral_constKeyword;
       if (expression_type != null)
         _result["expression_type"] = expression_type.toJson();
       if (typedLiteral_typeArguments != null)
@@ -16480,6 +15583,7 @@
       if (annotatedNode_metadata.isNotEmpty)
         _result["annotatedNode_metadata"] =
             annotatedNode_metadata.map((_value) => _value.toJson()).toList();
+      if (nameOffset != 0) _result["nameOffset"] = nameOffset;
       if (directive_keyword != 0)
         _result["directive_keyword"] = directive_keyword;
       if (uriBasedDirective_uriElement != 0)
@@ -16510,13 +15614,9 @@
       if (annotatedNode_metadata.isNotEmpty)
         _result["annotatedNode_metadata"] =
             annotatedNode_metadata.map((_value) => _value.toJson()).toList();
-      if (importDirective_prefix != null)
-        _result["importDirective_prefix"] = importDirective_prefix.toJson();
-      if (importDirective_asKeyword != 0)
-        _result["importDirective_asKeyword"] = importDirective_asKeyword;
-      if (importDirective_deferredKeyword != 0)
-        _result["importDirective_deferredKeyword"] =
-            importDirective_deferredKeyword;
+      if (importDirective_prefixOffset != 0)
+        _result["importDirective_prefixOffset"] = importDirective_prefixOffset;
+      if (nameOffset != 0) _result["nameOffset"] = nameOffset;
       if (directive_keyword != 0)
         _result["directive_keyword"] = directive_keyword;
       if (uriBasedDirective_uriElement != 0)
@@ -16528,6 +15628,8 @@
             namespaceDirective_configurations
                 .map((_value) => _value.toJson())
                 .toList();
+      if (importDirective_prefix != '')
+        _result["importDirective_prefix"] = importDirective_prefix;
       if (uriBasedDirective_uri != null)
         _result["uriBasedDirective_uri"] = uriBasedDirective_uri.toJson();
       if (namespaceDirective_selectedUri != '')
@@ -16553,8 +15655,6 @@
         _result["setOrMapLiteral_leftBracket"] = setOrMapLiteral_leftBracket;
       if (setOrMapLiteral_rightBracket != 0)
         _result["setOrMapLiteral_rightBracket"] = setOrMapLiteral_rightBracket;
-      if (typedLiteral_constKeyword != 0)
-        _result["typedLiteral_constKeyword"] = typedLiteral_constKeyword;
       if (setOrMapLiteral_isMap != false)
         _result["setOrMapLiteral_isMap"] = setOrMapLiteral_isMap;
       if (expression_type != null)
@@ -16565,20 +15665,11 @@
       if (setOrMapLiteral_isSet != false)
         _result["setOrMapLiteral_isSet"] = setOrMapLiteral_isSet;
     }
-    if (kind == idl.LinkedNodeKind.showCombinator) {
-      if (showCombinator_shownNames.isNotEmpty)
-        _result["showCombinator_shownNames"] =
-            showCombinator_shownNames.map((_value) => _value.toJson()).toList();
-      if (combinator_keyword != 0)
-        _result["combinator_keyword"] = combinator_keyword;
-    }
     if (kind == idl.LinkedNodeKind.stringInterpolation) {
       if (stringInterpolation_elements.isNotEmpty)
         _result["stringInterpolation_elements"] = stringInterpolation_elements
             .map((_value) => _value.toJson())
             .toList();
-      if (expression_type != null)
-        _result["expression_type"] = expression_type.toJson();
     }
     if (kind == idl.LinkedNodeKind.switchStatement) {
       if (switchStatement_members.isNotEmpty)
@@ -16653,12 +15744,6 @@
       if (variableDeclarationList_type != null)
         _result["variableDeclarationList_type"] =
             variableDeclarationList_type.toJson();
-      if (variableDeclarationList_keyword != 0)
-        _result["variableDeclarationList_keyword"] =
-            variableDeclarationList_keyword;
-      if (variableDeclarationList_lateKeyword != 0)
-        _result["variableDeclarationList_lateKeyword"] =
-            variableDeclarationList_lateKeyword;
     }
     if (kind == idl.LinkedNodeKind.withClause) {
       if (withClause_mixinTypes.isNotEmpty)
@@ -16676,18 +15761,13 @@
       if (classDeclaration_extendsClause != null)
         _result["classDeclaration_extendsClause"] =
             classDeclaration_extendsClause.toJson();
-      if (classDeclaration_abstractKeyword != 0)
-        _result["classDeclaration_abstractKeyword"] =
-            classDeclaration_abstractKeyword;
       if (classDeclaration_withClause != null)
         _result["classDeclaration_withClause"] =
             classDeclaration_withClause.toJson();
       if (classDeclaration_nativeClause != null)
         _result["classDeclaration_nativeClause"] =
             classDeclaration_nativeClause.toJson();
-      if (classDeclaration_classKeyword != 0)
-        _result["classDeclaration_classKeyword"] =
-            classDeclaration_classKeyword;
+      if (nameOffset != 0) _result["nameOffset"] = nameOffset;
       if (classOrMixinDeclaration_rightBracket != 0)
         _result["classOrMixinDeclaration_rightBracket"] =
             classOrMixinDeclaration_rightBracket;
@@ -16710,9 +15790,6 @@
             classOrMixinDeclaration_typeParameters.toJson();
       if (codeLength != 0) _result["codeLength"] = codeLength;
       if (codeOffset != 0) _result["codeOffset"] = codeOffset;
-      if (namedCompilationUnitMember_name != null)
-        _result["namedCompilationUnitMember_name"] =
-            namedCompilationUnitMember_name.toJson();
       if (simplyBoundable_isSimplyBounded != false)
         _result["simplyBoundable_isSimplyBounded"] =
             simplyBoundable_isSimplyBounded;
@@ -16726,17 +15803,13 @@
       if (classTypeAlias_typeParameters != null)
         _result["classTypeAlias_typeParameters"] =
             classTypeAlias_typeParameters.toJson();
-      if (classTypeAlias_abstractKeyword != 0)
-        _result["classTypeAlias_abstractKeyword"] =
-            classTypeAlias_abstractKeyword;
       if (classTypeAlias_superclass != null)
         _result["classTypeAlias_superclass"] =
             classTypeAlias_superclass.toJson();
       if (classTypeAlias_withClause != null)
         _result["classTypeAlias_withClause"] =
             classTypeAlias_withClause.toJson();
-      if (classTypeAlias_equals != 0)
-        _result["classTypeAlias_equals"] = classTypeAlias_equals;
+      if (nameOffset != 0) _result["nameOffset"] = nameOffset;
       if (typeAlias_typedefKeyword != 0)
         _result["typeAlias_typedefKeyword"] = typeAlias_typedefKeyword;
       if (typeAlias_semicolon != 0)
@@ -16746,9 +15819,6 @@
             classTypeAlias_implementsClause.toJson();
       if (codeLength != 0) _result["codeLength"] = codeLength;
       if (codeOffset != 0) _result["codeOffset"] = codeOffset;
-      if (namedCompilationUnitMember_name != null)
-        _result["namedCompilationUnitMember_name"] =
-            namedCompilationUnitMember_name.toJson();
       if (simplyBoundable_isSimplyBounded != false)
         _result["simplyBoundable_isSimplyBounded"] =
             simplyBoundable_isSimplyBounded;
@@ -16773,9 +15843,7 @@
       if (annotatedNode_metadata.isNotEmpty)
         _result["annotatedNode_metadata"] =
             annotatedNode_metadata.map((_value) => _value.toJson()).toList();
-      if (enumConstantDeclaration_name != null)
-        _result["enumConstantDeclaration_name"] =
-            enumConstantDeclaration_name.toJson();
+      if (nameOffset != 0) _result["nameOffset"] = nameOffset;
     }
     if (kind == idl.LinkedNodeKind.fieldDeclaration) {
       if (annotatedNode_comment != null)
@@ -16785,12 +15853,6 @@
             annotatedNode_metadata.map((_value) => _value.toJson()).toList();
       if (fieldDeclaration_fields != null)
         _result["fieldDeclaration_fields"] = fieldDeclaration_fields.toJson();
-      if (fieldDeclaration_covariantKeyword != 0)
-        _result["fieldDeclaration_covariantKeyword"] =
-            fieldDeclaration_covariantKeyword;
-      if (fieldDeclaration_staticKeyword != 0)
-        _result["fieldDeclaration_staticKeyword"] =
-            fieldDeclaration_staticKeyword;
       if (fieldDeclaration_semicolon != 0)
         _result["fieldDeclaration_semicolon"] = fieldDeclaration_semicolon;
     }
@@ -16806,8 +15868,7 @@
       if (genericTypeAlias_functionType != null)
         _result["genericTypeAlias_functionType"] =
             genericTypeAlias_functionType.toJson();
-      if (genericTypeAlias_equals != 0)
-        _result["genericTypeAlias_equals"] = genericTypeAlias_equals;
+      if (nameOffset != 0) _result["nameOffset"] = nameOffset;
       if (typeAlias_typedefKeyword != 0)
         _result["typeAlias_typedefKeyword"] = typeAlias_typedefKeyword;
       if (typeAlias_semicolon != 0)
@@ -16816,9 +15877,6 @@
         _result["typeAlias_hasSelfReference"] = typeAlias_hasSelfReference;
       if (codeLength != 0) _result["codeLength"] = codeLength;
       if (codeOffset != 0) _result["codeOffset"] = codeOffset;
-      if (namedCompilationUnitMember_name != null)
-        _result["namedCompilationUnitMember_name"] =
-            namedCompilationUnitMember_name.toJson();
       if (simplyBoundable_isSimplyBounded != false)
         _result["simplyBoundable_isSimplyBounded"] =
             simplyBoundable_isSimplyBounded;
@@ -16848,6 +15906,7 @@
       if (mixinDeclaration_mixinKeyword != 0)
         _result["mixinDeclaration_mixinKeyword"] =
             mixinDeclaration_mixinKeyword;
+      if (nameOffset != 0) _result["nameOffset"] = nameOffset;
       if (classOrMixinDeclaration_rightBracket != 0)
         _result["classOrMixinDeclaration_rightBracket"] =
             classOrMixinDeclaration_rightBracket;
@@ -16867,9 +15926,6 @@
             classOrMixinDeclaration_typeParameters.toJson();
       if (codeLength != 0) _result["codeLength"] = codeLength;
       if (codeOffset != 0) _result["codeOffset"] = codeOffset;
-      if (namedCompilationUnitMember_name != null)
-        _result["namedCompilationUnitMember_name"] =
-            namedCompilationUnitMember_name.toJson();
       if (mixinDeclaration_superInvokedNames.isNotEmpty)
         _result["mixinDeclaration_superInvokedNames"] =
             mixinDeclaration_superInvokedNames;
@@ -16883,6 +15939,7 @@
       if (annotatedNode_metadata.isNotEmpty)
         _result["annotatedNode_metadata"] =
             annotatedNode_metadata.map((_value) => _value.toJson()).toList();
+      if (nameOffset != 0) _result["nameOffset"] = nameOffset;
       if (directive_keyword != 0)
         _result["directive_keyword"] = directive_keyword;
       if (uriBasedDirective_uriElement != 0)
@@ -16935,11 +15992,10 @@
         _result["typeParameter_bound"] = typeParameter_bound.toJson();
       if (typeParameter_extendsKeyword != 0)
         _result["typeParameter_extendsKeyword"] = typeParameter_extendsKeyword;
-      if (typeParameter_name != null)
-        _result["typeParameter_name"] = typeParameter_name.toJson();
       if (typeParameter_defaultType != null)
         _result["typeParameter_defaultType"] =
             typeParameter_defaultType.toJson();
+      if (nameOffset != 0) _result["nameOffset"] = nameOffset;
       if (codeLength != 0) _result["codeLength"] = codeLength;
       if (codeOffset != 0) _result["codeOffset"] = codeOffset;
     }
@@ -17379,9 +16435,6 @@
       if (instanceCreationExpression_arguments != null)
         _result["instanceCreationExpression_arguments"] =
             instanceCreationExpression_arguments.toJson();
-      if (instanceCreationExpression_keyword != 0)
-        _result["instanceCreationExpression_keyword"] =
-            instanceCreationExpression_keyword;
       if (instanceCreationExpression_constructorName != null)
         _result["instanceCreationExpression_constructorName"] =
             instanceCreationExpression_constructorName.toJson();
@@ -17411,8 +16464,6 @@
         _result["isExpression_type"] = isExpression_type.toJson();
       if (isExpression_notOperator != 0)
         _result["isExpression_notOperator"] = isExpression_notOperator;
-      if (expression_type != null)
-        _result["expression_type"] = expression_type.toJson();
     }
     if (kind == idl.LinkedNodeKind.label) {
       if (label_label != null) _result["label_label"] = label_label.toJson();
@@ -17432,8 +16483,6 @@
             namedExpression_expression.toJson();
       if (namedExpression_name != null)
         _result["namedExpression_name"] = namedExpression_name.toJson();
-      if (expression_type != null)
-        _result["expression_type"] = expression_type.toJson();
     }
     if (kind == idl.LinkedNodeKind.nativeClause) {
       if (nativeClause_name != null)
@@ -17498,8 +16547,9 @@
       if (prefixExpression_elementType != null)
         _result["prefixExpression_elementType"] =
             prefixExpression_elementType.toJson();
-      if (prefixExpression_operator != 0)
-        _result["prefixExpression_operator"] = prefixExpression_operator;
+      if (prefixExpression_operator != idl.UnlinkedTokenType.NOTHING)
+        _result["prefixExpression_operator"] =
+            prefixExpression_operator.toString().split('.')[1];
       if (expression_type != null)
         _result["expression_type"] = expression_type.toJson();
     }
@@ -17547,8 +16597,9 @@
     if (kind == idl.LinkedNodeKind.spreadElement) {
       if (spreadElement_expression != null)
         _result["spreadElement_expression"] = spreadElement_expression.toJson();
-      if (spreadElement_spreadOperator != 0)
-        _result["spreadElement_spreadOperator"] = spreadElement_spreadOperator;
+      if (spreadElement_spreadOperator2 != idl.UnlinkedTokenType.NOTHING)
+        _result["spreadElement_spreadOperator2"] =
+            spreadElement_spreadOperator2.toString().split('.')[1];
     }
     if (kind == idl.LinkedNodeKind.superConstructorInvocation) {
       if (superConstructorInvocation_arguments != null)
@@ -17622,24 +16673,6 @@
       if (yieldStatement_star != 0)
         _result["yieldStatement_star"] = yieldStatement_star;
     }
-    if (kind == idl.LinkedNodeKind.booleanLiteral) {
-      if (booleanLiteral_literal != 0)
-        _result["booleanLiteral_literal"] = booleanLiteral_literal;
-      if (booleanLiteral_value != false)
-        _result["booleanLiteral_value"] = booleanLiteral_value;
-      if (expression_type != null)
-        _result["expression_type"] = expression_type.toJson();
-    }
-    if (kind == idl.LinkedNodeKind.doubleLiteral) {
-      if (doubleLiteral_literal != 0)
-        _result["doubleLiteral_literal"] = doubleLiteral_literal;
-      if (doubleLiteral_value != 0.0)
-        _result["doubleLiteral_value"] = doubleLiteral_value.isFinite
-            ? doubleLiteral_value
-            : doubleLiteral_value.toString();
-      if (expression_type != null)
-        _result["expression_type"] = expression_type.toJson();
-    }
     if (kind == idl.LinkedNodeKind.emptyFunctionBody) {
       if (emptyFunctionBody_semicolon != 0)
         _result["emptyFunctionBody_semicolon"] = emptyFunctionBody_semicolon;
@@ -17648,14 +16681,6 @@
       if (emptyStatement_semicolon != 0)
         _result["emptyStatement_semicolon"] = emptyStatement_semicolon;
     }
-    if (kind == idl.LinkedNodeKind.integerLiteral) {
-      if (integerLiteral_literal != 0)
-        _result["integerLiteral_literal"] = integerLiteral_literal;
-      if (integerLiteral_value != 0)
-        _result["integerLiteral_value"] = integerLiteral_value;
-      if (expression_type != null)
-        _result["expression_type"] = expression_type.toJson();
-    }
     if (kind == idl.LinkedNodeKind.interpolationString) {
       if (interpolationString_token != 0)
         _result["interpolationString_token"] = interpolationString_token;
@@ -17685,22 +16710,12 @@
       if (simpleIdentifier_elementType != null)
         _result["simpleIdentifier_elementType"] =
             simpleIdentifier_elementType.toJson();
-      if (simpleIdentifier_token != 0)
-        _result["simpleIdentifier_token"] = simpleIdentifier_token;
       if (simpleIdentifier_isDeclaration != false)
         _result["simpleIdentifier_isDeclaration"] =
             simpleIdentifier_isDeclaration;
       if (expression_type != null)
         _result["expression_type"] = expression_type.toJson();
     }
-    if (kind == idl.LinkedNodeKind.simpleStringLiteral) {
-      if (simpleStringLiteral_token != 0)
-        _result["simpleStringLiteral_token"] = simpleStringLiteral_token;
-      if (expression_type != null)
-        _result["expression_type"] = expression_type.toJson();
-      if (simpleStringLiteral_value != '')
-        _result["simpleStringLiteral_value"] = simpleStringLiteral_value;
-    }
     if (kind == idl.LinkedNodeKind.superExpression) {
       if (superExpression_superKeyword != 0)
         _result["superExpression_superKeyword"] = superExpression_superKeyword;
@@ -17710,8 +16725,7 @@
     if (kind == idl.LinkedNodeKind.symbolLiteral) {
       if (symbolLiteral_poundSign != 0)
         _result["symbolLiteral_poundSign"] = symbolLiteral_poundSign;
-      if (symbolLiteral_components.isNotEmpty)
-        _result["symbolLiteral_components"] = symbolLiteral_components;
+      if (names.isNotEmpty) _result["names"] = names;
       if (expression_type != null)
         _result["expression_type"] = expression_type.toJson();
     }
@@ -17721,6 +16735,34 @@
       if (expression_type != null)
         _result["expression_type"] = expression_type.toJson();
     }
+    if (kind == idl.LinkedNodeKind.integerLiteral) {
+      if (integerLiteral_value != 0)
+        _result["integerLiteral_value"] = integerLiteral_value;
+    }
+    if (kind == idl.LinkedNodeKind.hideCombinator) {
+      if (combinator_keyword != 0)
+        _result["combinator_keyword"] = combinator_keyword;
+      if (names.isNotEmpty) _result["names"] = names;
+    }
+    if (kind == idl.LinkedNodeKind.showCombinator) {
+      if (combinator_keyword != 0)
+        _result["combinator_keyword"] = combinator_keyword;
+      if (names.isNotEmpty) _result["names"] = names;
+    }
+    if (kind == idl.LinkedNodeKind.booleanLiteral) {
+      if (booleanLiteral_value != false)
+        _result["booleanLiteral_value"] = booleanLiteral_value;
+    }
+    if (kind == idl.LinkedNodeKind.doubleLiteral) {
+      if (doubleLiteral_value != 0.0)
+        _result["doubleLiteral_value"] = doubleLiteral_value.isFinite
+            ? doubleLiteral_value
+            : doubleLiteral_value.toString();
+    }
+    if (kind == idl.LinkedNodeKind.simpleStringLiteral) {
+      if (simpleStringLiteral_value != '')
+        _result["simpleStringLiteral_value"] = simpleStringLiteral_value;
+    }
     return _result;
   }
 
@@ -17733,16 +16775,14 @@
         "annotatedNode_metadata": annotatedNode_metadata,
         "functionDeclaration_functionExpression":
             functionDeclaration_functionExpression,
-        "functionDeclaration_externalKeyword":
-            functionDeclaration_externalKeyword,
         "functionDeclaration_returnType": functionDeclaration_returnType,
-        "functionDeclaration_propertyKeyword":
-            functionDeclaration_propertyKeyword,
+        "nameOffset": nameOffset,
         "codeLength": codeLength,
         "codeOffset": codeOffset,
-        "namedCompilationUnitMember_name": namedCompilationUnitMember_name,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.functionExpression) {
@@ -17754,8 +16794,10 @@
         "functionExpression_typeParameters": functionExpression_typeParameters,
         "executable_isAsynchronous": executable_isAsynchronous,
         "executable_isGenerator": executable_isGenerator,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.functionTypeAlias) {
@@ -17767,14 +16809,16 @@
             functionTypeAlias_formalParameters,
         "functionTypeAlias_returnType": functionTypeAlias_returnType,
         "functionTypeAlias_typeParameters": functionTypeAlias_typeParameters,
+        "nameOffset": nameOffset,
         "typeAlias_typedefKeyword": typeAlias_typedefKeyword,
         "typeAlias_semicolon": typeAlias_semicolon,
         "typeAlias_hasSelfReference": typeAlias_hasSelfReference,
         "codeLength": codeLength,
         "codeOffset": codeOffset,
-        "namedCompilationUnitMember_name": namedCompilationUnitMember_name,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
         "simplyBoundable_isSimplyBounded": simplyBoundable_isSimplyBounded,
       };
     }
@@ -17791,8 +16835,10 @@
             genericFunctionType_formalParameters,
         "genericFunctionType_question": genericFunctionType_question,
         "genericFunctionType_type": genericFunctionType_type,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.methodDeclaration) {
@@ -17801,22 +16847,21 @@
         "annotatedNode_comment": annotatedNode_comment,
         "annotatedNode_metadata": annotatedNode_metadata,
         "methodDeclaration_body": methodDeclaration_body,
-        "methodDeclaration_externalKeyword": methodDeclaration_externalKeyword,
         "methodDeclaration_formalParameters":
             methodDeclaration_formalParameters,
         "methodDeclaration_operatorKeyword": methodDeclaration_operatorKeyword,
         "methodDeclaration_returnType": methodDeclaration_returnType,
-        "methodDeclaration_modifierKeyword": methodDeclaration_modifierKeyword,
-        "methodDeclaration_propertyKeyword": methodDeclaration_propertyKeyword,
+        "nameOffset": nameOffset,
         "methodDeclaration_actualProperty": methodDeclaration_actualProperty,
         "executable_isAsynchronous": executable_isAsynchronous,
         "methodDeclaration_typeParameters": methodDeclaration_typeParameters,
         "codeLength": codeLength,
         "codeOffset": codeOffset,
-        "methodDeclaration_name": methodDeclaration_name,
         "executable_isGenerator": executable_isGenerator,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.fieldFormalParameter) {
@@ -17824,24 +16869,22 @@
         "actualType": actualType,
         "normalFormalParameter_metadata": normalFormalParameter_metadata,
         "fieldFormalParameter_type": fieldFormalParameter_type,
-        "fieldFormalParameter_keyword": fieldFormalParameter_keyword,
         "fieldFormalParameter_typeParameters":
             fieldFormalParameter_typeParameters,
         "fieldFormalParameter_thisKeyword": fieldFormalParameter_thisKeyword,
         "fieldFormalParameter_formalParameters":
             fieldFormalParameter_formalParameters,
-        "fieldFormalParameter_period": fieldFormalParameter_period,
+        "nameOffset": nameOffset,
         "normalFormalParameter_requiredKeyword":
             normalFormalParameter_requiredKeyword,
-        "normalFormalParameter_covariantKeyword":
-            normalFormalParameter_covariantKeyword,
         "inheritsCovariant": inheritsCovariant,
-        "normalFormalParameter_identifier": normalFormalParameter_identifier,
         "codeLength": codeLength,
         "codeOffset": codeOffset,
+        "flags": flags,
         "normalFormalParameter_comment": normalFormalParameter_comment,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.functionTypedFormalParameter) {
@@ -17854,17 +16897,17 @@
             functionTypedFormalParameter_returnType,
         "functionTypedFormalParameter_typeParameters":
             functionTypedFormalParameter_typeParameters,
+        "nameOffset": nameOffset,
         "normalFormalParameter_requiredKeyword":
             normalFormalParameter_requiredKeyword,
-        "normalFormalParameter_covariantKeyword":
-            normalFormalParameter_covariantKeyword,
         "inheritsCovariant": inheritsCovariant,
-        "normalFormalParameter_identifier": normalFormalParameter_identifier,
         "codeLength": codeLength,
         "codeOffset": codeOffset,
+        "flags": flags,
         "normalFormalParameter_comment": normalFormalParameter_comment,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.simpleFormalParameter) {
@@ -17872,18 +16915,17 @@
         "actualType": actualType,
         "normalFormalParameter_metadata": normalFormalParameter_metadata,
         "simpleFormalParameter_type": simpleFormalParameter_type,
-        "simpleFormalParameter_keyword": simpleFormalParameter_keyword,
+        "nameOffset": nameOffset,
         "normalFormalParameter_requiredKeyword":
             normalFormalParameter_requiredKeyword,
-        "normalFormalParameter_covariantKeyword":
-            normalFormalParameter_covariantKeyword,
         "inheritsCovariant": inheritsCovariant,
-        "normalFormalParameter_identifier": normalFormalParameter_identifier,
         "codeLength": codeLength,
         "codeOffset": codeOffset,
+        "flags": flags,
         "normalFormalParameter_comment": normalFormalParameter_comment,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
         "topLevelTypeInferenceError": topLevelTypeInferenceError,
       };
     }
@@ -17894,12 +16936,14 @@
         "annotatedNode_metadata": annotatedNode_metadata,
         "variableDeclaration_initializer": variableDeclaration_initializer,
         "variableDeclaration_equals": variableDeclaration_equals,
-        "variableDeclaration_name": variableDeclaration_name,
+        "nameOffset": nameOffset,
         "inheritsCovariant": inheritsCovariant,
         "codeLength": codeLength,
         "codeOffset": codeOffset,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
         "topLevelTypeInferenceError": topLevelTypeInferenceError,
         "variableDeclaration_declaration": variableDeclaration_declaration,
       };
@@ -17913,8 +16957,10 @@
         "binaryExpression_elementType": binaryExpression_elementType,
         "binaryExpression_operator": binaryExpression_operator,
         "expression_type": expression_type,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.functionExpressionInvocation) {
@@ -17925,9 +16971,11 @@
         "invocationExpression_typeArguments":
             invocationExpression_typeArguments,
         "expression_type": expression_type,
+        "flags": flags,
         "invocationExpression_arguments": invocationExpression_arguments,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.methodInvocation) {
@@ -17939,17 +16987,20 @@
         "invocationExpression_typeArguments":
             invocationExpression_typeArguments,
         "expression_type": expression_type,
+        "flags": flags,
         "invocationExpression_arguments": invocationExpression_arguments,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.adjacentStrings) {
       return {
         "adjacentStrings_strings": adjacentStrings_strings,
-        "expression_type": expression_type,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.argumentList) {
@@ -17957,8 +17008,10 @@
         "argumentList_arguments": argumentList_arguments,
         "argumentList_leftParenthesis": argumentList_leftParenthesis,
         "argumentList_rightParenthesis": argumentList_rightParenthesis,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.block) {
@@ -17966,8 +17019,10 @@
         "block_statements": block_statements,
         "block_leftBracket": block_leftBracket,
         "block_rightBracket": block_rightBracket,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.cascadeExpression) {
@@ -17975,8 +17030,10 @@
         "cascadeExpression_sections": cascadeExpression_sections,
         "cascadeExpression_target": cascadeExpression_target,
         "expression_type": expression_type,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.comment) {
@@ -17984,8 +17041,10 @@
         "comment_references": comment_references,
         "comment_tokens": comment_tokens,
         "comment_type": comment_type,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.compilationUnit) {
@@ -17997,8 +17056,10 @@
         "codeLength": codeLength,
         "codeOffset": codeOffset,
         "compilationUnit_directives": compilationUnit_directives,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.constructorDeclaration) {
@@ -18008,14 +17069,8 @@
         "annotatedNode_comment": annotatedNode_comment,
         "annotatedNode_metadata": annotatedNode_metadata,
         "constructorDeclaration_body": constructorDeclaration_body,
-        "constructorDeclaration_constKeyword":
-            constructorDeclaration_constKeyword,
-        "constructorDeclaration_name": constructorDeclaration_name,
-        "constructorDeclaration_factoryKeyword":
-            constructorDeclaration_factoryKeyword,
         "constructorDeclaration_parameters": constructorDeclaration_parameters,
-        "constructorDeclaration_externalKeyword":
-            constructorDeclaration_externalKeyword,
+        "nameOffset": nameOffset,
         "constructorDeclaration_period": constructorDeclaration_period,
         "constructorDeclaration_separator": constructorDeclaration_separator,
         "executable_isAsynchronous": executable_isAsynchronous,
@@ -18025,15 +17080,19 @@
         "codeOffset": codeOffset,
         "constructorDeclaration_returnType": constructorDeclaration_returnType,
         "executable_isGenerator": executable_isGenerator,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.dottedName) {
       return {
         "dottedName_components": dottedName_components,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.enumDeclaration) {
@@ -18041,14 +17100,13 @@
         "enumDeclaration_constants": enumDeclaration_constants,
         "annotatedNode_comment": annotatedNode_comment,
         "annotatedNode_metadata": annotatedNode_metadata,
-        "enumDeclaration_enumKeyword": enumDeclaration_enumKeyword,
-        "enumDeclaration_rightBracket": enumDeclaration_rightBracket,
-        "enumDeclaration_leftBracket": enumDeclaration_leftBracket,
+        "nameOffset": nameOffset,
         "codeLength": codeLength,
         "codeOffset": codeOffset,
-        "namedCompilationUnitMember_name": namedCompilationUnitMember_name,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.formalParameterList) {
@@ -18061,16 +17119,10 @@
             formalParameterList_leftParenthesis,
         "formalParameterList_rightParenthesis":
             formalParameterList_rightParenthesis,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
-      };
-    }
-    if (kind == idl.LinkedNodeKind.hideCombinator) {
-      return {
-        "hideCombinator_hiddenNames": hideCombinator_hiddenNames,
-        "combinator_keyword": combinator_keyword,
-        "isSynthetic": isSynthetic,
-        "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.implementsClause) {
@@ -18078,23 +17130,29 @@
         "implementsClause_interfaces": implementsClause_interfaces,
         "implementsClause_implementsKeyword":
             implementsClause_implementsKeyword,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.labeledStatement) {
       return {
         "labeledStatement_labels": labeledStatement_labels,
         "labeledStatement_statement": labeledStatement_statement,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.libraryIdentifier) {
       return {
         "libraryIdentifier_components": libraryIdentifier_components,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.listLiteral) {
@@ -18102,11 +17160,12 @@
         "listLiteral_elements": listLiteral_elements,
         "listLiteral_leftBracket": listLiteral_leftBracket,
         "listLiteral_rightBracket": listLiteral_rightBracket,
-        "typedLiteral_constKeyword": typedLiteral_constKeyword,
         "expression_type": expression_type,
+        "flags": flags,
         "typedLiteral_typeArguments": typedLiteral_typeArguments,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.exportDirective) {
@@ -18114,13 +17173,16 @@
         "namespaceDirective_combinators": namespaceDirective_combinators,
         "annotatedNode_comment": annotatedNode_comment,
         "annotatedNode_metadata": annotatedNode_metadata,
+        "nameOffset": nameOffset,
         "directive_keyword": directive_keyword,
         "uriBasedDirective_uriElement": uriBasedDirective_uriElement,
         "directive_semicolon": directive_semicolon,
         "namespaceDirective_configurations": namespaceDirective_configurations,
+        "flags": flags,
         "uriBasedDirective_uri": uriBasedDirective_uri,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
         "namespaceDirective_selectedUri": namespaceDirective_selectedUri,
         "uriBasedDirective_uriContent": uriBasedDirective_uriContent,
       };
@@ -18130,16 +17192,18 @@
         "namespaceDirective_combinators": namespaceDirective_combinators,
         "annotatedNode_comment": annotatedNode_comment,
         "annotatedNode_metadata": annotatedNode_metadata,
-        "importDirective_prefix": importDirective_prefix,
-        "importDirective_asKeyword": importDirective_asKeyword,
-        "importDirective_deferredKeyword": importDirective_deferredKeyword,
+        "importDirective_prefixOffset": importDirective_prefixOffset,
+        "nameOffset": nameOffset,
         "directive_keyword": directive_keyword,
         "uriBasedDirective_uriElement": uriBasedDirective_uriElement,
         "directive_semicolon": directive_semicolon,
         "namespaceDirective_configurations": namespaceDirective_configurations,
+        "flags": flags,
+        "importDirective_prefix": importDirective_prefix,
         "uriBasedDirective_uri": uriBasedDirective_uri,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
         "namespaceDirective_selectedUri": namespaceDirective_selectedUri,
         "uriBasedDirective_uriContent": uriBasedDirective_uriContent,
       };
@@ -18148,8 +17212,10 @@
       return {
         "onClause_superclassConstraints": onClause_superclassConstraints,
         "onClause_onKeyword": onClause_onKeyword,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.setOrMapLiteral) {
@@ -18157,29 +17223,23 @@
         "setOrMapLiteral_elements": setOrMapLiteral_elements,
         "setOrMapLiteral_leftBracket": setOrMapLiteral_leftBracket,
         "setOrMapLiteral_rightBracket": setOrMapLiteral_rightBracket,
-        "typedLiteral_constKeyword": typedLiteral_constKeyword,
         "setOrMapLiteral_isMap": setOrMapLiteral_isMap,
         "expression_type": expression_type,
+        "flags": flags,
         "typedLiteral_typeArguments": typedLiteral_typeArguments,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
         "setOrMapLiteral_isSet": setOrMapLiteral_isSet,
       };
     }
-    if (kind == idl.LinkedNodeKind.showCombinator) {
-      return {
-        "showCombinator_shownNames": showCombinator_shownNames,
-        "combinator_keyword": combinator_keyword,
-        "isSynthetic": isSynthetic,
-        "kind": kind,
-      };
-    }
     if (kind == idl.LinkedNodeKind.stringInterpolation) {
       return {
         "stringInterpolation_elements": stringInterpolation_elements,
-        "expression_type": expression_type,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.switchStatement) {
@@ -18191,8 +17251,10 @@
         "switchStatement_rightParenthesis": switchStatement_rightParenthesis,
         "switchStatement_leftBracket": switchStatement_leftBracket,
         "switchStatement_rightBracket": switchStatement_rightBracket,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.tryStatement) {
@@ -18202,8 +17264,10 @@
         "tryStatement_finallyKeyword": tryStatement_finallyKeyword,
         "tryStatement_finallyBlock": tryStatement_finallyBlock,
         "tryStatement_tryKeyword": tryStatement_tryKeyword,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.typeArgumentList) {
@@ -18211,8 +17275,10 @@
         "typeArgumentList_arguments": typeArgumentList_arguments,
         "typeArgumentList_leftBracket": typeArgumentList_leftBracket,
         "typeArgumentList_rightBracket": typeArgumentList_rightBracket,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.typeParameterList) {
@@ -18220,8 +17286,10 @@
         "typeParameterList_typeParameters": typeParameterList_typeParameters,
         "typeParameterList_leftBracket": typeParameterList_leftBracket,
         "typeParameterList_rightBracket": typeParameterList_rightBracket,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.variableDeclarationList) {
@@ -18230,19 +17298,20 @@
         "annotatedNode_comment": annotatedNode_comment,
         "annotatedNode_metadata": annotatedNode_metadata,
         "variableDeclarationList_type": variableDeclarationList_type,
-        "variableDeclarationList_keyword": variableDeclarationList_keyword,
-        "variableDeclarationList_lateKeyword":
-            variableDeclarationList_lateKeyword,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.withClause) {
       return {
         "withClause_mixinTypes": withClause_mixinTypes,
         "withClause_withKeyword": withClause_withKeyword,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.classDeclaration) {
@@ -18250,10 +17319,9 @@
         "annotatedNode_comment": annotatedNode_comment,
         "annotatedNode_metadata": annotatedNode_metadata,
         "classDeclaration_extendsClause": classDeclaration_extendsClause,
-        "classDeclaration_abstractKeyword": classDeclaration_abstractKeyword,
         "classDeclaration_withClause": classDeclaration_withClause,
         "classDeclaration_nativeClause": classDeclaration_nativeClause,
-        "classDeclaration_classKeyword": classDeclaration_classKeyword,
+        "nameOffset": nameOffset,
         "classOrMixinDeclaration_rightBracket":
             classOrMixinDeclaration_rightBracket,
         "classOrMixinDeclaration_leftBracket":
@@ -18266,9 +17334,10 @@
             classOrMixinDeclaration_typeParameters,
         "codeLength": codeLength,
         "codeOffset": codeOffset,
-        "namedCompilationUnitMember_name": namedCompilationUnitMember_name,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
         "simplyBoundable_isSimplyBounded": simplyBoundable_isSimplyBounded,
       };
     }
@@ -18277,18 +17346,18 @@
         "annotatedNode_comment": annotatedNode_comment,
         "annotatedNode_metadata": annotatedNode_metadata,
         "classTypeAlias_typeParameters": classTypeAlias_typeParameters,
-        "classTypeAlias_abstractKeyword": classTypeAlias_abstractKeyword,
         "classTypeAlias_superclass": classTypeAlias_superclass,
         "classTypeAlias_withClause": classTypeAlias_withClause,
-        "classTypeAlias_equals": classTypeAlias_equals,
+        "nameOffset": nameOffset,
         "typeAlias_typedefKeyword": typeAlias_typedefKeyword,
         "typeAlias_semicolon": typeAlias_semicolon,
         "classTypeAlias_implementsClause": classTypeAlias_implementsClause,
         "codeLength": codeLength,
         "codeOffset": codeOffset,
-        "namedCompilationUnitMember_name": namedCompilationUnitMember_name,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
         "simplyBoundable_isSimplyBounded": simplyBoundable_isSimplyBounded,
       };
     }
@@ -18299,17 +17368,21 @@
         "declaredIdentifier_identifier": declaredIdentifier_identifier,
         "declaredIdentifier_keyword": declaredIdentifier_keyword,
         "declaredIdentifier_type": declaredIdentifier_type,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.enumConstantDeclaration) {
       return {
         "annotatedNode_comment": annotatedNode_comment,
         "annotatedNode_metadata": annotatedNode_metadata,
-        "enumConstantDeclaration_name": enumConstantDeclaration_name,
+        "nameOffset": nameOffset,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.fieldDeclaration) {
@@ -18317,11 +17390,11 @@
         "annotatedNode_comment": annotatedNode_comment,
         "annotatedNode_metadata": annotatedNode_metadata,
         "fieldDeclaration_fields": fieldDeclaration_fields,
-        "fieldDeclaration_covariantKeyword": fieldDeclaration_covariantKeyword,
-        "fieldDeclaration_staticKeyword": fieldDeclaration_staticKeyword,
         "fieldDeclaration_semicolon": fieldDeclaration_semicolon,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.genericTypeAlias) {
@@ -18330,15 +17403,16 @@
         "annotatedNode_metadata": annotatedNode_metadata,
         "genericTypeAlias_typeParameters": genericTypeAlias_typeParameters,
         "genericTypeAlias_functionType": genericTypeAlias_functionType,
-        "genericTypeAlias_equals": genericTypeAlias_equals,
+        "nameOffset": nameOffset,
         "typeAlias_typedefKeyword": typeAlias_typedefKeyword,
         "typeAlias_semicolon": typeAlias_semicolon,
         "typeAlias_hasSelfReference": typeAlias_hasSelfReference,
         "codeLength": codeLength,
         "codeOffset": codeOffset,
-        "namedCompilationUnitMember_name": namedCompilationUnitMember_name,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
         "simplyBoundable_isSimplyBounded": simplyBoundable_isSimplyBounded,
       };
     }
@@ -18349,8 +17423,10 @@
         "libraryDirective_name": libraryDirective_name,
         "directive_keyword": directive_keyword,
         "directive_semicolon": directive_semicolon,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.mixinDeclaration) {
@@ -18359,6 +17435,7 @@
         "annotatedNode_metadata": annotatedNode_metadata,
         "mixinDeclaration_onClause": mixinDeclaration_onClause,
         "mixinDeclaration_mixinKeyword": mixinDeclaration_mixinKeyword,
+        "nameOffset": nameOffset,
         "classOrMixinDeclaration_rightBracket":
             classOrMixinDeclaration_rightBracket,
         "classOrMixinDeclaration_leftBracket":
@@ -18370,11 +17447,12 @@
             classOrMixinDeclaration_typeParameters,
         "codeLength": codeLength,
         "codeOffset": codeOffset,
-        "namedCompilationUnitMember_name": namedCompilationUnitMember_name,
-        "isSynthetic": isSynthetic,
-        "kind": kind,
         "mixinDeclaration_superInvokedNames":
             mixinDeclaration_superInvokedNames,
+        "flags": flags,
+        "isSynthetic": isSynthetic,
+        "kind": kind,
+        "name": name,
         "simplyBoundable_isSimplyBounded": simplyBoundable_isSimplyBounded,
       };
     }
@@ -18382,12 +17460,15 @@
       return {
         "annotatedNode_comment": annotatedNode_comment,
         "annotatedNode_metadata": annotatedNode_metadata,
+        "nameOffset": nameOffset,
         "directive_keyword": directive_keyword,
         "uriBasedDirective_uriElement": uriBasedDirective_uriElement,
         "directive_semicolon": directive_semicolon,
+        "flags": flags,
         "uriBasedDirective_uri": uriBasedDirective_uri,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
         "uriBasedDirective_uriContent": uriBasedDirective_uriContent,
       };
     }
@@ -18400,8 +17481,10 @@
         "partOfDirective_ofKeyword": partOfDirective_ofKeyword,
         "directive_keyword": directive_keyword,
         "directive_semicolon": directive_semicolon,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.topLevelVariableDeclaration) {
@@ -18412,8 +17495,10 @@
             topLevelVariableDeclaration_variableList,
         "topLevelVariableDeclaration_semicolon":
             topLevelVariableDeclaration_semicolon,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.typeParameter) {
@@ -18422,12 +17507,14 @@
         "annotatedNode_metadata": annotatedNode_metadata,
         "typeParameter_bound": typeParameter_bound,
         "typeParameter_extendsKeyword": typeParameter_extendsKeyword,
-        "typeParameter_name": typeParameter_name,
         "typeParameter_defaultType": typeParameter_defaultType,
+        "nameOffset": nameOffset,
         "codeLength": codeLength,
         "codeOffset": codeOffset,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.switchCase) {
@@ -18437,8 +17524,10 @@
         "switchMember_keyword": switchMember_keyword,
         "switchMember_colon": switchMember_colon,
         "switchMember_labels": switchMember_labels,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.switchDefault) {
@@ -18447,8 +17536,10 @@
         "switchMember_keyword": switchMember_keyword,
         "switchMember_colon": switchMember_colon,
         "switchMember_labels": switchMember_labels,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.annotation) {
@@ -18460,8 +17551,10 @@
         "annotation_elementType": annotation_elementType,
         "annotation_name": annotation_name,
         "annotation_period": annotation_period,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.asExpression) {
@@ -18470,8 +17563,10 @@
         "asExpression_asOperator": asExpression_asOperator,
         "asExpression_type": asExpression_type,
         "expression_type": expression_type,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.assertInitializer) {
@@ -18483,8 +17578,10 @@
         "assertInitializer_comma": assertInitializer_comma,
         "assertInitializer_rightParenthesis":
             assertInitializer_rightParenthesis,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.assertStatement) {
@@ -18496,8 +17593,10 @@
         "assertStatement_comma": assertStatement_comma,
         "assertStatement_rightParenthesis": assertStatement_rightParenthesis,
         "assertStatement_semicolon": assertStatement_semicolon,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.assignmentExpression) {
@@ -18509,8 +17608,10 @@
         "assignmentExpression_elementType": assignmentExpression_elementType,
         "assignmentExpression_operator": assignmentExpression_operator,
         "expression_type": expression_type,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.awaitExpression) {
@@ -18518,8 +17619,10 @@
         "awaitExpression_expression": awaitExpression_expression,
         "awaitExpression_awaitKeyword": awaitExpression_awaitKeyword,
         "expression_type": expression_type,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.blockFunctionBody) {
@@ -18527,8 +17630,10 @@
         "blockFunctionBody_block": blockFunctionBody_block,
         "blockFunctionBody_keyword": blockFunctionBody_keyword,
         "blockFunctionBody_star": blockFunctionBody_star,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.breakStatement) {
@@ -18536,8 +17641,10 @@
         "breakStatement_label": breakStatement_label,
         "breakStatement_breakKeyword": breakStatement_breakKeyword,
         "breakStatement_semicolon": breakStatement_semicolon,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.catchClause) {
@@ -18551,16 +17658,20 @@
         "catchClause_onKeyword": catchClause_onKeyword,
         "catchClause_rightParenthesis": catchClause_rightParenthesis,
         "catchClause_stackTraceParameter": catchClause_stackTraceParameter,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.commentReference) {
       return {
         "commentReference_identifier": commentReference_identifier,
         "commentReference_newKeyword": commentReference_newKeyword,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.conditionalExpression) {
@@ -18573,8 +17684,10 @@
             conditionalExpression_thenExpression,
         "conditionalExpression_question": conditionalExpression_question,
         "expression_type": expression_type,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.configuration) {
@@ -18586,8 +17699,10 @@
         "configuration_uri": configuration_uri,
         "configuration_leftParenthesis": configuration_leftParenthesis,
         "configuration_equalToken": configuration_equalToken,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.constructorFieldInitializer) {
@@ -18602,8 +17717,10 @@
             constructorFieldInitializer_thisKeyword,
         "constructorFieldInitializer_period":
             constructorFieldInitializer_period,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.constructorName) {
@@ -18613,8 +17730,10 @@
         "constructorName_type": constructorName_type,
         "constructorName_elementType": constructorName_elementType,
         "constructorName_period": constructorName_period,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.continueStatement) {
@@ -18622,8 +17741,10 @@
         "continueStatement_label": continueStatement_label,
         "continueStatement_continueKeyword": continueStatement_continueKeyword,
         "continueStatement_semicolon": continueStatement_semicolon,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.defaultFormalParameter) {
@@ -18635,8 +17756,10 @@
         "codeLength": codeLength,
         "codeOffset": codeOffset,
         "defaultFormalParameter_kind": defaultFormalParameter_kind,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.doStatement) {
@@ -18648,8 +17771,10 @@
         "doStatement_rightParenthesis": doStatement_rightParenthesis,
         "doStatement_semicolon": doStatement_semicolon,
         "doStatement_whileKeyword": doStatement_whileKeyword,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.expressionFunctionBody) {
@@ -18658,24 +17783,30 @@
         "expressionFunctionBody_arrow": expressionFunctionBody_arrow,
         "expressionFunctionBody_semicolon": expressionFunctionBody_semicolon,
         "expressionFunctionBody_keyword": expressionFunctionBody_keyword,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.expressionStatement) {
       return {
         "expressionStatement_expression": expressionStatement_expression,
         "expressionStatement_semicolon": expressionStatement_semicolon,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.extendsClause) {
       return {
         "extendsClause_superclass": extendsClause_superclass,
         "extendsClause_extendsKeyword": extendsClause_extendsKeyword,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.forEachPartsWithDeclaration) {
@@ -18684,8 +17815,10 @@
         "forEachParts_inKeyword": forEachParts_inKeyword,
         "forEachPartsWithDeclaration_loopVariable":
             forEachPartsWithDeclaration_loopVariable,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.forEachPartsWithIdentifier) {
@@ -18694,8 +17827,10 @@
         "forEachParts_inKeyword": forEachParts_inKeyword,
         "forEachPartsWithIdentifier_identifier":
             forEachPartsWithIdentifier_identifier,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.forElement) {
@@ -18706,8 +17841,10 @@
         "forMixin_leftParenthesis": forMixin_leftParenthesis,
         "forMixin_forKeyword": forMixin_forKeyword,
         "forMixin_rightParenthesis": forMixin_rightParenthesis,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.forStatement) {
@@ -18718,8 +17855,10 @@
         "forMixin_leftParenthesis": forMixin_leftParenthesis,
         "forMixin_forKeyword": forMixin_forKeyword,
         "forMixin_rightParenthesis": forMixin_rightParenthesis,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.forPartsWithDeclarations) {
@@ -18730,8 +17869,10 @@
             forPartsWithDeclarations_variables,
         "forParts_rightSeparator": forParts_rightSeparator,
         "forParts_updaters": forParts_updaters,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.forPartsWithExpression) {
@@ -18742,16 +17883,20 @@
             forPartsWithExpression_initialization,
         "forParts_rightSeparator": forParts_rightSeparator,
         "forParts_updaters": forParts_updaters,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.functionDeclarationStatement) {
       return {
         "functionDeclarationStatement_functionDeclaration":
             functionDeclarationStatement_functionDeclaration,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.ifElement) {
@@ -18763,8 +17908,10 @@
         "ifMixin_ifKeyword": ifMixin_ifKeyword,
         "ifMixin_rightParenthesis": ifMixin_rightParenthesis,
         "ifElement_elseElement": ifElement_elseElement,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.ifStatement) {
@@ -18776,8 +17923,10 @@
         "ifStatement_thenStatement": ifStatement_thenStatement,
         "ifMixin_ifKeyword": ifMixin_ifKeyword,
         "ifMixin_rightParenthesis": ifMixin_rightParenthesis,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.indexExpression) {
@@ -18790,23 +17939,25 @@
         "indexExpression_period": indexExpression_period,
         "indexExpression_rightBracket": indexExpression_rightBracket,
         "expression_type": expression_type,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.instanceCreationExpression) {
       return {
         "instanceCreationExpression_arguments":
             instanceCreationExpression_arguments,
-        "instanceCreationExpression_keyword":
-            instanceCreationExpression_keyword,
         "instanceCreationExpression_constructorName":
             instanceCreationExpression_constructorName,
         "instanceCreationExpression_typeArguments":
             instanceCreationExpression_typeArguments,
         "expression_type": expression_type,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.interpolationExpression) {
@@ -18817,8 +17968,10 @@
             interpolationExpression_leftBracket,
         "interpolationExpression_rightBracket":
             interpolationExpression_rightBracket,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.isExpression) {
@@ -18827,17 +17980,20 @@
         "isExpression_isOperator": isExpression_isOperator,
         "isExpression_type": isExpression_type,
         "isExpression_notOperator": isExpression_notOperator,
-        "expression_type": expression_type,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.label) {
       return {
         "label_label": label_label,
         "label_colon": label_colon,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.mapLiteralEntry) {
@@ -18845,25 +18001,30 @@
         "mapLiteralEntry_key": mapLiteralEntry_key,
         "mapLiteralEntry_separator": mapLiteralEntry_separator,
         "mapLiteralEntry_value": mapLiteralEntry_value,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.namedExpression) {
       return {
         "namedExpression_expression": namedExpression_expression,
         "namedExpression_name": namedExpression_name,
-        "expression_type": expression_type,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.nativeClause) {
       return {
         "nativeClause_name": nativeClause_name,
         "nativeClause_nativeKeyword": nativeClause_nativeKeyword,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.nativeFunctionBody) {
@@ -18871,8 +18032,10 @@
         "nativeFunctionBody_stringLiteral": nativeFunctionBody_stringLiteral,
         "nativeFunctionBody_nativeKeyword": nativeFunctionBody_nativeKeyword,
         "nativeFunctionBody_semicolon": nativeFunctionBody_semicolon,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.parenthesizedExpression) {
@@ -18884,8 +18047,10 @@
         "parenthesizedExpression_rightParenthesis":
             parenthesizedExpression_rightParenthesis,
         "expression_type": expression_type,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.postfixExpression) {
@@ -18895,8 +18060,10 @@
         "postfixExpression_elementType": postfixExpression_elementType,
         "postfixExpression_operator": postfixExpression_operator,
         "expression_type": expression_type,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.prefixedIdentifier) {
@@ -18905,8 +18072,10 @@
         "prefixedIdentifier_period": prefixedIdentifier_period,
         "prefixedIdentifier_prefix": prefixedIdentifier_prefix,
         "expression_type": expression_type,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.prefixExpression) {
@@ -18916,8 +18085,10 @@
         "prefixExpression_elementType": prefixExpression_elementType,
         "prefixExpression_operator": prefixExpression_operator,
         "expression_type": expression_type,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.propertyAccess) {
@@ -18926,8 +18097,10 @@
         "propertyAccess_operator": propertyAccess_operator,
         "propertyAccess_target": propertyAccess_target,
         "expression_type": expression_type,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.redirectingConstructorInvocation) {
@@ -18944,8 +18117,10 @@
             redirectingConstructorInvocation_elementType,
         "redirectingConstructorInvocation_period":
             redirectingConstructorInvocation_period,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.returnStatement) {
@@ -18953,16 +18128,20 @@
         "returnStatement_expression": returnStatement_expression,
         "returnStatement_returnKeyword": returnStatement_returnKeyword,
         "returnStatement_semicolon": returnStatement_semicolon,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.spreadElement) {
       return {
         "spreadElement_expression": spreadElement_expression,
-        "spreadElement_spreadOperator": spreadElement_spreadOperator,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
+        "spreadElement_spreadOperator2": spreadElement_spreadOperator2,
       };
     }
     if (kind == idl.LinkedNodeKind.superConstructorInvocation) {
@@ -18978,8 +18157,10 @@
         "superConstructorInvocation_elementType":
             superConstructorInvocation_elementType,
         "superConstructorInvocation_period": superConstructorInvocation_period,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.throwExpression) {
@@ -18987,8 +18168,10 @@
         "throwExpression_expression": throwExpression_expression,
         "throwExpression_throwKeyword": throwExpression_throwKeyword,
         "expression_type": expression_type,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.typeName) {
@@ -18997,8 +18180,10 @@
         "typeName_question": typeName_question,
         "typeName_typeArguments": typeName_typeArguments,
         "typeName_type": typeName_type,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.variableDeclarationStatement) {
@@ -19007,8 +18192,10 @@
             variableDeclarationStatement_variables,
         "variableDeclarationStatement_semicolon":
             variableDeclarationStatement_semicolon,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.whileStatement) {
@@ -19018,8 +18205,10 @@
         "whileStatement_condition": whileStatement_condition,
         "whileStatement_whileKeyword": whileStatement_whileKeyword,
         "whileStatement_rightParenthesis": whileStatement_rightParenthesis,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.yieldStatement) {
@@ -19028,125 +18217,166 @@
         "yieldStatement_yieldKeyword": yieldStatement_yieldKeyword,
         "yieldStatement_semicolon": yieldStatement_semicolon,
         "yieldStatement_star": yieldStatement_star,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
-      };
-    }
-    if (kind == idl.LinkedNodeKind.booleanLiteral) {
-      return {
-        "booleanLiteral_literal": booleanLiteral_literal,
-        "booleanLiteral_value": booleanLiteral_value,
-        "expression_type": expression_type,
-        "isSynthetic": isSynthetic,
-        "kind": kind,
-      };
-    }
-    if (kind == idl.LinkedNodeKind.doubleLiteral) {
-      return {
-        "doubleLiteral_literal": doubleLiteral_literal,
-        "doubleLiteral_value": doubleLiteral_value,
-        "expression_type": expression_type,
-        "isSynthetic": isSynthetic,
-        "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.emptyFunctionBody) {
       return {
         "emptyFunctionBody_semicolon": emptyFunctionBody_semicolon,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.emptyStatement) {
       return {
         "emptyStatement_semicolon": emptyStatement_semicolon,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
-      };
-    }
-    if (kind == idl.LinkedNodeKind.integerLiteral) {
-      return {
-        "integerLiteral_literal": integerLiteral_literal,
-        "integerLiteral_value": integerLiteral_value,
-        "expression_type": expression_type,
-        "isSynthetic": isSynthetic,
-        "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.interpolationString) {
       return {
         "interpolationString_token": interpolationString_token,
+        "flags": flags,
         "interpolationString_value": interpolationString_value,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.nullLiteral) {
       return {
         "nullLiteral_literal": nullLiteral_literal,
         "expression_type": expression_type,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.rethrowExpression) {
       return {
         "rethrowExpression_rethrowKeyword": rethrowExpression_rethrowKeyword,
         "expression_type": expression_type,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.scriptTag) {
       return {
         "scriptTag_scriptTag": scriptTag_scriptTag,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.simpleIdentifier) {
       return {
         "simpleIdentifier_element": simpleIdentifier_element,
         "simpleIdentifier_elementType": simpleIdentifier_elementType,
-        "simpleIdentifier_token": simpleIdentifier_token,
         "simpleIdentifier_isDeclaration": simpleIdentifier_isDeclaration,
         "expression_type": expression_type,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
-      };
-    }
-    if (kind == idl.LinkedNodeKind.simpleStringLiteral) {
-      return {
-        "simpleStringLiteral_token": simpleStringLiteral_token,
-        "expression_type": expression_type,
-        "isSynthetic": isSynthetic,
-        "kind": kind,
-        "simpleStringLiteral_value": simpleStringLiteral_value,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.superExpression) {
       return {
         "superExpression_superKeyword": superExpression_superKeyword,
         "expression_type": expression_type,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.symbolLiteral) {
       return {
         "symbolLiteral_poundSign": symbolLiteral_poundSign,
-        "symbolLiteral_components": symbolLiteral_components,
+        "names": names,
         "expression_type": expression_type,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
       };
     }
     if (kind == idl.LinkedNodeKind.thisExpression) {
       return {
         "thisExpression_thisKeyword": thisExpression_thisKeyword,
         "expression_type": expression_type,
+        "flags": flags,
         "isSynthetic": isSynthetic,
         "kind": kind,
+        "name": name,
+      };
+    }
+    if (kind == idl.LinkedNodeKind.integerLiteral) {
+      return {
+        "integerLiteral_value": integerLiteral_value,
+        "flags": flags,
+        "isSynthetic": isSynthetic,
+        "kind": kind,
+        "name": name,
+      };
+    }
+    if (kind == idl.LinkedNodeKind.hideCombinator) {
+      return {
+        "combinator_keyword": combinator_keyword,
+        "names": names,
+        "flags": flags,
+        "isSynthetic": isSynthetic,
+        "kind": kind,
+        "name": name,
+      };
+    }
+    if (kind == idl.LinkedNodeKind.showCombinator) {
+      return {
+        "combinator_keyword": combinator_keyword,
+        "names": names,
+        "flags": flags,
+        "isSynthetic": isSynthetic,
+        "kind": kind,
+        "name": name,
+      };
+    }
+    if (kind == idl.LinkedNodeKind.booleanLiteral) {
+      return {
+        "booleanLiteral_value": booleanLiteral_value,
+        "flags": flags,
+        "isSynthetic": isSynthetic,
+        "kind": kind,
+        "name": name,
+      };
+    }
+    if (kind == idl.LinkedNodeKind.doubleLiteral) {
+      return {
+        "doubleLiteral_value": doubleLiteral_value,
+        "flags": flags,
+        "isSynthetic": isSynthetic,
+        "kind": kind,
+        "name": name,
+      };
+    }
+    if (kind == idl.LinkedNodeKind.simpleStringLiteral) {
+      return {
+        "flags": flags,
+        "isSynthetic": isSynthetic,
+        "kind": kind,
+        "name": name,
+        "simpleStringLiteral_value": simpleStringLiteral_value,
       };
     }
     throw StateError("Unexpected $kind");
diff --git a/pkg/analyzer/lib/src/summary/format.fbs b/pkg/analyzer/lib/src/summary/format.fbs
index b124216..f59aec6 100644
--- a/pkg/analyzer/lib/src/summary/format.fbs
+++ b/pkg/analyzer/lib/src/summary/format.fbs
@@ -1910,6 +1910,8 @@
 
   variantField_19:uint (id: 19);
 
+  variantField_28:UnlinkedTokenType (id: 28);
+
   variantField_27:bool (id: 27);
 
   variantField_9:LinkedNode (id: 9);
@@ -1924,7 +1926,7 @@
 
   variantField_33:uint (id: 33);
 
-  variantField_28:[uint] (id: 28);
+  variantField_36:[string] (id: 36);
 
   variantField_29:LinkedNodeCommentType (id: 29);
 
@@ -1940,6 +1942,10 @@
 
   variantField_25:LinkedNodeType (id: 25);
 
+  flags:uint (id: 39);
+
+  variantField_41:string (id: 41);
+
   variantField_30:string (id: 30);
 
   variantField_14:LinkedNode (id: 14);
@@ -1948,12 +1954,14 @@
 
   kind:LinkedNodeKind (id: 0);
 
-  variantField_36:[string] (id: 36);
+  name:string (id: 38);
 
   variantField_20:string (id: 20);
 
   variantField_31:bool (id: 31);
 
+  variantField_40:UnlinkedTokenType (id: 40);
+
   variantField_35:TopLevelInferenceError (id: 35);
 
   variantField_22:string (id: 22);
diff --git a/pkg/analyzer/lib/src/summary/idl.dart b/pkg/analyzer/lib/src/summary/idl.dart
index 9e938ec..2cd456d 100644
--- a/pkg/analyzer/lib/src/summary/idl.dart
+++ b/pkg/analyzer/lib/src/summary/idl.dart
@@ -983,8 +983,8 @@
   @VariantId(6, variant: LinkedNodeKind.binaryExpression)
   LinkedNode get binaryExpression_leftOperand;
 
-  @VariantId(16, variant: LinkedNodeKind.binaryExpression)
-  int get binaryExpression_operator;
+  @VariantId(28, variant: LinkedNodeKind.binaryExpression)
+  UnlinkedTokenType get binaryExpression_operator;
 
   @VariantId(7, variant: LinkedNodeKind.binaryExpression)
   LinkedNode get binaryExpression_rightOperand;
@@ -1007,9 +1007,6 @@
   @VariantId(16, variant: LinkedNodeKind.blockFunctionBody)
   int get blockFunctionBody_star;
 
-  @VariantId(15, variant: LinkedNodeKind.booleanLiteral)
-  int get booleanLiteral_literal;
-
   @VariantId(27, variant: LinkedNodeKind.booleanLiteral)
   bool get booleanLiteral_value;
 
@@ -1055,12 +1052,6 @@
   @VariantId(9, variant: LinkedNodeKind.catchClause)
   LinkedNode get catchClause_stackTraceParameter;
 
-  @VariantId(15, variant: LinkedNodeKind.classDeclaration)
-  int get classDeclaration_abstractKeyword;
-
-  @VariantId(16, variant: LinkedNodeKind.classDeclaration)
-  int get classDeclaration_classKeyword;
-
   @VariantId(6, variant: LinkedNodeKind.classDeclaration)
   LinkedNode get classDeclaration_extendsClause;
 
@@ -1103,12 +1094,6 @@
   ])
   LinkedNode get classOrMixinDeclaration_typeParameters;
 
-  @VariantId(15, variant: LinkedNodeKind.classTypeAlias)
-  int get classTypeAlias_abstractKeyword;
-
-  @VariantId(16, variant: LinkedNodeKind.classTypeAlias)
-  int get classTypeAlias_equals;
-
   @VariantId(9, variant: LinkedNodeKind.classTypeAlias)
   LinkedNode get classTypeAlias_implementsClause;
 
@@ -1170,8 +1155,8 @@
   @VariantId(2, variant: LinkedNodeKind.comment)
   List<LinkedNode> get comment_references;
 
-  @VariantId(28, variant: LinkedNodeKind.comment)
-  List<int> get comment_tokens;
+  @VariantId(36, variant: LinkedNodeKind.comment)
+  List<String> get comment_tokens;
 
   @VariantId(29, variant: LinkedNodeKind.comment)
   LinkedNodeCommentType get comment_type;
@@ -1236,21 +1221,9 @@
   @VariantId(6, variant: LinkedNodeKind.constructorDeclaration)
   LinkedNode get constructorDeclaration_body;
 
-  @VariantId(15, variant: LinkedNodeKind.constructorDeclaration)
-  int get constructorDeclaration_constKeyword;
-
-  @VariantId(16, variant: LinkedNodeKind.constructorDeclaration)
-  int get constructorDeclaration_externalKeyword;
-
-  @VariantId(17, variant: LinkedNodeKind.constructorDeclaration)
-  int get constructorDeclaration_factoryKeyword;
-
   @VariantId(2, variant: LinkedNodeKind.constructorDeclaration)
   List<LinkedNode> get constructorDeclaration_initializers;
 
-  @VariantId(7, variant: LinkedNodeKind.constructorDeclaration)
-  LinkedNode get constructorDeclaration_name;
-
   @VariantId(8, variant: LinkedNodeKind.constructorDeclaration)
   LinkedNode get constructorDeclaration_parameters;
 
@@ -1368,9 +1341,6 @@
   @VariantId(2, variant: LinkedNodeKind.dottedName)
   List<LinkedNode> get dottedName_components;
 
-  @VariantId(15, variant: LinkedNodeKind.doubleLiteral)
-  int get doubleLiteral_literal;
-
   @VariantId(21, variant: LinkedNodeKind.doubleLiteral)
   double get doubleLiteral_value;
 
@@ -1380,21 +1350,9 @@
   @VariantId(15, variant: LinkedNodeKind.emptyStatement)
   int get emptyStatement_semicolon;
 
-  @VariantId(6, variant: LinkedNodeKind.enumConstantDeclaration)
-  LinkedNode get enumConstantDeclaration_name;
-
   @VariantId(2, variant: LinkedNodeKind.enumDeclaration)
   List<LinkedNode> get enumDeclaration_constants;
 
-  @VariantId(15, variant: LinkedNodeKind.enumDeclaration)
-  int get enumDeclaration_enumKeyword;
-
-  @VariantId(16, variant: LinkedNodeKind.enumDeclaration)
-  int get enumDeclaration_leftBracket;
-
-  @VariantId(17, variant: LinkedNodeKind.enumDeclaration)
-  int get enumDeclaration_rightBracket;
-
   @VariantId(27, variantList: [
     LinkedNodeKind.constructorDeclaration,
     LinkedNodeKind.functionExpression,
@@ -1410,23 +1368,17 @@
   bool get executable_isGenerator;
 
   @VariantId(25, variantList: [
-    LinkedNodeKind.adjacentStrings,
     LinkedNodeKind.assignmentExpression,
     LinkedNodeKind.asExpression,
     LinkedNodeKind.awaitExpression,
     LinkedNodeKind.binaryExpression,
-    LinkedNodeKind.booleanLiteral,
     LinkedNodeKind.cascadeExpression,
     LinkedNodeKind.conditionalExpression,
-    LinkedNodeKind.doubleLiteral,
     LinkedNodeKind.functionExpressionInvocation,
     LinkedNodeKind.indexExpression,
     LinkedNodeKind.instanceCreationExpression,
-    LinkedNodeKind.integerLiteral,
-    LinkedNodeKind.isExpression,
     LinkedNodeKind.listLiteral,
     LinkedNodeKind.methodInvocation,
-    LinkedNodeKind.namedExpression,
     LinkedNodeKind.nullLiteral,
     LinkedNodeKind.parenthesizedExpression,
     LinkedNodeKind.prefixExpression,
@@ -1436,8 +1388,6 @@
     LinkedNodeKind.rethrowExpression,
     LinkedNodeKind.setOrMapLiteral,
     LinkedNodeKind.simpleIdentifier,
-    LinkedNodeKind.simpleStringLiteral,
-    LinkedNodeKind.stringInterpolation,
     LinkedNodeKind.superExpression,
     LinkedNodeKind.symbolLiteral,
     LinkedNodeKind.thisExpression,
@@ -1469,27 +1419,15 @@
   @VariantId(6, variant: LinkedNodeKind.extendsClause)
   LinkedNode get extendsClause_superclass;
 
-  @VariantId(15, variant: LinkedNodeKind.fieldDeclaration)
-  int get fieldDeclaration_covariantKeyword;
-
   @VariantId(6, variant: LinkedNodeKind.fieldDeclaration)
   LinkedNode get fieldDeclaration_fields;
 
   @VariantId(16, variant: LinkedNodeKind.fieldDeclaration)
   int get fieldDeclaration_semicolon;
 
-  @VariantId(17, variant: LinkedNodeKind.fieldDeclaration)
-  int get fieldDeclaration_staticKeyword;
-
   @VariantId(8, variant: LinkedNodeKind.fieldFormalParameter)
   LinkedNode get fieldFormalParameter_formalParameters;
 
-  @VariantId(15, variant: LinkedNodeKind.fieldFormalParameter)
-  int get fieldFormalParameter_keyword;
-
-  @VariantId(16, variant: LinkedNodeKind.fieldFormalParameter)
-  int get fieldFormalParameter_period;
-
   @VariantId(17, variant: LinkedNodeKind.fieldFormalParameter)
   int get fieldFormalParameter_thisKeyword;
 
@@ -1499,6 +1437,9 @@
   @VariantId(7, variant: LinkedNodeKind.fieldFormalParameter)
   LinkedNode get fieldFormalParameter_typeParameters;
 
+  @Id(39)
+  int get flags;
+
   @VariantId(15, variantList: [
     LinkedNodeKind.forEachPartsWithDeclaration,
     LinkedNodeKind.forEachPartsWithIdentifier,
@@ -1598,15 +1539,9 @@
   @VariantId(7, variant: LinkedNodeKind.forStatement)
   LinkedNode get forStatement_body;
 
-  @VariantId(15, variant: LinkedNodeKind.functionDeclaration)
-  int get functionDeclaration_externalKeyword;
-
   @VariantId(6, variant: LinkedNodeKind.functionDeclaration)
   LinkedNode get functionDeclaration_functionExpression;
 
-  @VariantId(16, variant: LinkedNodeKind.functionDeclaration)
-  int get functionDeclaration_propertyKeyword;
-
   @VariantId(7, variant: LinkedNodeKind.functionDeclaration)
   LinkedNode get functionDeclaration_returnType;
 
@@ -1664,18 +1599,12 @@
   @VariantId(6, variant: LinkedNodeKind.genericFunctionType)
   LinkedNode get genericFunctionType_typeParameters;
 
-  @VariantId(16, variant: LinkedNodeKind.genericTypeAlias)
-  int get genericTypeAlias_equals;
-
   @VariantId(7, variant: LinkedNodeKind.genericTypeAlias)
   LinkedNode get genericTypeAlias_functionType;
 
   @VariantId(6, variant: LinkedNodeKind.genericTypeAlias)
   LinkedNode get genericTypeAlias_typeParameters;
 
-  @VariantId(2, variant: LinkedNodeKind.hideCombinator)
-  List<LinkedNode> get hideCombinator_hiddenNames;
-
   @VariantId(9, variant: LinkedNodeKind.ifElement)
   LinkedNode get ifElement_elseElement;
 
@@ -1725,13 +1654,10 @@
   List<LinkedNode> get implementsClause_interfaces;
 
   @VariantId(15, variant: LinkedNodeKind.importDirective)
-  int get importDirective_asKeyword;
+  int get importDirective_prefixOffset;
 
-  @VariantId(16, variant: LinkedNodeKind.importDirective)
-  int get importDirective_deferredKeyword;
-
-  @VariantId(6, variant: LinkedNodeKind.importDirective)
-  LinkedNode get importDirective_prefix;
+  @VariantId(41, variant: LinkedNodeKind.importDirective)
+  String get importDirective_prefix;
 
   @VariantId(15, variant: LinkedNodeKind.indexExpression)
   int get indexExpression_element;
@@ -1768,15 +1694,9 @@
   @VariantId(7, variant: LinkedNodeKind.instanceCreationExpression)
   LinkedNode get instanceCreationExpression_constructorName;
 
-  @VariantId(15, variant: LinkedNodeKind.instanceCreationExpression)
-  int get instanceCreationExpression_keyword;
-
   @VariantId(8, variant: LinkedNodeKind.instanceCreationExpression)
   LinkedNode get instanceCreationExpression_typeArguments;
 
-  @VariantId(15, variant: LinkedNodeKind.integerLiteral)
-  int get integerLiteral_literal;
-
   @VariantId(16, variant: LinkedNodeKind.integerLiteral)
   int get integerLiteral_value;
 
@@ -1873,24 +1793,12 @@
   @VariantId(6, variant: LinkedNodeKind.methodDeclaration)
   LinkedNode get methodDeclaration_body;
 
-  @VariantId(15, variant: LinkedNodeKind.methodDeclaration)
-  int get methodDeclaration_externalKeyword;
-
   @VariantId(7, variant: LinkedNodeKind.methodDeclaration)
   LinkedNode get methodDeclaration_formalParameters;
 
-  @VariantId(16, variant: LinkedNodeKind.methodDeclaration)
-  int get methodDeclaration_modifierKeyword;
-
-  @VariantId(10, variant: LinkedNodeKind.methodDeclaration)
-  LinkedNode get methodDeclaration_name;
-
   @VariantId(17, variant: LinkedNodeKind.methodDeclaration)
   int get methodDeclaration_operatorKeyword;
 
-  @VariantId(18, variant: LinkedNodeKind.methodDeclaration)
-  int get methodDeclaration_propertyKeyword;
-
   @VariantId(8, variant: LinkedNodeKind.methodDeclaration)
   LinkedNode get methodDeclaration_returnType;
 
@@ -1915,16 +1823,30 @@
   @VariantId(36, variant: LinkedNodeKind.mixinDeclaration)
   List<String> get mixinDeclaration_superInvokedNames;
 
-  @VariantId(14, variantList: [
+  @Id(38)
+  String get 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,
   ])
-  LinkedNode get namedCompilationUnitMember_name;
+  int get nameOffset;
 
   @VariantId(6, variant: LinkedNodeKind.namedExpression)
   LinkedNode get namedExpression_expression;
@@ -1932,6 +1854,13 @@
   @VariantId(7, variant: LinkedNodeKind.namedExpression)
   LinkedNode get namedExpression_name;
 
+  @VariantId(36, variantList: [
+    LinkedNodeKind.hideCombinator,
+    LinkedNodeKind.showCombinator,
+    LinkedNodeKind.symbolLiteral,
+  ])
+  List<String> get names;
+
   @VariantId(2, variantList: [
     LinkedNodeKind.exportDirective,
     LinkedNodeKind.importDirective,
@@ -1972,20 +1901,6 @@
   ])
   LinkedNode get normalFormalParameter_comment;
 
-  @VariantId(19, variantList: [
-    LinkedNodeKind.fieldFormalParameter,
-    LinkedNodeKind.functionTypedFormalParameter,
-    LinkedNodeKind.simpleFormalParameter,
-  ])
-  int get normalFormalParameter_covariantKeyword;
-
-  @VariantId(12, variantList: [
-    LinkedNodeKind.fieldFormalParameter,
-    LinkedNodeKind.functionTypedFormalParameter,
-    LinkedNodeKind.simpleFormalParameter,
-  ])
-  LinkedNode get normalFormalParameter_identifier;
-
   @VariantId(4, variantList: [
     LinkedNodeKind.fieldFormalParameter,
     LinkedNodeKind.functionTypedFormalParameter,
@@ -2057,8 +1972,8 @@
   @VariantId(6, variant: LinkedNodeKind.prefixExpression)
   LinkedNode get prefixExpression_operand;
 
-  @VariantId(16, variant: LinkedNodeKind.prefixExpression)
-  int get prefixExpression_operator;
+  @VariantId(28, variant: LinkedNodeKind.prefixExpression)
+  UnlinkedTokenType get prefixExpression_operator;
 
   @VariantId(15, variant: LinkedNodeKind.propertyAccess)
   int get propertyAccess_operator;
@@ -2117,12 +2032,6 @@
   @VariantId(16, variant: LinkedNodeKind.setOrMapLiteral)
   int get setOrMapLiteral_rightBracket;
 
-  @VariantId(2, variant: LinkedNodeKind.showCombinator)
-  List<LinkedNode> get showCombinator_shownNames;
-
-  @VariantId(15, variant: LinkedNodeKind.simpleFormalParameter)
-  int get simpleFormalParameter_keyword;
-
   @VariantId(6, variant: LinkedNodeKind.simpleFormalParameter)
   LinkedNode get simpleFormalParameter_type;
 
@@ -2135,12 +2044,6 @@
   @VariantId(27, variant: LinkedNodeKind.simpleIdentifier)
   bool get simpleIdentifier_isDeclaration;
 
-  @VariantId(16, variant: LinkedNodeKind.simpleIdentifier)
-  int get simpleIdentifier_token;
-
-  @VariantId(15, variant: LinkedNodeKind.simpleStringLiteral)
-  int get simpleStringLiteral_token;
-
   @VariantId(20, variant: LinkedNodeKind.simpleStringLiteral)
   String get simpleStringLiteral_value;
 
@@ -2156,8 +2059,8 @@
   @VariantId(6, variant: LinkedNodeKind.spreadElement)
   LinkedNode get spreadElement_expression;
 
-  @VariantId(15, variant: LinkedNodeKind.spreadElement)
-  int get spreadElement_spreadOperator;
+  @VariantId(40, variant: LinkedNodeKind.spreadElement)
+  UnlinkedTokenType get spreadElement_spreadOperator2;
 
   @VariantId(2, variant: LinkedNodeKind.stringInterpolation)
   List<LinkedNode> get stringInterpolation_elements;
@@ -2231,9 +2134,6 @@
   @VariantId(17, variant: LinkedNodeKind.switchStatement)
   int get switchStatement_switchKeyword;
 
-  @VariantId(28, variant: LinkedNodeKind.symbolLiteral)
-  List<int> get symbolLiteral_components;
-
   @VariantId(15, variant: LinkedNodeKind.symbolLiteral)
   int get symbolLiteral_poundSign;
 
@@ -2302,12 +2202,6 @@
   @VariantId(16, variant: LinkedNodeKind.typeArgumentList)
   int get typeArgumentList_rightBracket;
 
-  @VariantId(19, variantList: [
-    LinkedNodeKind.listLiteral,
-    LinkedNodeKind.setOrMapLiteral,
-  ])
-  int get typedLiteral_constKeyword;
-
   @VariantId(14, variantList: [
     LinkedNodeKind.listLiteral,
     LinkedNodeKind.setOrMapLiteral,
@@ -2335,9 +2229,6 @@
   @VariantId(15, variant: LinkedNodeKind.typeParameter)
   int get typeParameter_extendsKeyword;
 
-  @VariantId(7, variant: LinkedNodeKind.typeParameter)
-  LinkedNode get typeParameter_name;
-
   @VariantId(15, variant: LinkedNodeKind.typeParameterList)
   int get typeParameterList_leftBracket;
 
@@ -2377,15 +2268,6 @@
   @VariantId(6, variant: LinkedNodeKind.variableDeclaration)
   LinkedNode get variableDeclaration_initializer;
 
-  @VariantId(7, variant: LinkedNodeKind.variableDeclaration)
-  LinkedNode get variableDeclaration_name;
-
-  @VariantId(15, variant: LinkedNodeKind.variableDeclarationList)
-  int get variableDeclarationList_keyword;
-
-  @VariantId(16, variant: LinkedNodeKind.variableDeclarationList)
-  int get variableDeclarationList_lateKeyword;
-
   @VariantId(6, variant: LinkedNodeKind.variableDeclarationList)
   LinkedNode get variableDeclarationList_type;
 
diff --git a/pkg/analyzer/lib/src/summary2/ast_binary_flags.dart b/pkg/analyzer/lib/src/summary2/ast_binary_flags.dart
new file mode 100644
index 0000000..13d4f3f
--- /dev/null
+++ b/pkg/analyzer/lib/src/summary2/ast_binary_flags.dart
@@ -0,0 +1,138 @@
+// 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.
+
+class AstBinaryFlags {
+  static const _hasInitializer = 1 << 0;
+  static const _isAbstract = 1 << 1;
+  static const _isConst = 1 << 2;
+  static const _isCovariant = 1 << 3;
+  static const _isDeferred = 1 << 4;
+  static const _isExternal = 1 << 5;
+  static const _isFactory = 1 << 6;
+  static const _isFinal = 1 << 7;
+  static const _isGet = 1 << 8;
+  static const _isLate = 1 << 9;
+  static const _isNew = 1 << 10;
+  static const _isSet = 1 << 11;
+  static const _isStatic = 1 << 12;
+  static const _isVar = 1 << 13;
+
+  static int encode({
+    bool hasInitializer: false,
+    bool isAbstract: false,
+    bool isConst: false,
+    bool isCovariant: false,
+    bool isDeferred: false,
+    bool isExternal: false,
+    bool isFactory: false,
+    bool isFinal: false,
+    bool isGet: false,
+    bool isLate: false,
+    bool isNew: false,
+    bool isSet: false,
+    bool isStatic: false,
+    bool isVar: false,
+  }) {
+    var result = 0;
+    if (hasInitializer) {
+      result |= _hasInitializer;
+    }
+    if (isAbstract) {
+      result |= _isAbstract;
+    }
+    if (isCovariant) {
+      result |= _isCovariant;
+    }
+    if (isDeferred) {
+      result |= _isDeferred;
+    }
+    if (isConst) {
+      result |= _isConst;
+    }
+    if (isExternal) {
+      result |= _isExternal;
+    }
+    if (isFactory) {
+      result |= _isFactory;
+    }
+    if (isFinal) {
+      result |= _isFinal;
+    }
+    if (isGet) {
+      result |= _isGet;
+    }
+    if (isLate) {
+      result |= _isLate;
+    }
+    if (isNew) {
+      result |= _isNew;
+    }
+    if (isSet) {
+      result |= _isSet;
+    }
+    if (isStatic) {
+      result |= _isStatic;
+    }
+    if (isVar) {
+      result |= _isVar;
+    }
+    return result;
+  }
+
+  static bool hasInitializer(int flags) {
+    return (flags & _hasInitializer) != 0;
+  }
+
+  static bool isAbstract(int flags) {
+    return (flags & _isAbstract) != 0;
+  }
+
+  static bool isConst(int flags) {
+    return (flags & _isConst) != 0;
+  }
+
+  static bool isCovariant(int flags) {
+    return (flags & _isCovariant) != 0;
+  }
+
+  static bool isDeferred(int flags) {
+    return (flags & _isDeferred) != 0;
+  }
+
+  static bool isExternal(int flags) {
+    return (flags & _isExternal) != 0;
+  }
+
+  static bool isFactory(int flags) {
+    return (flags & _isFactory) != 0;
+  }
+
+  static bool isFinal(int flags) {
+    return (flags & _isFinal) != 0;
+  }
+
+  static bool isGet(int flags) {
+    return (flags & _isGet) != 0;
+  }
+
+  static bool isLate(int flags) {
+    return (flags & _isLate) != 0;
+  }
+
+  static bool isNew(int flags) {
+    return (flags & _isNew) != 0;
+  }
+
+  static bool isSet(int flags) {
+    return (flags & _isSet) != 0;
+  }
+
+  static bool isStatic(int flags) {
+    return (flags & _isStatic) != 0;
+  }
+
+  static bool isVar(int flags) {
+    return (flags & _isVar) != 0;
+  }
+}
diff --git a/pkg/analyzer/lib/src/summary2/ast_binary_reader.dart b/pkg/analyzer/lib/src/summary2/ast_binary_reader.dart
index 4927499..a88687c 100644
--- a/pkg/analyzer/lib/src/summary2/ast_binary_reader.dart
+++ b/pkg/analyzer/lib/src/summary2/ast_binary_reader.dart
@@ -9,10 +9,22 @@
 import 'package:analyzer/dart/element/type.dart';
 import 'package:analyzer/src/dart/ast/ast.dart';
 import 'package:analyzer/src/dart/element/member.dart';
+import 'package:analyzer/src/generated/testing/ast_test_factory.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_flags.dart';
 import 'package:analyzer/src/summary2/lazy_ast.dart';
 import 'package:analyzer/src/summary2/linked_unit_context.dart';
+import 'package:analyzer/src/summary2/tokens_context.dart';
+
+var timerAstBinaryReader = Stopwatch();
+var timerAstBinaryReaderClass = Stopwatch();
+var timerAstBinaryReaderDirective = Stopwatch();
+var timerAstBinaryReaderFunctionBody = Stopwatch();
+var timerAstBinaryReaderFunctionDeclaration = Stopwatch();
+var timerAstBinaryReaderMixin = Stopwatch();
+var timerAstBinaryReaderTopLevelVar = Stopwatch();
 
 /// Deserializer of fully resolved ASTs from flat buffers.
 class AstBinaryReader {
@@ -23,21 +35,34 @@
 
   AstBinaryReader(this._unitContext);
 
+  InterfaceType get _boolType => _unitContext.typeProvider.boolType;
+
+  InterfaceType get _doubleType => _unitContext.typeProvider.doubleType;
+
+  InterfaceType get _intType => _unitContext.typeProvider.intType;
+
+  InterfaceType get _stringType => _unitContext.typeProvider.stringType;
+
   AstNode readNode(LinkedNode data) {
-    var node = _readNode(data);
-    if (node == null) return null;
-
-    if (!isLazy) {
-      _unitContext.tokensContext.linkTokens(node.beginToken, node.endToken);
+    timerAstBinaryReader.start();
+    try {
+      return _readNode(data);
+    } finally {
+      timerAstBinaryReader.stop();
     }
-
-    return node;
   }
 
   DartType readType(LinkedNodeType data) {
     return _readType(data);
   }
 
+  SimpleIdentifier _declaredIdentifier(LinkedNode data) {
+    return astFactory.simpleIdentifier(
+      TokenFactory.tokenFromString(data.name)..offset = data.nameOffset,
+      isDeclaration: true,
+    );
+  }
+
   Element _elementOfComponents(
     int rawElementIndex,
     LinkedNodeType definingTypeNode,
@@ -63,22 +88,14 @@
   }
 
   Token _getToken(int index) {
-    return _unitContext.tokensContext.tokenOfIndex(index);
-  }
-
-  List<Token> _getTokens(List<int> indexList) {
-    var result = List<Token>(indexList.length);
-    for (var i = 0; i < indexList.length; ++i) {
-      var index = indexList[i];
-      result[i] = _getToken(index);
-    }
-    return result;
+    // TODO(scheglov) Remove as much as possible uses.
+    return TokenFactory.tokenFromTypeAndString(TokenType.IDENTIFIER, '');
   }
 
   AdjacentStrings _read_adjacentStrings(LinkedNode data) {
     return astFactory.adjacentStrings(
       _readNodeList(data.adjacentStrings_strings),
-    )..staticType = _readType(data.expression_type);
+    )..staticType = _stringType;
   }
 
   Annotation _read_annotation(LinkedNode data) {
@@ -156,7 +173,11 @@
   BinaryExpression _read_binaryExpression(LinkedNode data) {
     return astFactory.binaryExpression(
       _readNode(data.binaryExpression_leftOperand),
-      _getToken(data.binaryExpression_operator),
+      TokenFactory.tokenFromType(
+        TokensContext.binaryToAstTokenType(
+          data.binaryExpression_operator,
+        ),
+      ),
       _readNode(data.binaryExpression_rightOperand),
     )
       ..staticElement = _elementOfComponents(
@@ -175,18 +196,21 @@
   }
 
   BlockFunctionBody _read_blockFunctionBody(LinkedNode data) {
-    return astFactory.blockFunctionBody(
-      _getToken(data.blockFunctionBody_keyword),
-      _getToken(data.blockFunctionBody_star),
-      _readNode(data.blockFunctionBody_block),
-    );
+    timerAstBinaryReaderFunctionBody.start();
+    try {
+      return astFactory.blockFunctionBody(
+        _getToken(data.blockFunctionBody_keyword),
+        _getToken(data.blockFunctionBody_star),
+        _readNode(data.blockFunctionBody_block),
+      );
+    } finally {
+      timerAstBinaryReaderFunctionBody.stop();
+    }
   }
 
   BooleanLiteral _read_booleanLiteral(LinkedNode data) {
-    return astFactory.booleanLiteral(
-      _getToken(data.booleanLiteral_literal),
-      data.booleanLiteral_value,
-    )..staticType = _readType(data.expression_type);
+    return AstTestFactory.booleanLiteral(data.booleanLiteral_value)
+      ..staticType = _boolType;
   }
 
   BreakStatement _read_breakStatement(LinkedNode data) {
@@ -219,45 +243,61 @@
   }
 
   ClassDeclaration _read_classDeclaration(LinkedNode data) {
-    var node = astFactory.classDeclaration(
-      _readNodeLazy(data.annotatedNode_comment),
-      _readNodeListLazy(data.annotatedNode_metadata),
-      _getToken(data.classDeclaration_abstractKeyword),
-      _getToken(data.classDeclaration_classKeyword),
-      _readNode(data.namedCompilationUnitMember_name),
-      _readNode(data.classOrMixinDeclaration_typeParameters),
-      _readNodeLazy(data.classDeclaration_extendsClause),
-      _readNodeLazy(data.classDeclaration_withClause),
-      _readNodeLazy(data.classOrMixinDeclaration_implementsClause),
-      _getToken(data.classOrMixinDeclaration_leftBracket),
-      _readNodeListLazy(data.classOrMixinDeclaration_members),
-      _getToken(data.classOrMixinDeclaration_rightBracket),
-    );
-    node.nativeClause = _readNodeLazy(data.classDeclaration_nativeClause);
-    LazyClassDeclaration.setData(node, data);
-    return node;
+    timerAstBinaryReaderClass.start();
+    try {
+      var node = astFactory.classDeclaration(
+        _readNodeLazy(data.annotatedNode_comment),
+        _readNodeListLazy(data.annotatedNode_metadata),
+        AstBinaryFlags.isAbstract(data.flags)
+            ? TokenFactory.tokenFromKeyword(Keyword.ABSTRACT)
+            : null,
+        TokenFactory.tokenFromKeyword(Keyword.CLASS),
+        _declaredIdentifier(data),
+        _readNode(data.classOrMixinDeclaration_typeParameters),
+        _readNodeLazy(data.classDeclaration_extendsClause),
+        _readNodeLazy(data.classDeclaration_withClause),
+        _readNodeLazy(data.classOrMixinDeclaration_implementsClause),
+        _getToken(data.classOrMixinDeclaration_leftBracket),
+        _readNodeListLazy(data.classOrMixinDeclaration_members),
+        _getToken(data.classOrMixinDeclaration_rightBracket),
+      );
+      node.nativeClause = _readNodeLazy(data.classDeclaration_nativeClause);
+      LazyClassDeclaration.setData(node, data);
+      return node;
+    } finally {
+      timerAstBinaryReaderClass.stop();
+    }
   }
 
   ClassTypeAlias _read_classTypeAlias(LinkedNode data) {
-    var node = astFactory.classTypeAlias(
-      _readNodeLazy(data.annotatedNode_comment),
-      _readNodeListLazy(data.annotatedNode_metadata),
-      _getToken(data.typeAlias_typedefKeyword),
-      _readNode(data.namedCompilationUnitMember_name),
-      _readNode(data.classTypeAlias_typeParameters),
-      _getToken(data.classTypeAlias_equals),
-      _getToken(data.classTypeAlias_abstractKeyword),
-      _readNodeLazy(data.classTypeAlias_superclass),
-      _readNodeLazy(data.classTypeAlias_withClause),
-      _readNodeLazy(data.classTypeAlias_implementsClause),
-      _getToken(data.typeAlias_semicolon),
-    );
-    LazyClassTypeAlias.setData(node, data);
-    return node;
+    timerAstBinaryReaderClass.start();
+    try {
+      var node = astFactory.classTypeAlias(
+        _readNodeLazy(data.annotatedNode_comment),
+        _readNodeListLazy(data.annotatedNode_metadata),
+        _getToken(data.typeAlias_typedefKeyword),
+        _declaredIdentifier(data),
+        _readNode(data.classTypeAlias_typeParameters),
+        TokenFactory.tokenFromType(TokenType.EQ),
+        AstBinaryFlags.isAbstract(data.flags)
+            ? TokenFactory.tokenFromKeyword(Keyword.ABSTRACT)
+            : null,
+        _readNodeLazy(data.classTypeAlias_superclass),
+        _readNodeLazy(data.classTypeAlias_withClause),
+        _readNodeLazy(data.classTypeAlias_implementsClause),
+        _getToken(data.typeAlias_semicolon),
+      );
+      LazyClassTypeAlias.setData(node, data);
+      return node;
+    } finally {
+      timerAstBinaryReaderClass.stop();
+    }
   }
 
   Comment _read_comment(LinkedNode data) {
-    var tokens = _getTokens(data.comment_tokens);
+    var tokens = data.comment_tokens
+        .map((lexeme) => TokenFactory.tokenFromString(lexeme))
+        .toList();
     switch (data.comment_type) {
       case LinkedNodeCommentType.block:
         return astFactory.endOfLineComment(
@@ -320,12 +360,18 @@
     var node = astFactory.constructorDeclaration(
       _readNodeLazy(data.annotatedNode_comment),
       _readNodeListLazy(data.annotatedNode_metadata),
-      _getToken(data.constructorDeclaration_externalKeyword),
-      _getToken(data.constructorDeclaration_constKeyword),
-      _getToken(data.constructorDeclaration_factoryKeyword),
+      AstBinaryFlags.isExternal(data.flags)
+          ? TokenFactory.tokenFromKeyword(Keyword.EXTERNAL)
+          : null,
+      AstBinaryFlags.isConst(data.flags)
+          ? TokenFactory.tokenFromKeyword(Keyword.CONST)
+          : null,
+      AstBinaryFlags.isFactory(data.flags)
+          ? TokenFactory.tokenFromKeyword(Keyword.FACTORY)
+          : null,
       _readNode(data.constructorDeclaration_returnType),
       _getToken(data.constructorDeclaration_period),
-      _readNode(data.constructorDeclaration_name),
+      _declaredIdentifier(data),
       _readNodeLazy(data.constructorDeclaration_parameters),
       _getToken(data.constructorDeclaration_separator),
       _readNodeListLazy(data.constructorDeclaration_initializers),
@@ -406,10 +452,8 @@
   }
 
   DoubleLiteral _read_doubleLiteral(LinkedNode data) {
-    return astFactory.doubleLiteral(
-      _getToken(data.doubleLiteral_literal),
-      data.doubleLiteral_value,
-    )..staticType = _readType(data.expression_type);
+    return AstTestFactory.doubleLiteral(data.doubleLiteral_value)
+      ..staticType = _doubleType;
   }
 
   EmptyFunctionBody _read_emptyFunctionBody(LinkedNode data) {
@@ -428,7 +472,7 @@
     var node = astFactory.enumConstantDeclaration(
       _readNodeLazy(data.annotatedNode_comment),
       _readNodeListLazy(data.annotatedNode_metadata),
-      _readNode(data.enumConstantDeclaration_name),
+      _declaredIdentifier(data),
     );
     LazyEnumConstantDeclaration.setData(node, data);
     return node;
@@ -438,37 +482,47 @@
     var node = astFactory.enumDeclaration(
       _readNodeLazy(data.annotatedNode_comment),
       _readNodeListLazy(data.annotatedNode_metadata),
-      _getToken(data.enumDeclaration_enumKeyword),
-      _readNode(data.namedCompilationUnitMember_name),
-      _getToken(data.enumDeclaration_leftBracket),
+      TokenFactory.tokenFromKeyword(Keyword.ENUM),
+      _declaredIdentifier(data),
+      TokenFactory.tokenFromType(TokenType.OPEN_CURLY_BRACKET),
       _readNodeListLazy(data.enumDeclaration_constants),
-      _getToken(data.enumDeclaration_rightBracket),
+      TokenFactory.tokenFromType(TokenType.CLOSE_CURLY_BRACKET),
     );
     LazyEnumDeclaration.setData(node, data);
     return node;
   }
 
   ExportDirective _read_exportDirective(LinkedNode data) {
-    var node = astFactory.exportDirective(
-      _readNode(data.annotatedNode_comment),
-      _readNodeListLazy(data.annotatedNode_metadata),
-      _getToken(data.directive_keyword),
-      _readNode(data.uriBasedDirective_uri),
-      _readNodeList(data.namespaceDirective_configurations),
-      _readNodeList(data.namespaceDirective_combinators),
-      _getToken(data.directive_semicolon),
-    );
-    LazyDirective.setData(node, data);
-    return node;
+    timerAstBinaryReaderDirective.start();
+    try {
+      var node = astFactory.exportDirective(
+        _readNode(data.annotatedNode_comment),
+        _readNodeListLazy(data.annotatedNode_metadata),
+        _getToken(data.directive_keyword),
+        _readNode(data.uriBasedDirective_uri),
+        _readNodeList(data.namespaceDirective_configurations),
+        _readNodeList(data.namespaceDirective_combinators),
+        _getToken(data.directive_semicolon),
+      );
+      LazyDirective.setData(node, data);
+      return node;
+    } finally {
+      timerAstBinaryReaderDirective.stop();
+    }
   }
 
   ExpressionFunctionBody _read_expressionFunctionBody(LinkedNode data) {
-    return astFactory.expressionFunctionBody(
-      _getToken(data.expressionFunctionBody_keyword),
-      _getToken(data.expressionFunctionBody_arrow),
-      _readNode(data.expressionFunctionBody_expression),
-      _getToken(data.expressionFunctionBody_semicolon),
-    );
+    timerAstBinaryReaderFunctionBody.start();
+    try {
+      return astFactory.expressionFunctionBody(
+        _getToken(data.expressionFunctionBody_keyword),
+        _getToken(data.expressionFunctionBody_arrow),
+        _readNode(data.expressionFunctionBody_expression),
+        _getToken(data.expressionFunctionBody_semicolon),
+      );
+    } finally {
+      timerAstBinaryReaderFunctionBody.stop();
+    }
   }
 
   ExpressionStatement _read_expressionStatement(LinkedNode data) {
@@ -488,11 +542,15 @@
   FieldDeclaration _read_fieldDeclaration(LinkedNode data) {
     var node = astFactory.fieldDeclaration2(
       comment: _readNodeLazy(data.annotatedNode_comment),
-      covariantKeyword: _getToken(data.fieldDeclaration_covariantKeyword),
+      covariantKeyword: AstBinaryFlags.isCovariant(data.flags)
+          ? TokenFactory.tokenFromKeyword(Keyword.COVARIANT)
+          : null,
       fieldList: _readNode(data.fieldDeclaration_fields),
       metadata: _readNodeListLazy(data.annotatedNode_metadata),
       semicolon: _getToken(data.fieldDeclaration_semicolon),
-      staticKeyword: _getToken(data.fieldDeclaration_staticKeyword),
+      staticKeyword: AstBinaryFlags.isStatic(data.flags)
+          ? TokenFactory.tokenFromKeyword(Keyword.STATIC)
+          : null,
     );
     LazyFieldDeclaration.setData(node, data);
     return node;
@@ -500,12 +558,20 @@
 
   FieldFormalParameter _read_fieldFormalParameter(LinkedNode data) {
     var node = astFactory.fieldFormalParameter2(
-      identifier: _readNode(data.normalFormalParameter_identifier),
-      period: _getToken(data.fieldFormalParameter_period),
+      identifier: _declaredIdentifier(data),
+      period: TokenFactory.tokenFromType(TokenType.PERIOD),
       thisKeyword: _getToken(data.fieldFormalParameter_thisKeyword),
-      covariantKeyword: _getToken(data.normalFormalParameter_covariantKeyword),
+      covariantKeyword: AstBinaryFlags.isCovariant(data.flags)
+          ? TokenFactory.tokenFromKeyword(Keyword.COVARIANT)
+          : null,
       typeParameters: _readNode(data.fieldFormalParameter_typeParameters),
-      keyword: _getToken(data.fieldFormalParameter_keyword),
+      keyword: AstBinaryFlags.isConst(data.flags)
+          ? TokenFactory.tokenFromKeyword(Keyword.CONST)
+          : AstBinaryFlags.isFinal(data.flags)
+              ? TokenFactory.tokenFromKeyword(Keyword.FINAL)
+              : AstBinaryFlags.isVar(data.flags)
+                  ? TokenFactory.tokenFromKeyword(Keyword.VAR)
+                  : null,
       metadata: _readNodeList(data.normalFormalParameter_metadata),
       comment: _readNode(data.normalFormalParameter_comment),
       type: _readNode(data.fieldFormalParameter_type),
@@ -586,17 +652,28 @@
   }
 
   FunctionDeclaration _read_functionDeclaration(LinkedNode data) {
-    var node = astFactory.functionDeclaration(
-      _readNodeLazy(data.annotatedNode_comment),
-      _readNodeListLazy(data.annotatedNode_metadata),
-      _getToken(data.functionDeclaration_externalKeyword),
-      _readNodeLazy(data.functionDeclaration_returnType),
-      _getToken(data.functionDeclaration_propertyKeyword),
-      _readNode(data.namedCompilationUnitMember_name),
-      _readNodeLazy(data.functionDeclaration_functionExpression),
-    );
-    LazyFunctionDeclaration.setData(node, data);
-    return node;
+    timerAstBinaryReaderFunctionDeclaration.start();
+    try {
+      var node = astFactory.functionDeclaration(
+        _readNodeLazy(data.annotatedNode_comment),
+        _readNodeListLazy(data.annotatedNode_metadata),
+        AstBinaryFlags.isExternal(data.flags)
+            ? TokenFactory.tokenFromKeyword(Keyword.EXTERNAL)
+            : null,
+        _readNodeLazy(data.functionDeclaration_returnType),
+        AstBinaryFlags.isGet(data.flags)
+            ? TokenFactory.tokenFromKeyword(Keyword.GET)
+            : AstBinaryFlags.isSet(data.flags)
+                ? TokenFactory.tokenFromKeyword(Keyword.SET)
+                : null,
+        _declaredIdentifier(data),
+        _readNodeLazy(data.functionDeclaration_functionExpression),
+      );
+      LazyFunctionDeclaration.setData(node, data);
+      return node;
+    } finally {
+      timerAstBinaryReaderFunctionDeclaration.stop();
+    }
   }
 
   FunctionDeclarationStatement _read_functionDeclarationStatement(
@@ -631,7 +708,7 @@
       _readNodeListLazy(data.annotatedNode_metadata),
       _getToken(data.typeAlias_typedefKeyword),
       _readNodeLazy(data.functionTypeAlias_returnType),
-      _readNode(data.namedCompilationUnitMember_name),
+      _declaredIdentifier(data),
       _readNode(data.functionTypeAlias_typeParameters),
       _readNodeLazy(data.functionTypeAlias_formalParameters),
       _getToken(data.typeAlias_semicolon),
@@ -648,8 +725,10 @@
       LinkedNode data) {
     var node = astFactory.functionTypedFormalParameter2(
       comment: _readNodeLazy(data.normalFormalParameter_comment),
-      covariantKeyword: _getToken(data.normalFormalParameter_covariantKeyword),
-      identifier: _readNode(data.normalFormalParameter_identifier),
+      covariantKeyword: AstBinaryFlags.isCovariant(data.flags)
+          ? TokenFactory.tokenFromKeyword(Keyword.COVARIANT)
+          : null,
+      identifier: _declaredIdentifier(data),
       metadata: _readNodeListLazy(data.normalFormalParameter_metadata),
       parameters: _readNodeLazy(
         data.functionTypedFormalParameter_formalParameters,
@@ -683,9 +762,9 @@
       _readNodeLazy(data.annotatedNode_comment),
       _readNodeListLazy(data.annotatedNode_metadata),
       _getToken(data.typeAlias_typedefKeyword),
-      _readNode(data.namedCompilationUnitMember_name),
+      _declaredIdentifier(data),
       _readNode(data.genericTypeAlias_typeParameters),
-      _getToken(data.genericTypeAlias_equals),
+      TokenFactory.tokenFromType(TokenType.EQ),
       _readNodeLazy(data.genericTypeAlias_functionType),
       _getToken(data.typeAlias_semicolon),
     );
@@ -700,7 +779,7 @@
   HideCombinator _read_hideCombinator(LinkedNode data) {
     return astFactory.hideCombinator(
       _getToken(data.combinator_keyword),
-      _readNodeList(data.hideCombinator_hiddenNames),
+      data.names.map((name) => AstTestFactory.identifier3(name)).toList(),
     );
   }
 
@@ -736,20 +815,35 @@
   }
 
   ImportDirective _read_importDirective(LinkedNode data) {
-    var node = astFactory.importDirective(
-      _readNode(data.annotatedNode_comment),
-      _readNodeListLazy(data.annotatedNode_metadata),
-      _getToken(data.directive_keyword),
-      _readNode(data.uriBasedDirective_uri),
-      _readNodeList(data.namespaceDirective_configurations),
-      _getToken(data.importDirective_deferredKeyword),
-      _getToken(data.importDirective_asKeyword),
-      _readNode(data.importDirective_prefix),
-      _readNodeList(data.namespaceDirective_combinators),
-      _getToken(data.directive_semicolon),
-    );
-    LazyDirective.setData(node, data);
-    return node;
+    timerAstBinaryReaderDirective.start();
+    try {
+      SimpleIdentifier prefix;
+      if (data.importDirective_prefix.isNotEmpty) {
+        prefix = astFactory.simpleIdentifier(
+          TokenFactory.tokenFromString(data.importDirective_prefix)
+            ..offset = data.importDirective_prefixOffset,
+        );
+      }
+
+      var node = astFactory.importDirective(
+        _readNode(data.annotatedNode_comment),
+        _readNodeListLazy(data.annotatedNode_metadata),
+        _getToken(data.directive_keyword),
+        _readNode(data.uriBasedDirective_uri),
+        _readNodeList(data.namespaceDirective_configurations),
+        AstBinaryFlags.isDeferred(data.flags)
+            ? TokenFactory.tokenFromKeyword(Keyword.DEFERRED)
+            : null,
+        TokenFactory.tokenFromKeyword(Keyword.AS),
+        prefix,
+        _readNodeList(data.namespaceDirective_combinators),
+        _getToken(data.directive_semicolon),
+      );
+      LazyDirective.setData(node, data);
+      return node;
+    } finally {
+      timerAstBinaryReaderDirective.stop();
+    }
   }
 
   IndexExpression _read_indexExpression(LinkedNode data) {
@@ -769,7 +863,11 @@
 
   InstanceCreationExpression _read_instanceCreationExpression(LinkedNode data) {
     var node = astFactory.instanceCreationExpression(
-      _getToken(data.instanceCreationExpression_keyword),
+      AstBinaryFlags.isConst(data.flags)
+          ? TokenFactory.tokenFromKeyword(Keyword.CONST)
+          : AstBinaryFlags.isNew(data.flags)
+              ? TokenFactory.tokenFromKeyword(Keyword.NEW)
+              : null,
       _readNode(data.instanceCreationExpression_constructorName),
       _readNode(data.instanceCreationExpression_arguments),
       typeArguments: _readNode(data.instanceCreationExpression_typeArguments),
@@ -780,10 +878,8 @@
   }
 
   IntegerLiteral _read_integerLiteral(LinkedNode data) {
-    return astFactory.integerLiteral(
-      _getToken(data.integerLiteral_literal),
-      data.integerLiteral_value,
-    )..staticType = _readType(data.expression_type);
+    return AstTestFactory.integer(data.integerLiteral_value)
+      ..staticType = _intType;
   }
 
   InterpolationExpression _read_interpolationExpression(LinkedNode data) {
@@ -807,7 +903,7 @@
       _getToken(data.isExpression_isOperator),
       _getToken(data.isExpression_notOperator),
       _readNode(data.isExpression_type),
-    )..staticType = _readType(data.expression_type);
+    )..staticType = _boolType;
   }
 
   Label _read_label(LinkedNode data) {
@@ -825,15 +921,20 @@
   }
 
   LibraryDirective _read_libraryDirective(LinkedNode data) {
-    var node = astFactory.libraryDirective(
-      _readNode(data.annotatedNode_comment),
-      _readNodeListLazy(data.annotatedNode_metadata),
-      _getToken(data.directive_keyword),
-      _readNode(data.libraryDirective_name),
-      _getToken(data.directive_semicolon),
-    );
-    LazyDirective.setData(node, data);
-    return node;
+    timerAstBinaryReaderDirective.start();
+    try {
+      var node = astFactory.libraryDirective(
+        _readNode(data.annotatedNode_comment),
+        _readNodeListLazy(data.annotatedNode_metadata),
+        _getToken(data.directive_keyword),
+        _readNode(data.libraryDirective_name),
+        _getToken(data.directive_semicolon),
+      );
+      LazyDirective.setData(node, data);
+      return node;
+    } finally {
+      timerAstBinaryReaderDirective.stop();
+    }
   }
 
   LibraryIdentifier _read_libraryIdentifier(LinkedNode data) {
@@ -844,7 +945,9 @@
 
   ListLiteral _read_listLiteral(LinkedNode data) {
     return astFactory.listLiteral(
-      _getToken(data.typedLiteral_constKeyword),
+      AstBinaryFlags.isConst(data.flags)
+          ? TokenFactory.tokenFromKeyword(Keyword.CONST)
+          : null,
       _readNode(data.typedLiteral_typeArguments),
       _getToken(data.listLiteral_leftBracket),
       _readNodeList(data.listLiteral_elements),
@@ -864,15 +967,25 @@
     var node = astFactory.methodDeclaration(
       _readNodeLazy(data.annotatedNode_comment),
       _readNodeListLazy(data.annotatedNode_metadata),
-      _getToken(data.methodDeclaration_externalKeyword),
-      _getToken(data.methodDeclaration_modifierKeyword),
+      AstBinaryFlags.isExternal(data.flags)
+          ? TokenFactory.tokenFromKeyword(Keyword.EXTERNAL)
+          : null,
+      AstBinaryFlags.isStatic(data.flags)
+          ? TokenFactory.tokenFromKeyword(Keyword.STATIC)
+          : null,
       _readNodeLazy(data.methodDeclaration_returnType),
-      _getToken(data.methodDeclaration_propertyKeyword),
+      AstBinaryFlags.isGet(data.flags)
+          ? TokenFactory.tokenFromKeyword(Keyword.GET)
+          : AstBinaryFlags.isSet(data.flags)
+              ? TokenFactory.tokenFromKeyword(Keyword.SET)
+              : null,
       _getToken(data.methodDeclaration_operatorKeyword),
-      _readNode(data.methodDeclaration_name),
+      _declaredIdentifier(data),
       _readNode(data.methodDeclaration_typeParameters),
       _readNodeLazy(data.methodDeclaration_formalParameters),
-      _readNodeLazy(data.methodDeclaration_body),
+      AstBinaryFlags.isAbstract(data.flags)
+          ? AstTestFactory.emptyFunctionBody()
+          : AstTestFactory.blockFunctionBody(AstTestFactory.block()),
     );
     LazyMethodDeclaration.setData(node, data);
     return node;
@@ -889,27 +1002,33 @@
   }
 
   MixinDeclaration _read_mixinDeclaration(LinkedNode data) {
-    var node = astFactory.mixinDeclaration(
-      _readNodeLazy(data.annotatedNode_comment),
-      _readNodeListLazy(data.annotatedNode_metadata),
-      _getToken(data.mixinDeclaration_mixinKeyword),
-      _readNode(data.namedCompilationUnitMember_name),
-      _readNode(data.classOrMixinDeclaration_typeParameters),
-      _readNodeLazy(data.mixinDeclaration_onClause),
-      _readNodeLazy(data.classOrMixinDeclaration_implementsClause),
-      _getToken(data.classOrMixinDeclaration_leftBracket),
-      _readNodeListLazy(data.classOrMixinDeclaration_members),
-      _getToken(data.classOrMixinDeclaration_rightBracket),
-    );
-    LazyMixinDeclaration(node, data);
-    return node;
+    timerAstBinaryReaderMixin.start();
+    try {
+      var node = astFactory.mixinDeclaration(
+        _readNodeLazy(data.annotatedNode_comment),
+        _readNodeListLazy(data.annotatedNode_metadata),
+        _getToken(data.mixinDeclaration_mixinKeyword),
+        _declaredIdentifier(data),
+        _readNode(data.classOrMixinDeclaration_typeParameters),
+        _readNodeLazy(data.mixinDeclaration_onClause),
+        _readNodeLazy(data.classOrMixinDeclaration_implementsClause),
+        _getToken(data.classOrMixinDeclaration_leftBracket),
+        _readNodeListLazy(data.classOrMixinDeclaration_members),
+        _getToken(data.classOrMixinDeclaration_rightBracket),
+      );
+      LazyMixinDeclaration(node, data);
+      return node;
+    } finally {
+      timerAstBinaryReaderMixin.stop();
+    }
   }
 
   NamedExpression _read_namedExpression(LinkedNode data) {
+    Expression expression = _readNode(data.namedExpression_expression);
     return astFactory.namedExpression(
       _readNode(data.namedExpression_name),
-      _readNode(data.namedExpression_expression),
-    )..staticType = _readType(data.expression_type);
+      expression,
+    )..staticType = expression.staticType;
   }
 
   NativeClause _read_nativeClause(LinkedNode data) {
@@ -949,29 +1068,39 @@
   }
 
   PartDirective _read_partDirective(LinkedNode data) {
-    var node = astFactory.partDirective(
-      _readNode(data.annotatedNode_comment),
-      _readNodeListLazy(data.annotatedNode_metadata),
-      _getToken(data.directive_keyword),
-      _readNode(data.uriBasedDirective_uri),
-      _getToken(data.directive_semicolon),
-    );
-    LazyDirective.setData(node, data);
-    return node;
+    timerAstBinaryReaderDirective.start();
+    try {
+      var node = astFactory.partDirective(
+        _readNode(data.annotatedNode_comment),
+        _readNodeListLazy(data.annotatedNode_metadata),
+        _getToken(data.directive_keyword),
+        _readNode(data.uriBasedDirective_uri),
+        _getToken(data.directive_semicolon),
+      );
+      LazyDirective.setData(node, data);
+      return node;
+    } finally {
+      timerAstBinaryReaderDirective.stop();
+    }
   }
 
   PartOfDirective _read_partOfDirective(LinkedNode data) {
-    var node = astFactory.partOfDirective(
-      _readNode(data.annotatedNode_comment),
-      _readNodeListLazy(data.annotatedNode_metadata),
-      _getToken(data.directive_keyword),
-      _getToken(data.partOfDirective_ofKeyword),
-      _readNode(data.partOfDirective_uri),
-      _readNode(data.partOfDirective_libraryName),
-      _getToken(data.directive_semicolon),
-    );
-    LazyDirective.setData(node, data);
-    return node;
+    timerAstBinaryReaderDirective.start();
+    try {
+      var node = astFactory.partOfDirective(
+        _readNode(data.annotatedNode_comment),
+        _readNodeListLazy(data.annotatedNode_metadata),
+        _getToken(data.directive_keyword),
+        _getToken(data.partOfDirective_ofKeyword),
+        _readNode(data.partOfDirective_uri),
+        _readNode(data.partOfDirective_libraryName),
+        _getToken(data.directive_semicolon),
+      );
+      LazyDirective.setData(node, data);
+      return node;
+    } finally {
+      timerAstBinaryReaderDirective.stop();
+    }
   }
 
   PostfixExpression _read_postfixExpression(LinkedNode data) {
@@ -996,7 +1125,11 @@
 
   PrefixExpression _read_prefixExpression(LinkedNode data) {
     return astFactory.prefixExpression(
-      _getToken(data.prefixExpression_operator),
+      TokenFactory.tokenFromType(
+        TokensContext.binaryToAstTokenType(
+          data.prefixExpression_operator,
+        ),
+      ),
       _readNode(data.prefixExpression_operand),
     )
       ..staticElement = _elementOfComponents(
@@ -1049,7 +1182,9 @@
 
   SetOrMapLiteral _read_setOrMapLiteral(LinkedNode data) {
     SetOrMapLiteralImpl node = astFactory.setOrMapLiteral(
-      constKeyword: _getToken(data.typedLiteral_constKeyword),
+      constKeyword: AstBinaryFlags.isConst(data.flags)
+          ? TokenFactory.tokenFromKeyword(Keyword.CONST)
+          : null,
       elements: _readNodeList(data.setOrMapLiteral_elements),
       leftBracket: _getToken(data.setOrMapLiteral_leftBracket),
       typeArguments: _readNode(data.typedLiteral_typeArguments),
@@ -1066,18 +1201,26 @@
   ShowCombinator _read_showCombinator(LinkedNode data) {
     return astFactory.showCombinator(
       _getToken(data.combinator_keyword),
-      _readNodeList(data.showCombinator_shownNames),
+      data.names.map((name) => AstTestFactory.identifier3(name)).toList(),
     );
   }
 
   SimpleFormalParameter _read_simpleFormalParameter(LinkedNode data) {
     SimpleFormalParameterImpl node = astFactory.simpleFormalParameter2(
-      identifier: _readNode(data.normalFormalParameter_identifier),
+      identifier: _declaredIdentifier(data),
       type: _readNode(data.simpleFormalParameter_type),
-      covariantKeyword: _getToken(data.normalFormalParameter_covariantKeyword),
+      covariantKeyword: AstBinaryFlags.isCovariant(data.flags)
+          ? TokenFactory.tokenFromKeyword(Keyword.COVARIANT)
+          : null,
       comment: _readNode(data.normalFormalParameter_comment),
       metadata: _readNodeList(data.normalFormalParameter_metadata),
-      keyword: _getToken(data.simpleFormalParameter_keyword),
+      keyword: AstBinaryFlags.isConst(data.flags)
+          ? TokenFactory.tokenFromKeyword(Keyword.CONST)
+          : AstBinaryFlags.isFinal(data.flags)
+              ? TokenFactory.tokenFromKeyword(Keyword.FINAL)
+              : AstBinaryFlags.isVar(data.flags)
+                  ? TokenFactory.tokenFromKeyword(Keyword.VAR)
+                  : null,
       requiredKeyword: _getToken(data.normalFormalParameter_requiredKeyword),
     );
     LazyFormalParameter.setData(node, data);
@@ -1087,7 +1230,7 @@
 
   SimpleIdentifier _read_simpleIdentifier(LinkedNode data) {
     return astFactory.simpleIdentifier(
-      _getToken(data.simpleIdentifier_token),
+      TokenFactory.tokenFromString(data.name),
       isDeclaration: data.simpleIdentifier_isDeclaration,
     )
       ..staticElement = _elementOfComponents(
@@ -1098,15 +1241,19 @@
   }
 
   SimpleStringLiteral _read_simpleStringLiteral(LinkedNode data) {
-    return astFactory.simpleStringLiteral(
-      _getToken(data.simpleStringLiteral_token),
-      data.simpleStringLiteral_value,
-    )..staticType = _readType(data.expression_type);
+    // TODO(scheglov) restore staticType
+    return AstTestFactory.string2(data.simpleStringLiteral_value)
+//      ..staticType = _stringType
+        ;
   }
 
   SpreadElement _read_spreadElement(LinkedNode data) {
     return astFactory.spreadElement(
-      spreadOperator: _getToken(data.spreadElement_spreadOperator),
+      spreadOperator: TokenFactory.tokenFromType(
+        TokensContext.binaryToAstTokenType(
+          data.spreadElement_spreadOperator2,
+        ),
+      ),
       expression: _readNode(data.spreadElement_expression),
     );
   }
@@ -1114,7 +1261,7 @@
   StringInterpolation _read_stringInterpolation(LinkedNode data) {
     return astFactory.stringInterpolation(
       _readNodeList(data.stringInterpolation_elements),
-    )..staticType = _readType(data.expression_type);
+    )..staticType = _stringType;
   }
 
   SuperConstructorInvocation _read_superConstructorInvocation(LinkedNode data) {
@@ -1169,7 +1316,7 @@
   SymbolLiteral _read_symbolLiteral(LinkedNode data) {
     return astFactory.symbolLiteral(
       _getToken(data.symbolLiteral_poundSign),
-      _getTokens(data.symbolLiteral_components),
+      data.names.map((lexeme) => TokenFactory.tokenFromString(lexeme)).toList(),
     )..staticType = _readType(data.expression_type);
   }
 
@@ -1188,14 +1335,19 @@
 
   TopLevelVariableDeclaration _read_topLevelVariableDeclaration(
       LinkedNode data) {
-    var node = astFactory.topLevelVariableDeclaration(
-      _readNodeLazy(data.annotatedNode_comment),
-      _readNodeListLazy(data.annotatedNode_metadata),
-      _readNode(data.topLevelVariableDeclaration_variableList),
-      _getToken(data.topLevelVariableDeclaration_semicolon),
-    );
-    LazyTopLevelVariableDeclaration.setData(node, data);
-    return node;
+    timerAstBinaryReaderTopLevelVar.start();
+    try {
+      var node = astFactory.topLevelVariableDeclaration(
+        _readNodeLazy(data.annotatedNode_comment),
+        _readNodeListLazy(data.annotatedNode_metadata),
+        _readNode(data.topLevelVariableDeclaration_variableList),
+        _getToken(data.topLevelVariableDeclaration_semicolon),
+      );
+      LazyTopLevelVariableDeclaration.setData(node, data);
+      return node;
+    } finally {
+      timerAstBinaryReaderTopLevelVar.stop();
+    }
   }
 
   TryStatement _read_tryStatement(LinkedNode data) {
@@ -1228,7 +1380,7 @@
     var node = astFactory.typeParameter(
       _readNodeLazy(data.annotatedNode_comment),
       _readNodeListLazy(data.annotatedNode_metadata),
-      _readNode(data.typeParameter_name),
+      _declaredIdentifier(data),
       _getToken(data.typeParameter_extendsKeyword),
       _readNodeLazy(data.typeParameter_bound),
     );
@@ -1246,7 +1398,7 @@
 
   VariableDeclaration _read_variableDeclaration(LinkedNode data) {
     var node = astFactory.variableDeclaration(
-      _readNode(data.variableDeclaration_name),
+      _declaredIdentifier(data),
       _getToken(data.variableDeclaration_equals),
       _readNodeLazy(data.variableDeclaration_initializer),
     );
@@ -1258,8 +1410,16 @@
   VariableDeclarationList _read_variableDeclarationList(LinkedNode data) {
     var node = astFactory.variableDeclarationList2(
       comment: _readNodeLazy(data.annotatedNode_comment),
-      keyword: _getToken(data.variableDeclarationList_keyword),
-      lateKeyword: _getToken(data.variableDeclarationList_lateKeyword),
+      keyword: AstBinaryFlags.isConst(data.flags)
+          ? TokenFactory.tokenFromKeyword(Keyword.CONST)
+          : AstBinaryFlags.isFinal(data.flags)
+              ? TokenFactory.tokenFromKeyword(Keyword.FINAL)
+              : AstBinaryFlags.isVar(data.flags)
+                  ? TokenFactory.tokenFromKeyword(Keyword.VAR)
+                  : null,
+      lateKeyword: AstBinaryFlags.isLate(data.flags)
+          ? TokenFactory.tokenFromKeyword(Keyword.LATE)
+          : null,
       metadata: _readNodeListLazy(data.annotatedNode_metadata),
       type: _readNodeLazy(data.variableDeclarationList_type),
       variables: _readNodeList(data.variableDeclarationList_variables),
diff --git a/pkg/analyzer/lib/src/summary2/ast_binary_writer.dart b/pkg/analyzer/lib/src/summary2/ast_binary_writer.dart
index b1f46b5..eb63f6d 100644
--- a/pkg/analyzer/lib/src/summary2/ast_binary_writer.dart
+++ b/pkg/analyzer/lib/src/summary2/ast_binary_writer.dart
@@ -11,14 +11,22 @@
 import 'package:analyzer/src/dart/element/member.dart';
 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/lazy_ast.dart';
 import 'package:analyzer/src/summary2/linking_bundle_context.dart';
 import 'package:analyzer/src/summary2/tokens_writer.dart';
 
+var timerAstBinaryWriter = Stopwatch();
+var timerAstBinaryWriterClass = Stopwatch();
+var timerAstBinaryWriterDirective = Stopwatch();
+var timerAstBinaryWriterFunctionBody = Stopwatch();
+var timerAstBinaryWriterMixin = Stopwatch();
+var timerAstBinaryWriterTopVar = Stopwatch();
+var timerAstBinaryWriterTypedef = Stopwatch();
+
 /// Serializer of fully resolved ASTs into flat buffers.
 class AstBinaryWriter extends ThrowingAstVisitor<LinkedNodeBuilder> {
   final LinkingBundleContext _linkingContext;
-  final _tokensWriter = TokensWriter();
 
   /// This field is set temporary while visiting [FieldDeclaration] or
   /// [TopLevelVariableDeclaration] to store data shared among all variables
@@ -27,8 +35,6 @@
 
   AstBinaryWriter(this._linkingContext);
 
-  UnlinkedTokensBuilder get tokensBuilder => _tokensWriter.tokensBuilder;
-
   @override
   LinkedNodeBuilder visitAdjacentStrings(AdjacentStrings node) {
     return LinkedNodeBuilder.adjacentStrings(
@@ -124,7 +130,9 @@
       binaryExpression_element: elementComponents.rawElement,
       binaryExpression_elementType: elementComponents.definingType,
       binaryExpression_leftOperand: node.leftOperand.accept(this),
-      binaryExpression_operator: _getToken(node.operator),
+      binaryExpression_operator: TokensWriter.astToBinaryTokenType(
+        node.operator.type,
+      ),
       binaryExpression_rightOperand: node.rightOperand.accept(this),
       expression_type: _writeType(node.staticType),
     );
@@ -141,17 +149,21 @@
 
   @override
   LinkedNodeBuilder visitBlockFunctionBody(BlockFunctionBody node) {
-    return LinkedNodeBuilder.blockFunctionBody(
-      blockFunctionBody_block: node.block.accept(this),
-      blockFunctionBody_keyword: _getToken(node.keyword),
-      blockFunctionBody_star: _getToken(node.star),
-    );
+    timerAstBinaryWriterFunctionBody.start();
+    try {
+      return LinkedNodeBuilder.blockFunctionBody(
+        blockFunctionBody_block: node.block.accept(this),
+        blockFunctionBody_keyword: _getToken(node.keyword),
+        blockFunctionBody_star: _getToken(node.star),
+      );
+    } finally {
+      timerAstBinaryWriterFunctionBody.stop();
+    }
   }
 
   @override
   LinkedNodeBuilder visitBooleanLiteral(BooleanLiteral node) {
     return LinkedNodeBuilder.booleanLiteral(
-      booleanLiteral_literal: _getToken(node.literal),
       booleanLiteral_value: node.value,
     );
   }
@@ -194,30 +206,42 @@
 
   @override
   LinkedNodeBuilder visitClassDeclaration(ClassDeclaration node) {
-    var builder = LinkedNodeBuilder.classDeclaration(
-      classDeclaration_abstractKeyword: _getToken(node.abstractKeyword),
-      classDeclaration_classKeyword: _getToken(node.classKeyword),
-      classDeclaration_extendsClause: node.extendsClause?.accept(this),
-      classDeclaration_nativeClause: node.nativeClause?.accept(this),
-      classDeclaration_withClause: node.withClause?.accept(this),
-    );
-    _storeClassOrMixinDeclaration(builder, node);
-    return builder;
+    try {
+      timerAstBinaryWriterClass.start();
+      var builder = LinkedNodeBuilder.classDeclaration(
+        classDeclaration_extendsClause: node.extendsClause?.accept(this),
+        classDeclaration_nativeClause: node.nativeClause?.accept(this),
+        classDeclaration_withClause: node.withClause?.accept(this),
+      );
+      builder.flags = AstBinaryFlags.encode(
+        isAbstract: node.abstractKeyword != null,
+      );
+      _storeClassOrMixinDeclaration(builder, node);
+      return builder;
+    } finally {
+      timerAstBinaryWriterClass.stop();
+    }
   }
 
   @override
   LinkedNodeBuilder visitClassTypeAlias(ClassTypeAlias node) {
-    var builder = LinkedNodeBuilder.classTypeAlias(
-      classTypeAlias_abstractKeyword: _getToken(node.abstractKeyword),
-      classTypeAlias_equals: _getToken(node.equals),
-      classTypeAlias_implementsClause: node.implementsClause?.accept(this),
-      classTypeAlias_superclass: node.superclass.accept(this),
-      classTypeAlias_typeParameters: node.typeParameters?.accept(this),
-      classTypeAlias_withClause: node.withClause.accept(this),
-    );
-    _storeTypeAlias(builder, node);
-    _storeIsSimpleBounded(builder, node);
-    return builder;
+    timerAstBinaryWriterClass.start();
+    try {
+      var builder = LinkedNodeBuilder.classTypeAlias(
+        classTypeAlias_implementsClause: node.implementsClause?.accept(this),
+        classTypeAlias_superclass: node.superclass.accept(this),
+        classTypeAlias_typeParameters: node.typeParameters?.accept(this),
+        classTypeAlias_withClause: node.withClause.accept(this),
+      );
+      builder.flags = AstBinaryFlags.encode(
+        isAbstract: node.abstractKeyword != null,
+      );
+      _storeTypeAlias(builder, node);
+      _storeIsSimpleBounded(builder, node);
+      return builder;
+    } finally {
+      timerAstBinaryWriterClass.stop();
+    }
   }
 
   @override
@@ -232,24 +256,26 @@
     }
 
     return LinkedNodeBuilder.comment(
-      comment_tokens: _getTokens(node.tokens),
+      comment_tokens: node.tokens.map((t) => t.lexeme).toList(),
       comment_type: type,
-      comment_references: _writeNodeList(node.references),
+      // TODO(scheglov) restore
+//      comment_references: _writeNodeList(node.references),
     );
   }
 
   @override
   LinkedNodeBuilder visitCommentReference(CommentReference node) {
-    var identifier = node.identifier;
-    _tokensWriter.writeTokens(
-      node.newKeyword ?? identifier.beginToken,
-      identifier.endToken,
-    );
-
-    return LinkedNodeBuilder.commentReference(
-      commentReference_identifier: identifier.accept(this),
-      commentReference_newKeyword: _getToken(node.newKeyword),
-    );
+    return null;
+//    var identifier = node.identifier;
+//    _tokensWriter.writeTokens(
+//      node.newKeyword ?? identifier.beginToken,
+//      identifier.endToken,
+//    );
+//
+//    return LinkedNodeBuilder.commentReference(
+//      commentReference_identifier: identifier.accept(this),
+//      commentReference_newKeyword: _getToken(node.newKeyword),
+//    );
   }
 
   @override
@@ -294,12 +320,7 @@
   @override
   LinkedNodeBuilder visitConstructorDeclaration(ConstructorDeclaration node) {
     var builder = LinkedNodeBuilder.constructorDeclaration(
-      constructorDeclaration_body: node.body?.accept(this),
-      constructorDeclaration_constKeyword: _getToken(node.constKeyword),
-      constructorDeclaration_externalKeyword: _getToken(node.externalKeyword),
-      constructorDeclaration_factoryKeyword: _getToken(node.factoryKeyword),
       constructorDeclaration_initializers: _writeNodeList(node.initializers),
-      constructorDeclaration_name: node.name?.accept(this),
       constructorDeclaration_parameters: node.parameters.accept(this),
       constructorDeclaration_period: _getToken(node.period),
       constructorDeclaration_redirectedConstructor:
@@ -307,6 +328,19 @@
       constructorDeclaration_returnType: node.returnType.accept(this),
       constructorDeclaration_separator: _getToken(node.separator),
     );
+    builder.flags = AstBinaryFlags.encode(
+      isAbstract: node.body is EmptyFunctionBody,
+      isConst: node.constKeyword != null,
+      isExternal: node.externalKeyword != null,
+      isFactory: node.factoryKeyword != null,
+    );
+    if (node.name != null) {
+      builder
+        ..name = node.name.name
+        ..nameOffset = node.name.offset;
+    } else {
+      builder..nameOffset = node.returnType.offset;
+    }
     _storeClassMember(builder, node);
     _storeCodeOffsetLength(builder, node);
     return builder;
@@ -368,6 +402,9 @@
       defaultFormalParameter_parameter: node.parameter.accept(this),
       defaultFormalParameter_separator: _getToken(node.separator),
     );
+    builder.flags = AstBinaryFlags.encode(
+      hasInitializer: node.defaultValue != null,
+    );
     _storeCodeOffsetLength(builder, node);
     return builder;
   }
@@ -395,9 +432,7 @@
   @override
   LinkedNodeBuilder visitDoubleLiteral(DoubleLiteral node) {
     return LinkedNodeBuilder.doubleLiteral(
-      doubleLiteral_literal: _getToken(node.literal),
       doubleLiteral_value: node.value,
-      expression_type: _writeType(node.staticType),
     );
   }
 
@@ -420,8 +455,9 @@
   @override
   LinkedNodeBuilder visitEnumConstantDeclaration(EnumConstantDeclaration node) {
     var builder = LinkedNodeBuilder.enumConstantDeclaration(
-      enumConstantDeclaration_name: node.name.accept(this),
+      nameOffset: node.name.offset,
     );
+    builder..name = node.name.name;
     _storeDeclaration(builder, node);
     return builder;
   }
@@ -430,9 +466,6 @@
   LinkedNodeBuilder visitEnumDeclaration(EnumDeclaration node) {
     var builder = LinkedNodeBuilder.enumDeclaration(
       enumDeclaration_constants: _writeNodeList(node.constants),
-      enumDeclaration_enumKeyword: _getToken(node.enumKeyword),
-      enumDeclaration_leftBracket: _getToken(node.leftBracket),
-      enumDeclaration_rightBracket: _getToken(node.rightBracket),
     );
     _storeNamedCompilationUnitMember(builder, node);
     return builder;
@@ -440,19 +473,29 @@
 
   @override
   LinkedNodeBuilder visitExportDirective(ExportDirective node) {
-    var builder = LinkedNodeBuilder.exportDirective();
-    _storeNamespaceDirective(builder, node);
-    return builder;
+    timerAstBinaryWriterDirective.start();
+    try {
+      var builder = LinkedNodeBuilder.exportDirective();
+      _storeNamespaceDirective(builder, node);
+      return builder;
+    } finally {
+      timerAstBinaryWriterDirective.stop();
+    }
   }
 
   @override
   LinkedNodeBuilder visitExpressionFunctionBody(ExpressionFunctionBody node) {
-    return LinkedNodeBuilder.expressionFunctionBody(
-      expressionFunctionBody_arrow: _getToken(node.functionDefinition),
-      expressionFunctionBody_expression: node.expression.accept(this),
-      expressionFunctionBody_keyword: _getToken(node.keyword),
-      expressionFunctionBody_semicolon: _getToken(node.semicolon),
-    );
+    timerAstBinaryWriterFunctionBody.start();
+    try {
+      return LinkedNodeBuilder.expressionFunctionBody(
+        expressionFunctionBody_arrow: _getToken(node.functionDefinition),
+        expressionFunctionBody_expression: node.expression.accept(this),
+        expressionFunctionBody_keyword: _getToken(node.keyword),
+        expressionFunctionBody_semicolon: _getToken(node.semicolon),
+      );
+    } finally {
+      timerAstBinaryWriterFunctionBody.stop();
+    }
   }
 
   @override
@@ -479,10 +522,12 @@
     );
 
     var builder = LinkedNodeBuilder.fieldDeclaration(
-      fieldDeclaration_covariantKeyword: _getToken(node.covariantKeyword),
       fieldDeclaration_fields: node.fields.accept(this),
       fieldDeclaration_semicolon: _getToken(node.semicolon),
-      fieldDeclaration_staticKeyword: _getToken(node.staticKeyword),
+    );
+    builder.flags = AstBinaryFlags.encode(
+      isCovariant: node.covariantKeyword != null,
+      isStatic: node.staticKeyword != null,
     );
     _storeClassMember(builder, node);
 
@@ -496,13 +541,11 @@
   LinkedNodeBuilder visitFieldFormalParameter(FieldFormalParameter node) {
     var builder = LinkedNodeBuilder.fieldFormalParameter(
       fieldFormalParameter_formalParameters: node.parameters?.accept(this),
-      fieldFormalParameter_keyword: _getToken(node.keyword),
-      fieldFormalParameter_period: _getToken(node.period),
       fieldFormalParameter_thisKeyword: _getToken(node.thisKeyword),
       fieldFormalParameter_type: node.type?.accept(this),
       fieldFormalParameter_typeParameters: node.typeParameters?.accept(this),
     );
-    _storeNormalFormalParameter(builder, node);
+    _storeNormalFormalParameter(builder, node, node.keyword);
     return builder;
   }
 
@@ -577,12 +620,15 @@
   @override
   LinkedNodeBuilder visitFunctionDeclaration(FunctionDeclaration node) {
     var builder = LinkedNodeBuilder.functionDeclaration(
-      functionDeclaration_externalKeyword: _getToken(node.externalKeyword),
       functionDeclaration_functionExpression:
           node.functionExpression?.accept(this),
-      functionDeclaration_propertyKeyword: _getToken(node.propertyKeyword),
       functionDeclaration_returnType: node.returnType?.accept(this),
     );
+    builder.flags = AstBinaryFlags.encode(
+      isExternal: node.externalKeyword != null,
+      isGet: node.isGetter,
+      isSet: node.isSetter,
+    );
     _storeNamedCompilationUnitMember(builder, node);
     _writeActualReturnType(builder, node);
     return builder;
@@ -599,10 +645,14 @@
 
   @override
   LinkedNodeBuilder visitFunctionExpression(FunctionExpression node) {
+    var bodyToStore = node.body;
+    if (node.parent.parent is CompilationUnit) {
+      bodyToStore = null;
+    }
     return LinkedNodeBuilder.functionExpression(
       executable_isAsynchronous: node.body?.isAsynchronous ?? false,
       executable_isGenerator: node.body?.isGenerator ?? false,
-      functionExpression_body: node.body?.accept(this),
+      functionExpression_body: bodyToStore?.accept(this),
       functionExpression_formalParameters: node.parameters?.accept(this),
       functionExpression_typeParameters: node.typeParameters?.accept(this),
     );
@@ -620,17 +670,22 @@
 
   @override
   LinkedNodeBuilder visitFunctionTypeAlias(FunctionTypeAlias node) {
-    var builder = LinkedNodeBuilder.functionTypeAlias(
-      functionTypeAlias_formalParameters: node.parameters.accept(this),
-      functionTypeAlias_returnType: node.returnType?.accept(this),
-      functionTypeAlias_typeParameters: node.typeParameters?.accept(this),
-      typeAlias_hasSelfReference:
-          LazyFunctionTypeAlias.getHasSelfReference(node),
-    );
-    _storeTypeAlias(builder, node);
-    _writeActualReturnType(builder, node);
-    _storeIsSimpleBounded(builder, node);
-    return builder;
+    timerAstBinaryWriterTypedef.start();
+    try {
+      var builder = LinkedNodeBuilder.functionTypeAlias(
+        functionTypeAlias_formalParameters: node.parameters.accept(this),
+        functionTypeAlias_returnType: node.returnType?.accept(this),
+        functionTypeAlias_typeParameters: node.typeParameters?.accept(this),
+        typeAlias_hasSelfReference:
+            LazyFunctionTypeAlias.getHasSelfReference(node),
+      );
+      _storeTypeAlias(builder, node);
+      _writeActualReturnType(builder, node);
+      _storeIsSimpleBounded(builder, node);
+      return builder;
+    } finally {
+      timerAstBinaryWriterTypedef.stop();
+    }
   }
 
   @override
@@ -643,7 +698,7 @@
       functionTypedFormalParameter_typeParameters:
           node.typeParameters?.accept(this),
     );
-    _storeNormalFormalParameter(builder, node);
+    _storeNormalFormalParameter(builder, node, null);
     return builder;
   }
 
@@ -667,22 +722,26 @@
 
   @override
   LinkedNodeBuilder visitGenericTypeAlias(GenericTypeAlias node) {
-    var builder = LinkedNodeBuilder.genericTypeAlias(
-      genericTypeAlias_equals: _getToken(node.equals),
-      genericTypeAlias_functionType: node.functionType?.accept(this),
-      genericTypeAlias_typeParameters: node.typeParameters?.accept(this),
-      typeAlias_hasSelfReference:
-          LazyGenericTypeAlias.getHasSelfReference(node),
-    );
-    _storeTypeAlias(builder, node);
-    _storeIsSimpleBounded(builder, node);
-    return builder;
+    timerAstBinaryWriterTypedef.start();
+    try {
+      var builder = LinkedNodeBuilder.genericTypeAlias(
+        genericTypeAlias_functionType: node.functionType?.accept(this),
+        genericTypeAlias_typeParameters: node.typeParameters?.accept(this),
+        typeAlias_hasSelfReference:
+            LazyGenericTypeAlias.getHasSelfReference(node),
+      );
+      _storeTypeAlias(builder, node);
+      _storeIsSimpleBounded(builder, node);
+      return builder;
+    } finally {
+      timerAstBinaryWriterTypedef.stop();
+    }
   }
 
   @override
   LinkedNodeBuilder visitHideCombinator(HideCombinator node) {
     var builder = LinkedNodeBuilder.hideCombinator(
-      hideCombinator_hiddenNames: _writeNodeList(node.hiddenNames),
+      names: node.hiddenNames.map((id) => id.name).toList(),
     );
     _storeCombinator(builder, node);
     return builder;
@@ -723,13 +782,20 @@
 
   @override
   LinkedNodeBuilder visitImportDirective(ImportDirective node) {
-    var builder = LinkedNodeBuilder.importDirective(
-      importDirective_asKeyword: _getToken(node.asKeyword),
-      importDirective_deferredKeyword: _getToken(node.deferredKeyword),
-      importDirective_prefix: node.prefix?.accept(this),
-    );
-    _storeNamespaceDirective(builder, node);
-    return builder;
+    timerAstBinaryWriterDirective.start();
+    try {
+      var builder = LinkedNodeBuilder.importDirective(
+        importDirective_prefix: node.prefix?.name,
+        importDirective_prefixOffset: node.prefix?.offset ?? 0,
+      );
+      builder.flags = AstBinaryFlags.encode(
+        isDeferred: node.deferredKeyword != null,
+      );
+      _storeNamespaceDirective(builder, node);
+      return builder;
+    } finally {
+      timerAstBinaryWriterDirective.stop();
+    }
   }
 
   @override
@@ -751,23 +817,25 @@
   LinkedNodeBuilder visitInstanceCreationExpression(
       InstanceCreationExpression node) {
     InstanceCreationExpressionImpl nodeImpl = node;
-    return LinkedNodeBuilder.instanceCreationExpression(
+    var builder = LinkedNodeBuilder.instanceCreationExpression(
       instanceCreationExpression_arguments: node.argumentList.accept(this),
       instanceCreationExpression_constructorName:
           node.constructorName.accept(this),
-      instanceCreationExpression_keyword: _getToken(node.keyword),
       instanceCreationExpression_typeArguments:
           nodeImpl.typeArguments?.accept(this),
       expression_type: _writeType(node.staticType),
     );
+    builder.flags = AstBinaryFlags.encode(
+      isConst: node.keyword?.type == Keyword.CONST,
+      isNew: node.keyword?.type == Keyword.NEW,
+    );
+    return builder;
   }
 
   @override
   LinkedNodeBuilder visitIntegerLiteral(IntegerLiteral node) {
     return LinkedNodeBuilder.integerLiteral(
-      integerLiteral_literal: _getToken(node.literal),
       integerLiteral_value: node.value,
-      expression_type: _writeType(node.staticType),
     );
   }
 
@@ -796,7 +864,6 @@
       isExpression_notOperator: _getToken(node.notOperator),
       isExpression_type: node.type.accept(this),
     );
-    _storeExpression(builder, node);
     return builder;
   }
 
@@ -818,12 +885,17 @@
 
   @override
   LinkedNodeBuilder visitLibraryDirective(LibraryDirective node) {
-    var builder = LinkedNodeBuilder.libraryDirective(
-      libraryDirective_name: node.name.accept(this),
-      directive_semicolon: _getToken(node.semicolon),
-    );
-    _storeDirective(builder, node);
-    return builder;
+    timerAstBinaryWriterDirective.start();
+    try {
+      var builder = LinkedNodeBuilder.libraryDirective(
+        libraryDirective_name: node.name.accept(this),
+        directive_semicolon: _getToken(node.semicolon),
+      );
+      _storeDirective(builder, node);
+      return builder;
+    } finally {
+      timerAstBinaryWriterDirective.stop();
+    }
   }
 
   @override
@@ -858,16 +930,21 @@
     var builder = LinkedNodeBuilder.methodDeclaration(
       executable_isAsynchronous: node.body?.isAsynchronous ?? false,
       executable_isGenerator: node.body?.isGenerator ?? false,
-      methodDeclaration_body: node.body?.accept(this),
-      methodDeclaration_externalKeyword: _getToken(node.externalKeyword),
       methodDeclaration_formalParameters: node.parameters?.accept(this),
-      methodDeclaration_modifierKeyword: _getToken(node.modifierKeyword),
-      methodDeclaration_name: node.name.accept(this),
       methodDeclaration_operatorKeyword: _getToken(node.operatorKeyword),
-      methodDeclaration_propertyKeyword: _getToken(node.propertyKeyword),
       methodDeclaration_returnType: node.returnType?.accept(this),
       methodDeclaration_typeParameters: node.typeParameters?.accept(this),
     );
+    builder
+      ..name = node.name.name
+      ..nameOffset = node.name.offset;
+    builder.flags = AstBinaryFlags.encode(
+      isAbstract: node.body is EmptyFunctionBody,
+      isExternal: node.externalKeyword != null,
+      isGet: node.isGetter,
+      isSet: node.isSetter,
+      isStatic: node.isStatic,
+    );
     _storeClassMember(builder, node);
     _storeCodeOffsetLength(builder, node);
     _writeActualReturnType(builder, node);
@@ -887,13 +964,18 @@
 
   @override
   LinkedNodeBuilder visitMixinDeclaration(MixinDeclaration node) {
-    var builder = LinkedNodeBuilder.mixinDeclaration(
-      mixinDeclaration_mixinKeyword: _getToken(node.mixinKeyword),
-      mixinDeclaration_onClause: node.onClause?.accept(this),
-    );
-    _storeClassOrMixinDeclaration(builder, node);
-    LazyMixinDeclaration.get(node).put(builder);
-    return builder;
+    timerAstBinaryWriterMixin.start();
+    try {
+      var builder = LinkedNodeBuilder.mixinDeclaration(
+        mixinDeclaration_mixinKeyword: _getToken(node.mixinKeyword),
+        mixinDeclaration_onClause: node.onClause?.accept(this),
+      );
+      _storeClassOrMixinDeclaration(builder, node);
+      LazyMixinDeclaration.get(node).put(builder);
+      return builder;
+    } finally {
+      timerAstBinaryWriterMixin.stop();
+    }
   }
 
   @override
@@ -953,23 +1035,33 @@
 
   @override
   LinkedNodeBuilder visitPartDirective(PartDirective node) {
-    var builder = LinkedNodeBuilder.partDirective(
-      directive_semicolon: _getToken(node.semicolon),
-    );
-    _storeUriBasedDirective(builder, node);
-    return builder;
+    timerAstBinaryWriterDirective.start();
+    try {
+      var builder = LinkedNodeBuilder.partDirective(
+        directive_semicolon: _getToken(node.semicolon),
+      );
+      _storeUriBasedDirective(builder, node);
+      return builder;
+    } finally {
+      timerAstBinaryWriterDirective.stop();
+    }
   }
 
   @override
   LinkedNodeBuilder visitPartOfDirective(PartOfDirective node) {
-    var builder = LinkedNodeBuilder.partOfDirective(
-      partOfDirective_libraryName: node.libraryName?.accept(this),
-      partOfDirective_ofKeyword: _getToken(node.ofKeyword),
-      directive_semicolon: _getToken(node.semicolon),
-      partOfDirective_uri: node.uri?.accept(this),
-    );
-    _storeDirective(builder, node);
-    return builder;
+    timerAstBinaryWriterDirective.start();
+    try {
+      var builder = LinkedNodeBuilder.partOfDirective(
+        partOfDirective_libraryName: node.libraryName?.accept(this),
+        partOfDirective_ofKeyword: _getToken(node.ofKeyword),
+        directive_semicolon: _getToken(node.semicolon),
+        partOfDirective_uri: node.uri?.accept(this),
+      );
+      _storeDirective(builder, node);
+      return builder;
+    } finally {
+      timerAstBinaryWriterDirective.stop();
+    }
   }
 
   @override
@@ -1002,7 +1094,9 @@
       prefixExpression_element: elementComponents.rawElement,
       prefixExpression_elementType: elementComponents.definingType,
       prefixExpression_operand: node.operand.accept(this),
-      prefixExpression_operator: _getToken(node.operator),
+      prefixExpression_operator: TokensWriter.astToBinaryTokenType(
+        node.operator.type,
+      ),
     );
   }
 
@@ -1077,7 +1171,7 @@
   @override
   LinkedNodeBuilder visitShowCombinator(ShowCombinator node) {
     var builder = LinkedNodeBuilder.showCombinator(
-      showCombinator_shownNames: _writeNodeList(node.shownNames),
+      names: node.shownNames.map((id) => id.name).toList(),
     );
     _storeCombinator(builder, node);
     return builder;
@@ -1086,11 +1180,10 @@
   @override
   LinkedNodeBuilder visitSimpleFormalParameter(SimpleFormalParameter node) {
     var builder = LinkedNodeBuilder.simpleFormalParameter(
-      simpleFormalParameter_keyword: _getToken(node.keyword),
       simpleFormalParameter_type: node.type?.accept(this),
     );
     builder.topLevelTypeInferenceError = LazyAst.getTypeInferenceError(node);
-    _storeNormalFormalParameter(builder, node);
+    _storeNormalFormalParameter(builder, node, node.keyword);
     _storeInheritsCovariant(builder, node);
     return builder;
   }
@@ -1106,22 +1199,21 @@
     }
 
     var elementComponents = _componentsOfElement(element);
-    return LinkedNodeBuilder.simpleIdentifier(
+    var builder = LinkedNodeBuilder.simpleIdentifier(
       simpleIdentifier_element: elementComponents.rawElement,
       simpleIdentifier_elementType: elementComponents.definingType,
       simpleIdentifier_isDeclaration: node is DeclaredSimpleIdentifier,
-      simpleIdentifier_token: _getToken(node.token),
       expression_type: _writeType(node.staticType),
     );
+    builder.name = node.name;
+    return builder;
   }
 
   @override
   LinkedNodeBuilder visitSimpleStringLiteral(SimpleStringLiteral node) {
     var builder = LinkedNodeBuilder.simpleStringLiteral(
-      simpleStringLiteral_token: _getToken(node.literal),
       simpleStringLiteral_value: node.value,
     );
-    _storeExpression(builder, node);
     return builder;
   }
 
@@ -1129,7 +1221,9 @@
   LinkedNodeBuilder visitSpreadElement(SpreadElement node) {
     return LinkedNodeBuilder.spreadElement(
       spreadElement_expression: node.expression.accept(this),
-      spreadElement_spreadOperator: _getToken(node.spreadOperator),
+      spreadElement_spreadOperator2: TokensWriter.astToBinaryTokenType(
+        node.spreadOperator.type,
+      ),
     );
   }
 
@@ -1137,7 +1231,6 @@
   LinkedNodeBuilder visitStringInterpolation(StringInterpolation node) {
     return LinkedNodeBuilder.stringInterpolation(
       stringInterpolation_elements: _writeNodeList(node.elements),
-      expression_type: _writeType(node.staticType),
     );
   }
 
@@ -1200,7 +1293,7 @@
   LinkedNodeBuilder visitSymbolLiteral(SymbolLiteral node) {
     var builder = LinkedNodeBuilder.symbolLiteral(
       symbolLiteral_poundSign: _getToken(node.poundSign),
-      symbolLiteral_components: _getTokens(node.components),
+      names: node.components.map((t) => t.lexeme).toList(),
     );
     _storeExpression(builder, node);
     return builder;
@@ -1227,18 +1320,23 @@
   @override
   LinkedNodeBuilder visitTopLevelVariableDeclaration(
       TopLevelVariableDeclaration node) {
-    _variablesDeclaration = LinkedNodeVariablesDeclarationBuilder();
+    timerAstBinaryWriterTopVar.start();
+    try {
+      _variablesDeclaration = LinkedNodeVariablesDeclarationBuilder();
 
-    var builder = LinkedNodeBuilder.topLevelVariableDeclaration(
-      topLevelVariableDeclaration_semicolon: _getToken(node.semicolon),
-      topLevelVariableDeclaration_variableList: node.variables?.accept(this),
-    );
-    _storeCompilationUnitMember(builder, node);
+      var builder = LinkedNodeBuilder.topLevelVariableDeclaration(
+        topLevelVariableDeclaration_semicolon: _getToken(node.semicolon),
+        topLevelVariableDeclaration_variableList: node.variables?.accept(this),
+      );
+      _storeCompilationUnitMember(builder, node);
 
-    _variablesDeclaration.comment = builder.annotatedNode_comment;
-    _variablesDeclaration = null;
+      _variablesDeclaration.comment = builder.annotatedNode_comment;
+      _variablesDeclaration = null;
 
-    return builder;
+      return builder;
+    } finally {
+      timerAstBinaryWriterTopVar.stop();
+    }
   }
 
   @override
@@ -1277,8 +1375,10 @@
       typeParameter_bound: node.bound?.accept(this),
       typeParameter_defaultType: _writeType(LazyAst.getDefaultType(node)),
       typeParameter_extendsKeyword: _getToken(node.extendsKeyword),
-      typeParameter_name: node.name.accept(this),
     );
+    builder
+      ..name = node.name.name
+      ..nameOffset = node.name.offset;
     _storeDeclaration(builder, node);
     _storeCodeOffsetLength(builder, node);
     return builder;
@@ -1295,12 +1395,25 @@
 
   @override
   LinkedNodeBuilder visitVariableDeclaration(VariableDeclaration node) {
+    var initializer = node.initializer;
+    VariableDeclarationList declarationList = node.parent;
+    if (declarationList.parent is TopLevelVariableDeclaration) {
+      if (!declarationList.isConst) {
+        initializer = null;
+      }
+    }
+
     var builder = LinkedNodeBuilder.variableDeclaration(
       variableDeclaration_equals: _getToken(node.equals),
-      variableDeclaration_initializer: node.initializer?.accept(this),
-      variableDeclaration_name: node.name.accept(this),
+      variableDeclaration_initializer: initializer?.accept(this),
       variableDeclaration_declaration: _variablesDeclaration,
     );
+    builder.flags = AstBinaryFlags.encode(
+      hasInitializer: node.initializer != null,
+    );
+    builder
+      ..name = node.name.name
+      ..nameOffset = node.name.offset;
     builder.topLevelTypeInferenceError = LazyAst.getTypeInferenceError(node);
     _writeActualType(builder, node);
     _storeInheritsCovariant(builder, node);
@@ -1315,11 +1428,15 @@
     }
 
     var builder = LinkedNodeBuilder.variableDeclarationList(
-      variableDeclarationList_keyword: _getToken(node.keyword),
-      variableDeclarationList_lateKeyword: _getToken(node.lateKeyword),
       variableDeclarationList_type: node.type?.accept(this),
       variableDeclarationList_variables: _writeNodeList(node.variables),
     );
+    builder.flags = AstBinaryFlags.encode(
+      isConst: node.isConst,
+      isFinal: node.isFinal,
+      isLate: node.lateKeyword != null,
+      isVar: node.keyword?.keyword == Keyword.VAR,
+    );
     _storeAnnotatedNode(builder, node);
     _storeCodeOffsetLengthVariables(builder, node);
     return builder;
@@ -1366,8 +1483,12 @@
   }
 
   LinkedNodeBuilder writeNode(AstNode node) {
-    _tokensWriter.writeTokens(node.beginToken, node.endToken);
-    return node.accept(this);
+    timerAstBinaryWriter.start();
+    try {
+      return node.accept(this);
+    } finally {
+      timerAstBinaryWriter.stop();
+    }
   }
 
   _ElementComponents _componentsOfElement(Element element) {
@@ -1386,16 +1507,8 @@
   }
 
   int _getToken(Token token) {
-    return _tokensWriter.indexOfToken(token);
-  }
-
-  List<int> _getTokens(List<Token> tokenList) {
-    var result = List<int>(tokenList.length);
-    for (var i = 0; i < tokenList.length; ++i) {
-      var token = tokenList[i];
-      result[i] = _getToken(token);
-    }
-    return result;
+    // TODO(scheglov) Remove this method
+    return 0;
   }
 
   int _indexOfElement(Element element) {
@@ -1535,7 +1648,9 @@
       LinkedNodeBuilder builder, NamedCompilationUnitMember node) {
     _storeCompilationUnitMember(builder, node);
     _storeCodeOffsetLength(builder, node);
-    builder..namedCompilationUnitMember_name = node.name.accept(this);
+    builder
+      ..name = node.name.name
+      ..nameOffset = node.name.offset;
   }
 
   void _storeNamespaceDirective(
@@ -1545,17 +1660,23 @@
       ..namespaceDirective_combinators = _writeNodeList(node.combinators)
       ..namespaceDirective_configurations = _writeNodeList(node.configurations)
       ..namespaceDirective_selectedUri = LazyDirective.getSelectedUri(node)
-      ..directive_semicolon = _getToken(node.semicolon);
+      ..directive_semicolon = _getToken(node.semicolon)
+      ..nameOffset = node.offset;
   }
 
   void _storeNormalFormalParameter(
-      LinkedNodeBuilder builder, NormalFormalParameter node) {
+      LinkedNodeBuilder builder, NormalFormalParameter node, Token keyword) {
     _storeFormalParameter(builder, node);
     builder
       ..normalFormalParameter_comment = node.documentationComment?.accept(this)
-      ..normalFormalParameter_covariantKeyword =
-          _getToken(node.covariantKeyword)
-      ..normalFormalParameter_identifier = node.identifier?.accept(this)
+      ..flags = AstBinaryFlags.encode(
+        isConst: keyword?.type == Keyword.CONST,
+        isCovariant: node.covariantKeyword != null,
+        isFinal: keyword?.type == Keyword.FINAL,
+        isVar: keyword?.type == Keyword.VAR,
+      )
+      ..name = node.identifier?.name
+      ..nameOffset = node.identifier?.offset ?? 0
       ..normalFormalParameter_metadata = _writeNodeList(node.metadata)
       ..normalFormalParameter_requiredKeyword = _getToken(node.requiredKeyword);
   }
@@ -1579,7 +1700,9 @@
   void _storeTypedLiteral(LinkedNodeBuilder builder, TypedLiteral node) {
     _storeExpression(builder, node);
     builder
-      ..typedLiteral_constKeyword = _getToken(node.constKeyword)
+      ..flags = AstBinaryFlags.encode(
+        isConst: node.constKeyword != null,
+      )
       ..typedLiteral_typeArguments = node.typeArguments?.accept(this);
   }
 
diff --git a/pkg/analyzer/lib/src/summary2/lazy_ast.dart b/pkg/analyzer/lib/src/summary2/lazy_ast.dart
index 5b10d20..659b28e 100644
--- a/pkg/analyzer/lib/src/summary2/lazy_ast.dart
+++ b/pkg/analyzer/lib/src/summary2/lazy_ast.dart
@@ -7,6 +7,7 @@
 import 'package:analyzer/src/dart/ast/ast.dart';
 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/ast_binary_reader.dart';
 
 /// Accessor for reading AST lazily, or read data that is stored in IDL, but
@@ -516,6 +517,15 @@
     return node.getProperty(_uriKey);
   }
 
+  static int getNameOffset(Directive node) {
+    var lazy = get(node);
+    if (lazy != null) {
+      return lazy.data.nameOffset;
+    } else {
+      return node.offset;
+    }
+  }
+
   static void readMetadata(AstBinaryReader reader, Directive node) {
     var lazy = get(node);
     if (lazy != null && !lazy._hasMetadata) {
@@ -787,7 +797,7 @@
   static bool hasDefaultValue(DefaultFormalParameter node) {
     var lazy = LazyFormalParameter.get(node);
     if (lazy != null) {
-      return lazy.data.defaultFormalParameter_defaultValue != null;
+      return AstBinaryFlags.hasInitializer(lazy.data.flags);
     } else {
       return node.defaultValue != null;
     }
@@ -1374,8 +1384,7 @@
   static bool isAbstract(MethodDeclaration node) {
     var lazy = get(node);
     if (lazy != null) {
-      return lazy.data.methodDeclaration_body.kind ==
-          LinkedNodeKind.emptyFunctionBody;
+      return AstBinaryFlags.isAbstract(lazy.data.flags);
     } else {
       return node.isAbstract;
     }
@@ -1802,7 +1811,7 @@
   static bool hasInitializer(VariableDeclaration node) {
     var lazy = get(node);
     if (lazy != null) {
-      return lazy.data.variableDeclaration_initializer != null;
+      return AstBinaryFlags.hasInitializer(lazy.data.flags);
     } else {
       return node.initializer != null;
     }
diff --git a/pkg/analyzer/lib/src/summary2/link.dart b/pkg/analyzer/lib/src/summary2/link.dart
index b3cd018..0d3c3ee 100644
--- a/pkg/analyzer/lib/src/summary2/link.dart
+++ b/pkg/analyzer/lib/src/summary2/link.dart
@@ -2,10 +2,9 @@
 // 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/analysis/declared_variables.dart';
 import 'package:analyzer/dart/analysis/features.dart';
-import 'package:analyzer/dart/analysis/session.dart';
 import 'package:analyzer/dart/ast/ast.dart' show CompilationUnit;
-import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/src/dart/element/element.dart';
 import 'package:analyzer/src/dart/element/inheritance_manager2.dart';
 import 'package:analyzer/src/generated/constant.dart';
@@ -14,7 +13,6 @@
 import 'package:analyzer/src/generated/source.dart';
 import 'package:analyzer/src/generated/type_system.dart';
 import 'package:analyzer/src/summary/format.dart';
-import 'package:analyzer/src/summary/idl.dart';
 import 'package:analyzer/src/summary/summary_sdk.dart';
 import 'package:analyzer/src/summary2/ast_binary_writer.dart';
 import 'package:analyzer/src/summary2/builder/source_library_builder.dart';
@@ -27,23 +25,20 @@
 import 'package:analyzer/src/summary2/type_alias.dart';
 import 'package:analyzer/src/summary2/types_builder.dart';
 
+var timerLinkingLinkingBundle = Stopwatch();
+var timerLinkingRemoveBundle = Stopwatch();
+
 LinkResult link(
-  AnalysisOptions analysisOptions,
-  SourceFactory sourceFactory,
-  DeclaredVariables declaredVariables,
-  List<LinkedNodeBundle> inputBundles,
+  LinkedElementFactory elementFactory,
   List<LinkInputLibrary> inputLibraries,
 ) {
-  var linker = Linker(analysisOptions, sourceFactory, declaredVariables);
-  linker.link(inputBundles, inputLibraries);
+  var linker = Linker(elementFactory);
+  linker.link(inputLibraries);
   return LinkResult(linker.linkingBundle);
 }
 
 class Linker {
-  final DeclaredVariables declaredVariables;
-
-  final Reference rootReference = Reference.root();
-  LinkedElementFactory elementFactory;
+  final LinkedElementFactory elementFactory;
 
   LinkedNodeBundleBuilder linkingBundle;
   LinkedBundleContext bundleContext;
@@ -52,16 +47,9 @@
   /// Libraries that are being linked.
   final Map<Uri, SourceLibraryBuilder> builders = {};
 
-  _AnalysisContextForLinking analysisContext;
-  TypeProvider typeProvider;
-  Dart2TypeSystem typeSystem;
-  InheritanceManager2 inheritance;
+  InheritanceManager2 inheritance; // TODO(scheglov) cache it
 
-  Linker(
-    AnalysisOptions analysisOptions,
-    SourceFactory sourceFactory,
-    this.declaredVariables,
-  ) {
+  Linker(this.elementFactory) {
     var dynamicRef = rootReference.getChild('dart:core').getChild('dynamic');
     dynamicRef.element = DynamicElementImpl.instance;
     var neverRef = rootReference.getChild('dart:core').getChild('Never');
@@ -69,34 +57,31 @@
 
     linkingBundleContext = LinkingBundleContext(dynamicRef);
 
-    analysisContext = _AnalysisContextForLinking(
-      analysisOptions,
-      sourceFactory,
-    );
-
-    elementFactory = LinkedElementFactory(
-      analysisContext,
-      _AnalysisSessionForLinking(),
-      rootReference,
-    );
-
     bundleContext = LinkedBundleContext.forAst(
       elementFactory,
       linkingBundleContext.references,
     );
   }
 
+  InternalAnalysisContext get analysisContext {
+    return elementFactory.analysisContext;
+  }
+
   FeatureSet get contextFeatures {
     return analysisContext.analysisOptions.contextFeatures;
   }
 
-  void link(List<LinkedNodeBundle> inputBundles,
-      List<LinkInputLibrary> inputLibraries) {
-    for (var input in inputBundles) {
-      var inputBundleContext = LinkedBundleContext(elementFactory, input);
-      elementFactory.addBundle(inputBundleContext);
-    }
+  DeclaredVariables get declaredVariables {
+    return analysisContext.declaredVariables;
+  }
 
+  Reference get rootReference => elementFactory.rootReference;
+
+  TypeProvider get typeProvider => analysisContext.typeProvider;
+
+  Dart2TypeSystem get typeSystem => analysisContext.typeSystem;
+
+  void link(List<LinkInputLibrary> inputLibraries) {
     for (var inputLibrary in inputLibraries) {
       SourceLibraryBuilder.build(this, inputLibrary);
     }
@@ -105,7 +90,14 @@
 
     _buildOutlines();
 
+    timerLinkingLinkingBundle.start();
     _createLinkingBundle();
+    timerLinkingLinkingBundle.stop();
+
+    timerLinkingRemoveBundle.start();
+    linkingBundleContext.clearIndexes();
+    elementFactory.removeBundle(bundleContext);
+    timerLinkingRemoveBundle.stop();
   }
 
   void _addSyntheticConstructors() {
@@ -209,7 +201,6 @@
             isSynthetic: unitContext.isSynthetic,
             uriStr: unitContext.uriStr,
             lineStarts: unit.lineInfo.lineStarts,
-            tokens: writer.tokensBuilder,
             node: unitLinkedNode,
           ),
         );
@@ -228,19 +219,17 @@
   }
 
   void _createTypeSystem() {
-    var coreRef = rootReference.getChild('dart:core');
-    var coreLib = elementFactory.elementOfReference(coreRef);
+    if (typeProvider != null) {
+      inheritance = InheritanceManager2(typeSystem);
+      return;
+    }
 
-    var asyncRef = rootReference.getChild('dart:async');
-    var asyncLib = elementFactory.elementOfReference(asyncRef);
+    var coreLib = elementFactory.libraryOfUri('dart:core');
+    var asyncLib = elementFactory.libraryOfUri('dart:async');
 
-    typeProvider = SummaryTypeProvider()
+    analysisContext.typeProvider = SummaryTypeProvider()
       ..initializeCore(coreLib)
       ..initializeAsync(asyncLib);
-    analysisContext.typeProvider = typeProvider;
-
-    typeSystem = Dart2TypeSystem(typeProvider);
-    analysisContext.typeSystem = typeSystem;
 
     inheritance = InheritanceManager2(typeSystem);
   }
@@ -307,32 +296,3 @@
 
   LinkResult(this.bundle);
 }
-
-class _AnalysisContextForLinking implements InternalAnalysisContext {
-  @override
-  final AnalysisOptions analysisOptions;
-
-  @override
-  final SourceFactory sourceFactory;
-
-  @override
-  TypeProvider typeProvider;
-
-  @override
-  TypeSystem typeSystem;
-
-  _AnalysisContextForLinking(this.analysisOptions, this.sourceFactory);
-
-  @override
-  Namespace getPublicNamespace(LibraryElement library) {
-    // TODO(scheglov) Not sure if this method of AnalysisContext is useful.
-    var builder = new NamespaceBuilder();
-    return builder.createPublicNamespaceForLibrary(library);
-  }
-
-  noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
-}
-
-class _AnalysisSessionForLinking implements AnalysisSession {
-  noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
-}
diff --git a/pkg/analyzer/lib/src/summary2/linked_element_factory.dart b/pkg/analyzer/lib/src/summary2/linked_element_factory.dart
index 37c4ef9..fae3510 100644
--- a/pkg/analyzer/lib/src/summary2/linked_element_factory.dart
+++ b/pkg/analyzer/lib/src/summary2/linked_element_factory.dart
@@ -28,6 +28,10 @@
     return _coreTypes ??= CoreTypes(this);
   }
 
+  bool get hasDartCore {
+    return libraryMap.containsKey('dart:core');
+  }
+
   void addBundle(LinkedBundleContext context) {
     libraryMap.addAll(context.libraryMap);
   }
@@ -78,6 +82,15 @@
     var reference = rootReference.getChild(uriStr);
     return elementOfReference(reference);
   }
+
+  /// We have linked the bundle, and need to disconnect its libraries, so
+  /// that the client can re-add the bundle, this time read from bytes.
+  void removeBundle(LinkedBundleContext context) {
+    for (var uriStr in context.libraryMap.keys) {
+      libraryMap.remove(uriStr);
+      rootReference.removeChild(uriStr);
+    }
+  }
 }
 
 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 fa3f72c..ad36d2f 100644
--- a/pkg/analyzer/lib/src/summary2/linked_unit_context.dart
+++ b/pkg/analyzer/lib/src/summary2/linked_unit_context.dart
@@ -10,13 +10,13 @@
 import 'package:analyzer/src/dart/ast/ast.dart';
 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/utilities_dart.dart';
 import 'package:analyzer/src/summary/idl.dart';
 import 'package:analyzer/src/summary2/ast_binary_reader.dart';
 import 'package:analyzer/src/summary2/lazy_ast.dart';
 import 'package:analyzer/src/summary2/linked_bundle_context.dart';
 import 'package:analyzer/src/summary2/reference.dart';
-import 'package:analyzer/src/summary2/tokens_context.dart';
 
 /// The context of a unit - the context of the bundle, and the unit tokens.
 class LinkedUnitContext {
@@ -27,7 +27,6 @@
   final Reference reference;
   final bool isSynthetic;
   final LinkedNodeUnit data;
-  final TokensContext tokensContext;
 
   AstBinaryReader _astReader;
 
@@ -53,8 +52,7 @@
       this.reference,
       this.isSynthetic,
       this.data,
-      {CompilationUnit unit})
-      : tokensContext = data != null ? TokensContext(data.tokens) : null {
+      {CompilationUnit unit}) {
     _astReader = AstBinaryReader(this);
     _astReader.isLazy = unit == null;
 
@@ -69,8 +67,7 @@
       this.uriStr,
       this.reference,
       this.isSynthetic,
-      this.data,
-      this.tokensContext);
+      this.data);
 
   bool get hasPartOfDirective {
     for (var directive in unit_withDirectives.directives) {
@@ -84,6 +81,9 @@
   /// Return `true` if this unit is a part of a bundle that is being linked.
   bool get isLinking => bundleContext.isLinking;
 
+  TypeProvider get typeProvider =>
+      bundleContext.elementFactory.analysisContext.typeProvider;
+
   CompilationUnit get unit => _unit;
 
   CompilationUnit get unit_withDeclarations {
@@ -144,7 +144,11 @@
     } else if (node is ClassTypeAlias) {
       return LazyClassTypeAlias.getCodeLength(_astReader, node);
     } else if (node is CompilationUnit) {
-      return node.length;
+      if (data != null) {
+        return data.node.codeLength;
+      } else {
+        return node.length;
+      }
     } else if (node is ConstructorDeclaration) {
       return LazyConstructorDeclaration.getCodeLength(_astReader, node);
     } else if (node is EnumDeclaration) {
@@ -200,14 +204,6 @@
     throw UnimplementedError('${node.runtimeType}');
   }
 
-  String getConstructorDeclarationName(LinkedNode node) {
-    var name = node.constructorDeclaration_name;
-    if (name != null) {
-      return getSimpleName(name);
-    }
-    return '';
-  }
-
   List<ConstructorInitializer> getConstructorInitializers(
     ConstructorDeclaration node,
   ) {
@@ -244,8 +240,7 @@
   }
 
   int getDirectiveOffset(AstNode node) {
-    LazyDirective.readMetadata(_astReader, node);
-    return node.offset;
+    return LazyDirective.getNameOffset(node);
   }
 
   Comment getDocumentationComment(AstNode node) {
@@ -324,10 +319,6 @@
     }
   }
 
-  String getFormalParameterName(LinkedNode node) {
-    return getSimpleName(node.normalFormalParameter_identifier);
-  }
-
   List<FormalParameter> getFormalParameters(AstNode node) {
     if (node is ConstructorDeclaration) {
       LazyConstructorDeclaration.readFormalParameters(_astReader, node);
@@ -498,10 +489,6 @@
     return const <Annotation>[];
   }
 
-  String getMethodName(LinkedNode node) {
-    return getSimpleName(node.methodDeclaration_name);
-  }
-
   Iterable<MethodDeclaration> getMethods(AstNode node) sync* {
     if (node is ClassOrMixinDeclaration) {
       var members = _getClassOrMixinMembers(node);
@@ -582,18 +569,6 @@
     return LazyDirective.getSelectedUri(node);
   }
 
-  String getSimpleName(LinkedNode node) {
-    return getTokenLexeme(node.simpleIdentifier_token);
-  }
-
-  List<String> getSimpleNameList(List<LinkedNode> nodeList) {
-    return nodeList.map(getSimpleName).toList();
-  }
-
-  int getSimpleOffset(LinkedNode node) {
-    return getTokenOffset(node.simpleIdentifier_token);
-  }
-
   String getStringContent(LinkedNode node) {
     return node.simpleStringLiteral_value;
   }
@@ -610,14 +585,6 @@
     }
   }
 
-  String getTokenLexeme(int token) {
-    return tokensContext.lexeme(token);
-  }
-
-  int getTokenOffset(int token) {
-    return tokensContext.offset(token);
-  }
-
   /// Return the actual type for the [node] - explicit or inferred.
   DartType getType(AstNode node) {
     if (node is DefaultFormalParameter) {
@@ -683,14 +650,6 @@
     }
   }
 
-  String getUnitMemberName(LinkedNode node) {
-    return getSimpleName(node.namedCompilationUnitMember_name);
-  }
-
-  String getVariableName(LinkedNode node) {
-    return getSimpleName(node.variableDeclaration_name);
-  }
-
   WithClause getWithClause(AstNode node) {
     if (node is ClassDeclaration) {
       LazyClassDeclaration.readWithClause(_astReader, node);
@@ -774,10 +733,6 @@
     }
   }
 
-  bool isAsyncKeyword(int token) {
-    return tokensContext.type(token) == UnlinkedTokenType.ASYNC;
-  }
-
   bool isConst(AstNode node) {
     if (node is FormalParameter) {
       return node.isConst;
@@ -789,14 +744,6 @@
     throw UnimplementedError('${node.runtimeType}');
   }
 
-  bool isConstKeyword(int token) {
-    return tokensContext.type(token) == UnlinkedTokenType.CONST;
-  }
-
-  bool isConstVariableList(LinkedNode node) {
-    return isConstKeyword(node.variableDeclarationList_keyword);
-  }
-
   bool isExplicitlyCovariant(AstNode node) {
     if (node is EnumConstantDeclaration) {
       return false;
@@ -833,14 +780,6 @@
     throw UnimplementedError('${node.runtimeType}');
   }
 
-  bool isFinalKeyword(int token) {
-    return tokensContext.type(token) == UnlinkedTokenType.FINAL;
-  }
-
-  bool isFinalVariableList(LinkedNode node) {
-    return isFinalKeyword(node.variableDeclarationList_keyword);
-  }
-
   bool isFunction(LinkedNode node) {
     return node.kind == LinkedNodeKind.functionDeclaration;
   }
@@ -883,10 +822,6 @@
     throw UnimplementedError('${node.runtimeType}');
   }
 
-  bool isLibraryKeyword(int token) {
-    return tokensContext.type(token) == UnlinkedTokenType.LIBRARY;
-  }
-
   bool isMethod(LinkedNode node) {
     return node.kind == LinkedNodeKind.methodDeclaration;
   }
@@ -917,10 +852,6 @@
     throw UnimplementedError('${node.runtimeType}');
   }
 
-  bool isSyncKeyword(int token) {
-    return tokensContext.type(token) == UnlinkedTokenType.SYNC;
-  }
-
   Expression readInitializer(AstNode node) {
     if (node is DefaultFormalParameter) {
       LazyFormalParameter.readDefaultValue(_astReader, node);
@@ -1032,7 +963,6 @@
       reference,
       isSynthetic,
       data,
-      TokensContext(data.tokens),
     );
     context._genericFunctionTypes.addAll(_genericFunctionTypes);
     var astReader = AstBinaryReader(context);
diff --git a/pkg/analyzer/lib/src/summary2/linking_bundle_context.dart b/pkg/analyzer/lib/src/summary2/linking_bundle_context.dart
index fd4148c..242a9e1 100644
--- a/pkg/analyzer/lib/src/summary2/linking_bundle_context.dart
+++ b/pkg/analyzer/lib/src/summary2/linking_bundle_context.dart
@@ -38,6 +38,16 @@
 
   LinkingBundleContext(this.dynamicReference);
 
+  /// We need indexes for references during linking, but once we are done,
+  /// we must clear indexes to make references ready for linking a next bundle.
+  void clearIndexes() {
+    for (var reference in references) {
+      if (reference != null) {
+        reference.index = null;
+      }
+    }
+  }
+
   int idOfGenericFunctionType(GenericFunctionTypeElement element) {
     return _genericFunctionTypes[element];
   }
diff --git a/pkg/analyzer/lib/src/summary2/reference.dart b/pkg/analyzer/lib/src/summary2/reference.dart
index 95c0ae7..bdc98fc 100644
--- a/pkg/analyzer/lib/src/summary2/reference.dart
+++ b/pkg/analyzer/lib/src/summary2/reference.dart
@@ -98,4 +98,8 @@
   }
 
   String toString() => parent == null ? 'root' : '$parent::$name';
+
+  void removeChild(String name) {
+    _children.remove(name);
+  }
 }
diff --git a/pkg/analyzer/lib/src/summary2/tokens_context.dart b/pkg/analyzer/lib/src/summary2/tokens_context.dart
index eb8f654..bae4d3bc 100644
--- a/pkg/analyzer/lib/src/summary2/tokens_context.dart
+++ b/pkg/analyzer/lib/src/summary2/tokens_context.dart
@@ -3,107 +3,11 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analyzer/dart/ast/token.dart';
-import 'package:analyzer/src/dart/ast/token.dart';
 import 'package:analyzer/src/summary/idl.dart';
 
 /// The context for reading tokens.
 class TokensContext {
-  final UnlinkedTokens _tokens;
-  final List<Token> _indexToToken;
-  final Map<Token, int> _tokenToIndex;
-
-  TokensContext(this._tokens)
-      : _indexToToken = List<Token>(_tokens.type.length),
-        _tokenToIndex = Map.identity();
-
-  String lexeme(int index) {
-    return _tokens.lexeme[index];
-  }
-
-  void linkTokens(Token from, Token to) {
-    var fromIndex = _tokenToIndex[from];
-    var toIndex = _tokenToIndex[to];
-    Token prevToken = null;
-    for (var index = fromIndex; index <= toIndex && index != 0;) {
-      var token = _indexToToken[index];
-      token ??= tokenOfIndex(index);
-
-      prevToken?.next = token;
-
-      prevToken = token;
-      index = _tokens.next[index];
-    }
-  }
-
-  int offset(int index) {
-    return _tokens.offset[index];
-  }
-
-  Token tokenOfIndex(int index) {
-    if (index == 0) return null;
-
-    var token = _indexToToken[index];
-    if (token == null) {
-      var kind = _tokens.kind[index];
-      switch (kind) {
-        case UnlinkedTokenKind.nothing:
-          return null;
-        case UnlinkedTokenKind.comment:
-          token = CommentToken(
-            _binaryToAstTokenType(_tokens.type[index]),
-            _tokens.lexeme[index],
-            _tokens.offset[index],
-          );
-          break;
-        case UnlinkedTokenKind.keyword:
-          token = KeywordToken(
-            _binaryToAstTokenType(_tokens.type[index]),
-            _tokens.offset[index],
-            _getCommentToken(_tokens.precedingComment[index]),
-          );
-          break;
-        case UnlinkedTokenKind.simple:
-          token = SimpleToken(
-            _binaryToAstTokenType(_tokens.type[index]),
-            _tokens.offset[index],
-            _getCommentToken(_tokens.precedingComment[index]),
-          );
-          break;
-        case UnlinkedTokenKind.string:
-          token = StringToken(
-            _binaryToAstTokenType(_tokens.type[index]),
-            _tokens.lexeme[index],
-            _tokens.offset[index],
-            _getCommentToken(_tokens.precedingComment[index]),
-          );
-          break;
-        default:
-          throw UnimplementedError('Token kind: $kind');
-      }
-      _indexToToken[index] = token;
-      _tokenToIndex[token] = index;
-    }
-    return token;
-  }
-
-  UnlinkedTokenType type(int index) {
-    return _tokens.type[index];
-  }
-
-  CommentToken _getCommentToken(int index) {
-    var result = tokenOfIndex(index);
-    var token = result;
-    while (true) {
-      index = _tokens.next[index];
-      if (index == 0) return result;
-
-      var nextToken = tokenOfIndex(index);
-      token.next = nextToken;
-      token = nextToken;
-    }
-  }
-
-  static TokenType _binaryToAstTokenType(UnlinkedTokenType type) {
+  static TokenType binaryToAstTokenType(UnlinkedTokenType type) {
     switch (type) {
       case UnlinkedTokenType.ABSTRACT:
         return Keyword.ABSTRACT;
diff --git a/pkg/analyzer/lib/src/summary2/tokens_writer.dart b/pkg/analyzer/lib/src/summary2/tokens_writer.dart
index 6668845..859e2ef 100644
--- a/pkg/analyzer/lib/src/summary2/tokens_writer.dart
+++ b/pkg/analyzer/lib/src/summary2/tokens_writer.dart
@@ -3,167 +3,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analyzer/dart/ast/token.dart';
-import 'package:analyzer/src/dart/ast/token.dart';
-import 'package:analyzer/src/summary/format.dart';
 import 'package:analyzer/src/summary/idl.dart';
-import 'package:meta/meta.dart';
 
 class TokensWriter {
-  final UnlinkedTokensBuilder _tokens = UnlinkedTokensBuilder();
-  final Map<Token, int> _tokenToIndex = Map.identity();
-
-  TokensWriter() {
-    _addToken(
-      null,
-      isSynthetic: true,
-      kind: UnlinkedTokenKind.nothing,
-      length: 0,
-      lexeme: '',
-      offset: 0,
-      precedingComment: 0,
-      type: UnlinkedTokenType.NOTHING,
-    );
-  }
-
-  UnlinkedTokensBuilder get tokensBuilder => _tokens;
-
-  int indexOfToken(Token token) {
-    if (token == null) return 0;
-
-    var index = _tokenToIndex[token];
-    if (index == null) {
-      throw StateError('Unexpected token: $token');
-    }
-    return index;
-  }
-
-  /// Write all the tokens from the [first] to the [last] inclusively.
-  void writeTokens(Token first, Token last) {
-    if (first is CommentToken) {
-      first = (first as CommentToken).parent;
-    }
-
-    var endGroupToBeginIndexMap = <Token, int>{};
-    var previousIndex = 0;
-    for (var token = first;; token = token.next) {
-      var index = _writeToken(token);
-
-      if (previousIndex != 0) {
-        _tokens.next[previousIndex] = index;
-      }
-      previousIndex = index;
-
-      if (token.endGroup != null) {
-        endGroupToBeginIndexMap[token.endGroup] = index;
-      }
-
-      var beginIndex = endGroupToBeginIndexMap[token];
-      if (beginIndex != null) {
-        _tokens.endGroup[beginIndex] = index;
-      }
-
-      if (token == last) break;
-    }
-  }
-
-  int _addToken(
-    Token token, {
-    @required bool isSynthetic,
-    @required UnlinkedTokenKind kind,
-    @required int length,
-    @required String lexeme,
-    @required int offset,
-    @required int precedingComment,
-    @required UnlinkedTokenType type,
-  }) {
-    _tokens.endGroup.add(0);
-    _tokens.isSynthetic.add(isSynthetic);
-    _tokens.kind.add(kind);
-    _tokens.length.add(length);
-    _tokens.lexeme.add(lexeme);
-    _tokens.next.add(0);
-    _tokens.offset.add(offset);
-    _tokens.precedingComment.add(precedingComment);
-    _tokens.type.add(type);
-
-    var index = _tokenToIndex.length;
-    _tokenToIndex[token] = index;
-    return index;
-  }
-
-  int _writeCommentToken(CommentToken token) {
-    if (token == null) return 0;
-
-    int firstIndex = null;
-    var previousIndex = 0;
-    while (token != null) {
-      var index = _addToken(
-        token,
-        isSynthetic: false,
-        kind: UnlinkedTokenKind.comment,
-        length: token.length,
-        lexeme: token.lexeme,
-        offset: token.offset,
-        precedingComment: 0,
-        type: _astToBinaryTokenType(token.type),
-      );
-      firstIndex ??= index;
-
-      if (previousIndex != 0) {
-        _tokens.next[previousIndex] = index;
-      }
-      previousIndex = index;
-
-      token = token.next;
-    }
-
-    return firstIndex;
-  }
-
-  int _writeToken(Token token) {
-    assert(_tokenToIndex[token] == null);
-
-    var commentIndex = _writeCommentToken(token.precedingComments);
-
-    if (token is KeywordToken) {
-      return _addToken(
-        token,
-        isSynthetic: token.isSynthetic,
-        kind: UnlinkedTokenKind.keyword,
-        lexeme: token.lexeme,
-        offset: token.offset,
-        length: token.length,
-        precedingComment: commentIndex,
-        type: _astToBinaryTokenType(token.type),
-      );
-    } else if (token is StringToken) {
-      return _addToken(
-        token,
-        isSynthetic: token.isSynthetic,
-        kind: UnlinkedTokenKind.string,
-        lexeme: token.lexeme,
-        offset: token.offset,
-        length: token.length,
-        precedingComment: commentIndex,
-        type: _astToBinaryTokenType(token.type),
-      );
-    } else if (token is SimpleToken) {
-      return _addToken(
-        token,
-        isSynthetic: token.isSynthetic,
-        kind: UnlinkedTokenKind.simple,
-        lexeme: token.lexeme,
-        offset: token.offset,
-        length: token.length,
-        precedingComment: commentIndex,
-        type: _astToBinaryTokenType(token.type),
-      );
-    } else {
-      throw UnimplementedError('(${token.runtimeType}) $token');
-    }
-  }
-
-  static UnlinkedTokenType _astToBinaryTokenType(TokenType type) {
+  static UnlinkedTokenType astToBinaryTokenType(TokenType type) {
     if (type == Keyword.ABSTRACT) {
       return UnlinkedTokenType.ABSTRACT;
     } else if (type == TokenType.AMPERSAND) {
diff --git a/pkg/analyzer/lib/src/summary2/type_alias.dart b/pkg/analyzer/lib/src/summary2/type_alias.dart
index cc1830b..79e8ba8 100644
--- a/pkg/analyzer/lib/src/summary2/type_alias.dart
+++ b/pkg/analyzer/lib/src/summary2/type_alias.dart
@@ -95,7 +95,9 @@
 
     if (node is TypeName) {
       var element = node.name.staticElement;
-      if (element is ElementImpl) {
+      if (element is ElementImpl &&
+          element.enclosingElement != null &&
+          element.linkedContext.isLinking) {
         var typeNode = element.linkedNode;
         if (typeNode == self) {
           hasSelfReference = true;
@@ -122,8 +124,8 @@
             _typeParameterList(typeNode.typeParameters);
           }
         }
-        _argumentList(node.typeArguments);
       }
+      _argumentList(node.typeArguments);
     } else if (node is GenericFunctionType) {
       _typeParameterList(node.typeParameters);
       _formalParameterList(node.parameters);
diff --git a/pkg/analyzer/test/generated/compile_time_error_code.dart b/pkg/analyzer/test/generated/compile_time_error_code.dart
index 9d25dc4..9006d01 100644
--- a/pkg/analyzer/test/generated/compile_time_error_code.dart
+++ b/pkg/analyzer/test/generated/compile_time_error_code.dart
@@ -6,7 +6,6 @@
 
 import 'package:analyzer/dart/analysis/declared_variables.dart';
 import 'package:analyzer/error/error.dart';
-import 'package:analyzer/src/dart/analysis/driver.dart';
 import 'package:analyzer/src/dart/analysis/experiments.dart';
 import 'package:analyzer/src/error/codes.dart';
 import 'package:analyzer/src/generated/parser.dart' show ParserErrorCode;
@@ -1875,23 +1874,18 @@
   }
 
   test_genericFunctionTypedParameter() async {
-    // TODO(paulberry): remove when dartbug.com/28515 fixed.
-    if (AnalysisDriver.useSummary2) {
-      await assertNoErrorsInCode('''
-void g(T f<T>(T x)) {}
-''');
-    } else {
-      await assertErrorsInCode('''
+    // Once dartbug.com/28515 is fixed, this syntax should no longer generate an
+    // error.
+    await assertErrorsInCode('''
 void g(T f<T>(T x)) {}
 ''', [
-        // Due to dartbug.com/28515, some additional errors appear when using the
-        // new analysis driver.
-        error(StaticWarningCode.UNDEFINED_CLASS, 7, 1),
-        error(CompileTimeErrorCode.GENERIC_FUNCTION_TYPED_PARAM_UNSUPPORTED, 7,
-            11),
-        error(StaticWarningCode.UNDEFINED_CLASS, 14, 1),
-      ]);
-    }
+      // Due to dartbug.com/28515, some additional errors appear when using the
+      // new analysis driver.
+      error(StaticWarningCode.UNDEFINED_CLASS, 7, 1),
+      error(
+          CompileTimeErrorCode.GENERIC_FUNCTION_TYPED_PARAM_UNSUPPORTED, 7, 11),
+      error(StaticWarningCode.UNDEFINED_CLASS, 14, 1),
+    ]);
   }
 
   test_implementsDeferredClass() async {
diff --git a/pkg/analyzer/test/generated/declaration_resolver_test.dart b/pkg/analyzer/test/generated/declaration_resolver_test.dart
index f2ac4f2..db29c01 100644
--- a/pkg/analyzer/test/generated/declaration_resolver_test.dart
+++ b/pkg/analyzer/test/generated/declaration_resolver_test.dart
@@ -6,7 +6,6 @@
 
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/element/element.dart';
-import 'package:analyzer/src/dart/analysis/driver.dart';
 import 'package:analyzer/src/dart/ast/ast.dart';
 import 'package:analyzer/src/dart/ast/utilities.dart';
 import 'package:analyzer/src/dart/element/element.dart';
@@ -21,11 +20,6 @@
 import 'test_support.dart';
 
 main() {
-  // With summary2 DeclarationResolver is not used.
-  if (AnalysisDriver.useSummary2) {
-    return;
-  }
-
   defineReflectiveSuite(() {
     defineReflectiveTests(DeclarationResolverMetadataTest);
     defineReflectiveTests(DeclarationResolverTest);
diff --git a/pkg/analyzer/test/generated/strong_mode_test.dart b/pkg/analyzer/test/generated/strong_mode_test.dart
index 4d44cbd..3c538c8 100644
--- a/pkg/analyzer/test/generated/strong_mode_test.dart
+++ b/pkg/analyzer/test/generated/strong_mode_test.dart
@@ -2698,12 +2698,8 @@
     var stmts = body.block.statements;
     for (ExpressionStatement stmt in stmts) {
       MethodInvocation invoke = stmt.expression;
-      FunctionType fType = invoke.staticInvokeType;
-      if (AnalysisDriver.useSummary2) {
-        expect('$fType', '((T) → T, (T, T) → int, (T) → T) → void');
-      } else {
-        expect(fType.typeArguments[0].toString(), 'T');
-      }
+      ParameterizedType fType = invoke.staticInvokeType;
+      expect(fType.typeArguments[0].toString(), 'T');
     }
   }
 
@@ -3906,18 +3902,76 @@
 }
 
 @reflectiveTest
-class StrongModeStaticTypeAnalyzer2Test extends StaticTypeAnalyzer2TestShared {
-  void expectStaticInvokeType(String search, String type) {
-    var invocation = findIdentifier(search).parent as MethodInvocation;
-    expect(invocation.staticInvokeType.toString(), type);
-  }
-
+class StrongModeStaticTypeAnalyzer2Test extends StaticTypeAnalyzer2TestShared
+    with StrongModeStaticTypeAnalyzer2TestCases {
   void setUp() {
     super.setUp();
     AnalysisOptionsImpl options = new AnalysisOptionsImpl();
     resetWith(options: options);
   }
 
+  @failingTest
+  @override
+  test_genericFunction_parameter() {
+    return super.test_genericFunction_parameter();
+  }
+
+  @failingTest
+  @override
+  test_genericMethod_functionExpressionInvocation_functionTypedParameter_explicit() {
+    return super
+        .test_genericMethod_functionExpressionInvocation_functionTypedParameter_explicit();
+  }
+
+  @failingTest
+  @override
+  test_genericMethod_functionExpressionInvocation_functionTypedParameter_inferred() {
+    return super
+        .test_genericMethod_functionExpressionInvocation_functionTypedParameter_inferred();
+  }
+
+  @failingTest
+  @override
+  test_genericMethod_functionInvocation_functionTypedParameter_explicit() {
+    return super
+        .test_genericMethod_functionInvocation_functionTypedParameter_explicit();
+  }
+
+  @failingTest
+  @override
+  test_genericMethod_functionInvocation_functionTypedParameter_inferred() {
+    return super
+        .test_genericMethod_functionInvocation_functionTypedParameter_inferred();
+  }
+
+  @failingTest
+  @override
+  test_genericMethod_functionTypedParameter_tearoff() {
+    return super.test_genericMethod_functionTypedParameter_tearoff();
+  }
+
+  @override
+  @failingTest
+  test_genericMethod_nestedCaptureBounds() {
+    // https://github.com/dart-lang/sdk/issues/30236
+    return super.test_genericMethod_nestedCaptureBounds();
+  }
+
+  @override
+  @failingTest
+  test_genericMethod_tearoff_instantiated() {
+    return super.test_genericMethod_tearoff_instantiated();
+  }
+}
+
+/// Test cases for [StrongModeStaticTypeAnalyzer2Test]
+mixin StrongModeStaticTypeAnalyzer2TestCases
+    implements StaticTypeAnalyzer2TestShared {
+  void expectStaticInvokeType(String search, String type) {
+    var invocation = findIdentifier(search).parent as MethodInvocation;
+    expect(invocation.staticInvokeType.toString(), type);
+  }
+
   test_dynamicObjectGetter_hashCode() async {
     String code = r'''
 main() {
@@ -3999,13 +4053,15 @@
   }
 
   test_genericFunction_parameter() async {
-    // TODO(paulberry): remove when dartbug.com/28515 fixed.
-    if (!AnalysisDriver.useSummary2) return;
-
     await resolveTestUnit(r'''
 void g(T f<T>(T x)) {}
-''');
-    var type = expectFunctionType2('f', '<T>(T) → T');
+''', noErrors: false // TODO(paulberry): remove when dartbug.com/28515 fixed.
+        );
+    expectFunctionType('f', '<T>(T) → T',
+        elementTypeParams: '[]', typeFormals: '[T]');
+    SimpleIdentifier f = findIdentifier('f');
+    ParameterElementImpl e = f.staticElement;
+    FunctionType type = e.type;
     FunctionType ft = type.instantiate([typeProvider.stringType]);
     expect(ft.toString(), '(String) → String');
   }
@@ -4170,33 +4226,26 @@
   }
 
   test_genericMethod_functionExpressionInvocation_functionTypedParameter_explicit() async {
-    // TODO(paulberry): remove when dartbug.com/28515 fixed.
-    if (!AnalysisDriver.useSummary2) return;
-
     await resolveTestUnit(r'''
 void test<S>(T pf<T>(T e)) {
   var paramCall = (pf)<int>(3);
 }
-''');
+''', noErrors: false // TODO(paulberry): remove when dartbug.com/28515 fixed.
+        );
     expectIdentifierType('paramCall', "int");
   }
 
   test_genericMethod_functionExpressionInvocation_functionTypedParameter_inferred() async {
-    // TODO(paulberry): remove when dartbug.com/28515 fixed.
-    if (!AnalysisDriver.useSummary2) return;
-
     await resolveTestUnit(r'''
 void test<S>(T pf<T>(T e)) {
   var paramCall = (pf)(3);
 }
-''');
+''', noErrors: false // TODO(paulberry): remove when dartbug.com/28515 fixed.
+        );
     expectIdentifierType('paramCall', "int");
   }
 
   test_genericMethod_functionExpressionInvocation_inferred() async {
-    // TODO(paulberry): remove when dartbug.com/28515 fixed.
-    if (!AnalysisDriver.useSummary2) return;
-
     await resolveTestUnit(r'''
 class C<E> {
   T f<T>(T e) => null;
@@ -4219,7 +4268,8 @@
   var localCall = (lf)(3);
   var paramCall = (pf)(3);
 }
-''');
+''', noErrors: false // TODO(paulberry): remove when dartbug.com/28515 fixed.
+        );
     expectIdentifierType('methodCall', "int");
     expectIdentifierType('staticCall', "int");
     expectIdentifierType('staticFieldCall', "int");
@@ -4262,26 +4312,22 @@
   }
 
   test_genericMethod_functionInvocation_functionTypedParameter_explicit() async {
-    // TODO(paulberry): remove when dartbug.com/28515 fixed.
-    if (!AnalysisDriver.useSummary2) return;
-
     await resolveTestUnit(r'''
 void test<S>(T pf<T>(T e)) {
   var paramCall = pf<int>(3);
 }
-''');
+''', noErrors: false // TODO(paulberry): remove when dartbug.com/28515 fixed.
+        );
     expectIdentifierType('paramCall', "int");
   }
 
   test_genericMethod_functionInvocation_functionTypedParameter_inferred() async {
-    // TODO(paulberry): remove when dartbug.com/28515 fixed.
-    if (!AnalysisDriver.useSummary2) return;
-
     await resolveTestUnit(r'''
 void test<S>(T pf<T>(T e)) {
   var paramCall = pf(3);
 }
-''');
+''', noErrors: false // TODO(paulberry): remove when dartbug.com/28515 fixed.
+        );
     expectIdentifierType('paramCall', "int");
   }
 
@@ -4339,14 +4385,12 @@
   }
 
   test_genericMethod_functionTypedParameter_tearoff() async {
-    // TODO(paulberry): remove when dartbug.com/28515 fixed.
-    if (!AnalysisDriver.useSummary2) return;
-
     await resolveTestUnit(r'''
 void test<S>(T pf<T>(T e)) {
   var paramTearOff = pf;
 }
-''');
+''', noErrors: false // TODO(paulberry): remove when dartbug.com/28515 fixed.
+        );
     expectIdentifierType('paramTearOff', "<T>(T) → T");
   }
 
@@ -4457,7 +4501,6 @@
     expectIdentifierType('f;', '<S₀>(S₀) → S');
   }
 
-  @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/30236')
   test_genericMethod_nestedCaptureBounds() async {
     await resolveTestUnit(r'''
 class C<T> {
@@ -4667,7 +4710,6 @@
     expectIdentifierType('paramTearOff', "<T>(T) → T");
   }
 
-  @failingTest
   test_genericMethod_tearoff_instantiated() async {
     await resolveTestUnit(r'''
 class C<E> {
diff --git a/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart b/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart
index 83168dd..73fc758 100644
--- a/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart
@@ -1204,11 +1204,7 @@
     FunctionExpressionInvocation invocation = field.initializer;
     FunctionExpression closure = invocation.function.unParenthesized;
     FunctionElementImpl closureElement = closure.declaredElement;
-    if (AnalysisDriver.useSummary2) {
-      expect(closureElement.enclosingElement, same(field.declaredElement));
-    } else {
-      expect(closureElement.enclosingElement, same(fieldInitializer));
-    }
+    expect(closureElement.enclosingElement, same(fieldInitializer));
   }
 
   test_closure_inTopLevelVariable() async {
@@ -1226,11 +1222,7 @@
     FunctionExpressionInvocation invocation = variable.initializer;
     FunctionExpression closure = invocation.function.unParenthesized;
     FunctionElementImpl closureElement = closure.declaredElement;
-    if (AnalysisDriver.useSummary2) {
-      expect(closureElement.enclosingElement, same(variable.declaredElement));
-    } else {
-      expect(closureElement.enclosingElement, same(variableInitializer));
-    }
+    expect(closureElement.enclosingElement, same(variableInitializer));
   }
 
   test_conditionalExpression() async {
diff --git a/pkg/analyzer/test/src/summary/resynthesize_ast2_test.dart b/pkg/analyzer/test/src/summary/resynthesize_ast2_test.dart
index 9677dbf..041f812 100644
--- a/pkg/analyzer/test/src/summary/resynthesize_ast2_test.dart
+++ b/pkg/analyzer/test/src/summary/resynthesize_ast2_test.dart
@@ -2,12 +2,13 @@
 // 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/analysis/session.dart';
 import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/src/dart/analysis/restricted_analysis_context.dart';
+import 'package:analyzer/src/dart/analysis/session.dart';
 import 'package:analyzer/src/dart/element/element.dart';
 import 'package:analyzer/src/generated/engine.dart';
-import 'package:analyzer/src/generated/resolver.dart';
 import 'package:analyzer/src/generated/source.dart';
-import 'package:analyzer/src/generated/type_system.dart';
 import 'package:analyzer/src/summary/idl.dart';
 import 'package:analyzer/src/summary/summary_sdk.dart';
 import 'package:analyzer/src/summary2/link.dart';
@@ -50,14 +51,25 @@
       );
     }
 
-    var sdkLinkResult = link(
-      AnalysisOptionsImpl(),
-      sourceFactory,
-      declaredVariables,
-      [],
-      inputLibraries,
+    var rootReference = Reference.root();
+    var dartCoreRef = rootReference.getChild('dart:core');
+    dartCoreRef.getChild('dynamic').element = DynamicElementImpl.instance;
+    dartCoreRef.getChild('Never').element = NeverElementImpl.instance;
+
+    var elementFactory = LinkedElementFactory(
+      RestrictedAnalysisContext(
+        SynchronousSession(
+          AnalysisOptionsImpl(),
+          declaredVariables,
+        ),
+        sourceFactory,
+      ),
+      _AnalysisSessionForLinking(),
+      rootReference,
     );
 
+    var sdkLinkResult = link(elementFactory, inputLibraries);
+
     var bytes = sdkLinkResult.bundle.toBuffer();
     return _sdkBundle = LinkedNodeBundle.fromBuffer(bytes);
   }
@@ -70,16 +82,14 @@
     var inputLibraries = <LinkInputLibrary>[];
     _addNonDartLibraries(Set(), inputLibraries, source);
 
-    var linkResult = link(
-      AnalysisOptionsImpl()..contextFeatures = featureSet,
+    var analysisContext = RestrictedAnalysisContext(
+      SynchronousSession(
+        AnalysisOptionsImpl()..contextFeatures = featureSet,
+        declaredVariables,
+      ),
       sourceFactory,
-      declaredVariables,
-      [sdkBundle],
-      inputLibraries,
     );
 
-    var analysisContext = _FakeAnalysisContext(sourceFactory);
-
     var rootReference = Reference.root();
     rootReference.getChild('dart:core').getChild('dynamic').element =
         DynamicElementImpl.instance;
@@ -88,26 +98,33 @@
 
     var elementFactory = LinkedElementFactory(
       analysisContext,
-      null,
+      _AnalysisSessionForLinking(),
       rootReference,
     );
     elementFactory.addBundle(
       LinkedBundleContext(elementFactory, sdkBundle),
     );
+
+    var linkResult = link(
+      elementFactory,
+      inputLibraries,
+    );
+
     elementFactory.addBundle(
       LinkedBundleContext(elementFactory, linkResult.bundle),
     );
 
-    var dartCore = elementFactory.libraryOfUri('dart:core');
-    var dartAsync = elementFactory.libraryOfUri('dart:async');
-    var typeProvider = SummaryTypeProvider()
-      ..initializeCore(dartCore)
-      ..initializeAsync(dartAsync);
-    analysisContext.typeProvider = typeProvider;
-    analysisContext.typeSystem = Dart2TypeSystem(typeProvider);
+    if (analysisContext.typeProvider == null) {
+      var dartCore = elementFactory.libraryOfUri('dart:core');
+      var dartAsync = elementFactory.libraryOfUri('dart:async');
+      var typeProvider = SummaryTypeProvider()
+        ..initializeCore(dartCore)
+        ..initializeAsync(dartAsync);
+      analysisContext.typeProvider = typeProvider;
 
-    dartCore.createLoadLibraryFunction(typeProvider);
-    dartAsync.createLoadLibraryFunction(typeProvider);
+      dartCore.createLoadLibraryFunction(typeProvider);
+      dartAsync.createLoadLibraryFunction(typeProvider);
+    }
 
     return elementFactory.libraryOfUri('${source.uri}');
   }
@@ -199,17 +216,6 @@
   }
 }
 
-class _FakeAnalysisContext implements AnalysisContext {
-  final SourceFactory sourceFactory;
-  TypeProvider typeProvider;
-  Dart2TypeSystem typeSystem;
-
-  _FakeAnalysisContext(this.sourceFactory);
-
-  @override
-  AnalysisOptions get analysisOptions {
-    return AnalysisOptionsImpl();
-  }
-
+class _AnalysisSessionForLinking implements AnalysisSession {
   noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
 }
diff --git a/pkg/analyzer/test/src/summary2/ast_binary_writer_integration_test.dart b/pkg/analyzer/test/src/summary2/ast_binary_writer_integration_test.dart
deleted file mode 100644
index 1fc7fae..0000000
--- a/pkg/analyzer/test/src/summary2/ast_binary_writer_integration_test.dart
+++ /dev/null
@@ -1,122 +0,0 @@
-// 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 'dart:io';
-
-import 'package:analyzer/file_system/physical_file_system.dart';
-import 'package:analyzer/source/line_info.dart';
-import 'package:analyzer/src/summary/format.dart';
-import 'package:analyzer/src/summary/idl.dart';
-import 'package:analyzer/src/summary2/ast_binary_reader.dart';
-import 'package:analyzer/src/summary2/ast_binary_writer.dart';
-import 'package:analyzer/src/summary2/ast_text_printer.dart';
-import 'package:analyzer/src/summary2/linked_bundle_context.dart';
-import 'package:analyzer/src/summary2/linked_element_factory.dart';
-import 'package:analyzer/src/summary2/linked_unit_context.dart';
-import 'package:analyzer/src/summary2/linking_bundle_context.dart';
-import 'package:analyzer/src/summary2/reference.dart';
-import 'package:front_end/src/testing/package_root.dart' as package_root;
-import 'package:test/test.dart';
-
-import '../dart/ast/parse_base.dart';
-
-main() {
-  group('AstBinaryWriter |', () {
-    _buildTests();
-  });
-}
-
-/// Parse the [code] into AST, serialize using [AstBinaryWriter], read using
-/// [AstBinaryReader], and dump back into code. The resulting code must be
-/// the same as the input [code].
-///
-/// Whitespaces and newlines are normalized and ignored.
-/// Files with parsing errors are silently skipped.
-void _assertCode(ParseBase base, String code) {
-  code = code.trimRight();
-  code = code.replaceAll('\t', ' ');
-  code = code.replaceAll('\r\n', '\n');
-  code = code.replaceAll('\r', '\n');
-
-  LineInfo lineInfo;
-  LinkedNodeUnit linkedNodeUnit;
-  {
-    var path = base.newFile('/home/test/lib/test.dart', content: code).path;
-
-    ParseResult parseResult;
-    try {
-      parseResult = base.parseUnit(path);
-    } catch (e) {
-      return;
-    }
-
-    // Code with parsing errors cannot be restored.
-    if (parseResult.errors.isNotEmpty) {
-      return;
-    }
-
-    lineInfo = parseResult.lineInfo;
-    var originalUnit = parseResult.unit;
-
-    var rootReference = Reference.root();
-    var dynamicRef = rootReference.getChild('dart:core').getChild('dynamic');
-
-    var linkingBundleContext = LinkingBundleContext(dynamicRef);
-    var writer = AstBinaryWriter(linkingBundleContext);
-    var unitLinkedNode = writer.writeNode(originalUnit);
-
-    linkedNodeUnit = LinkedNodeUnitBuilder(
-      node: unitLinkedNode,
-      tokens: writer.tokensBuilder,
-    );
-  }
-
-  var rootReference = Reference.root();
-  var bundleContext = LinkedBundleContext(
-    LinkedElementFactory(null, null, rootReference),
-    LinkedNodeBundleBuilder(
-      references: LinkedNodeReferencesBuilder(name: ['']),
-    ),
-  );
-  var unitContext = LinkedUnitContext(
-    bundleContext,
-    null,
-    0,
-    null,
-    null,
-    false,
-    linkedNodeUnit,
-  );
-
-  var reader = AstBinaryReader(unitContext);
-  var deserializedUnit = reader.readNode(linkedNodeUnit.node);
-
-  var buffer = StringBuffer();
-  deserializedUnit.accept(
-    AstTextPrinter(buffer, lineInfo),
-  );
-
-  expect(buffer.toString(), code);
-}
-
-void _buildTests() {
-  var provider = PhysicalResourceProvider.INSTANCE;
-  var pathContext = provider.pathContext;
-
-  var packageRoot = pathContext.normalize(package_root.packageRoot);
-  var dartFiles = Directory(packageRoot)
-      .listSync(recursive: true)
-      .whereType<File>()
-      .where((e) => e.path.endsWith('.dart'))
-      .toList();
-
-  var base = ParseBase();
-  for (var file in dartFiles) {
-    var relPath = pathContext.relative(file.path, from: packageRoot);
-    test(relPath, () {
-      var code = file.readAsStringSync();
-      _assertCode(base, code);
-    });
-  }
-}
diff --git a/pkg/analyzer/test/src/summary2/ast_binary_writer_test.dart b/pkg/analyzer/test/src/summary2/ast_binary_writer_test.dart
deleted file mode 100644
index b195dca..0000000
--- a/pkg/analyzer/test/src/summary2/ast_binary_writer_test.dart
+++ /dev/null
@@ -1,160 +0,0 @@
-// 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/src/dart/analysis/experiments.dart';
-import 'package:analyzer/src/generated/engine.dart';
-import 'package:analyzer/src/summary/format.dart';
-import 'package:analyzer/src/summary2/ast_binary_reader.dart';
-import 'package:analyzer/src/summary2/ast_binary_writer.dart';
-import 'package:analyzer/src/summary2/linked_bundle_context.dart';
-import 'package:analyzer/src/summary2/linked_element_factory.dart';
-import 'package:analyzer/src/summary2/linked_unit_context.dart';
-import 'package:analyzer/src/summary2/linking_bundle_context.dart';
-import 'package:analyzer/src/summary2/reference.dart';
-import 'package:test/test.dart';
-import 'package:test_reflective_loader/test_reflective_loader.dart';
-
-import '../dart/resolution/driver_resolution.dart';
-
-main() {
-  defineReflectiveSuite(() {
-    defineReflectiveTests(AstBinaryWriterTest);
-  });
-}
-
-/// Just a very simple test that at least something works.
-@reflectiveTest
-class AstBinaryWriterTest extends DriverResolutionTest {
-  @override
-  AnalysisOptionsImpl get analysisOptions => AnalysisOptionsImpl()
-    ..enabledExperiments = [
-      EnableString.non_nullable,
-    ];
-
-  test_classTypeAlias() async {
-    _assertUnresolvedCode('''
-mixin M1 {}
-mixin M2 {}
-
-class I1 {}
-class I2 {}
-
-class X = Object with M1, M2 implements I1, I2;
-''');
-  }
-
-  test_configuration() async {
-    _assertUnresolvedCode('''
-import 'dart:math'
-  if (a.b.c == 'd1') 'e1'
-  if (a.b.c == 'd2') 'e2';
-''');
-  }
-
-  test_emptyStatement() async {
-    _assertUnresolvedCode('''
-main() {
-  if (true);
-}
-''');
-  }
-
-  test_forElement() async {
-    _assertUnresolvedCode('''
-main() {
-  return [1, for (var i = 0; i < 10; i++) i * i, 2];
-}
-''');
-  }
-
-  test_ifElement() async {
-    _assertUnresolvedCode('''
-main(bool b) {
-  return [1, if (b) 2 else 3, 4];
-}
-''');
-  }
-
-  test_labeledStatement() async {
-    _assertUnresolvedCode('''
-main() {
-  a: b: 42;
-}
-''');
-  }
-
-  test_scriptTag() async {
-    _assertUnresolvedCode('''
-#!/bin/dart
-
-main() {}
-''');
-  }
-
-  test_simple() async {
-    _assertUnresolvedCode('''
-const zero = 0;
-
-@zero
-class A<T extends num> {}
-
-class B extends A<int> {}
-
-void f() { // ref
-  1 + 2.0;
-  <double>[1, 2];
-}
-''');
-  }
-
-  test_spreadElement() async {
-    _assertUnresolvedCode('''
-main() {
-var a = [1, 2, 3];
-  return [...a];
-}
-''');
-  }
-
-  void _assertUnresolvedCode(String inputCode) {
-    var path = convertPath('/test/lib/test.dart');
-    newFile(path, content: inputCode);
-
-    var parseResult = driver.parseFileSync(path);
-    var originalUnit = parseResult.unit;
-    var originalCode = originalUnit.toSource();
-
-    var rootReference = Reference.root();
-    var dynamicRef = rootReference.getChild('dart:core').getChild('dynamic');
-
-    var linkingBundleContext = LinkingBundleContext(dynamicRef);
-    var writer = AstBinaryWriter(linkingBundleContext);
-    var builder = writer.writeNode(originalUnit);
-
-    var bundleContext = LinkedBundleContext(
-      LinkedElementFactory(null, null, rootReference),
-      LinkedNodeBundleBuilder(
-        references: LinkedNodeReferencesBuilder(name: ['']),
-      ),
-    );
-    var unitContext = LinkedUnitContext(
-      bundleContext,
-      null,
-      0,
-      null,
-      null,
-      false,
-      LinkedNodeUnitBuilder(
-        node: builder,
-        tokens: writer.tokensBuilder,
-      ),
-    );
-
-    var reader = AstBinaryReader(unitContext);
-    var deserializedUnit = reader.readNode(builder);
-    var deserializedCode = deserializedUnit.toSource();
-
-    expect(deserializedCode, originalCode);
-  }
-}
diff --git a/pkg/analyzer/test/src/summary2/test_all.dart b/pkg/analyzer/test/src/summary2/test_all.dart
index d7b4c0b..bff7e8b 100644
--- a/pkg/analyzer/test/src/summary2/test_all.dart
+++ b/pkg/analyzer/test/src/summary2/test_all.dart
@@ -4,12 +4,10 @@
 
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
-import 'ast_binary_writer_test.dart' as ast_binary_writer;
 import 'ast_text_printer_test.dart' as ast_text_printer;
 
 main() {
   defineReflectiveSuite(() {
-    ast_binary_writer.main();
     ast_text_printer.main();
   }, name: 'summary2');
 }