diff --git a/pkg/analysis_server/lib/src/computer/computer_highlights.dart b/pkg/analysis_server/lib/src/computer/computer_highlights.dart
index 0d20c79..68e4192 100644
--- a/pkg/analysis_server/lib/src/computer/computer_highlights.dart
+++ b/pkg/analysis_server/lib/src/computer/computer_highlights.dart
@@ -336,7 +336,11 @@
   bool _addIdentifierRegion_keyword(SimpleIdentifier node) {
     var name = node.name;
     if (name == 'void') {
-      return _addRegion_node(node, HighlightRegionType.KEYWORD);
+      return _addRegion_node(
+        node,
+        HighlightRegionType.KEYWORD,
+        semanticTokenModifiers: {CustomSemanticTokenModifiers.void_},
+      );
     }
     return false;
   }
diff --git a/pkg/analysis_server/lib/src/computer/computer_hover.dart b/pkg/analysis_server/lib/src/computer/computer_hover.dart
index b6850c2..8ec1bb5 100644
--- a/pkg/analysis_server/lib/src/computer/computer_hover.dart
+++ b/pkg/analysis_server/lib/src/computer/computer_hover.dart
@@ -20,8 +20,14 @@
   final DartdocDirectiveInfo _dartdocInfo;
   final CompilationUnit _unit;
   final int _offset;
+  final bool multilineElementDescriptions;
 
-  DartUnitHoverComputer(this._dartdocInfo, this._unit, this._offset);
+  DartUnitHoverComputer(
+    this._dartdocInfo,
+    this._unit,
+    this._offset, {
+    this.multilineElementDescriptions = false,
+  });
 
   /// Returns the computed hover, maybe `null`.
   HoverInformation? compute() {
@@ -133,6 +139,7 @@
   String? _elementDisplayString(Element? element) {
     return element?.getDisplayString(
       withNullability: _unit.isNonNullableByDefault,
+      multiline: multilineElementDescriptions,
     );
   }
 
diff --git a/pkg/analysis_server/lib/src/context_manager.dart b/pkg/analysis_server/lib/src/context_manager.dart
index 83249b9..047e8b1b 100644
--- a/pkg/analysis_server/lib/src/context_manager.dart
+++ b/pkg/analysis_server/lib/src/context_manager.dart
@@ -268,9 +268,11 @@
       var content = _readFile(path);
       var lineInfo = _computeLineInfo(content);
       var errors = analyzeAnalysisOptions(
-          resourceProvider.getFile(path).createSource(),
-          content,
-          driver.sourceFactory);
+        resourceProvider.getFile(path).createSource(),
+        content,
+        driver.sourceFactory,
+        driver.currentSession.analysisContext.contextRoot.root.path,
+      );
       var converter = AnalyzerConverter();
       convertedErrors = converter.convertAnalysisErrors(errors,
           lineInfo: lineInfo, options: driver.analysisOptions);
diff --git a/pkg/analysis_server/lib/src/edit/edit_domain.dart b/pkg/analysis_server/lib/src/edit/edit_domain.dart
index 4e08659..f4f16f9 100644
--- a/pkg/analysis_server/lib/src/edit/edit_domain.dart
+++ b/pkg/analysis_server/lib/src/edit/edit_domain.dart
@@ -586,7 +586,11 @@
     var session = driver.currentSession;
     var sourceFactory = driver.sourceFactory;
     var errors = analyzeAnalysisOptions(
-        optionsFile.createSource(), content, sourceFactory);
+      optionsFile.createSource(),
+      content,
+      sourceFactory,
+      driver.currentSession.analysisContext.contextRoot.root.path,
+    );
     var options = _getOptions(sourceFactory, content);
     if (options == null) {
       return errorFixesList;
diff --git a/pkg/analysis_server/lib/src/lsp/constants.dart b/pkg/analysis_server/lib/src/lsp/constants.dart
index d13b6a8..b5c3a27 100644
--- a/pkg/analysis_server/lib/src/lsp/constants.dart
+++ b/pkg/analysis_server/lib/src/lsp/constants.dart
@@ -125,12 +125,23 @@
   /// of the expression would show through the simple-colorings "string" colors.
   static const interpolation = SemanticTokenModifiers('interpolation');
 
+  /// A modifier applied to the void keyword to users to color it differently
+  /// (for example as a type).
+  static const void_ = SemanticTokenModifiers('void');
+
   /// All custom semantic token modifiers, used to populate the LSP Legend.
   ///
   /// The legend must include all used modifiers. Modifiers used in the
   /// HighlightRegion mappings will be automatically included, but should still
   /// be listed here in case they are removed from mappings in the future.
-  static const values = [control, label, constructor, escape, interpolation];
+  static const values = [
+    control,
+    label,
+    constructor,
+    escape,
+    interpolation,
+    void_,
+  ];
 }
 
 abstract class CustomSemanticTokenTypes {
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/handler_hover.dart b/pkg/analysis_server/lib/src/lsp/handlers/handler_hover.dart
index 1bef994..3056895 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/handler_hover.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/handler_hover.dart
@@ -87,9 +87,13 @@
       return success(null);
     }
 
-    final hover = DartUnitHoverComputer(
-            server.getDartdocDirectiveInfoFor(unit), compilationUnit, offset)
-        .compute();
+    final computer = DartUnitHoverComputer(
+      server.getDartdocDirectiveInfoFor(unit),
+      compilationUnit,
+      offset,
+      multilineElementDescriptions: true,
+    );
+    final hover = computer.compute();
     return success(toHover(unit.lineInfo, hover));
   }
 }
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/create_file.dart b/pkg/analysis_server/lib/src/services/correction/dart/create_file.dart
index 455c0c8..5b1977e 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/create_file.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/create_file.dart
@@ -23,7 +23,7 @@
     // TODO(brianwilkerson) Generalize this to allow other valid string literals.
     if (node is SimpleStringLiteral) {
       var parent = node.parent;
-      if (parent is ImportDirective) {
+      if (parent is NamespaceDirective) {
         // TODO(brianwilkerson) Support the case where the node's parent is a
         //  Configuration.
         var source = parent.uriSource;
diff --git a/pkg/analysis_server/test/analysis/notification_errors_test.dart b/pkg/analysis_server/test/analysis/notification_errors_test.dart
index c7c58d8..2cf499c 100644
--- a/pkg/analysis_server/test/analysis/notification_errors_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_errors_test.dart
@@ -96,7 +96,7 @@
     expect(error.type, AnalysisErrorType.STATIC_WARNING);
 
     // Write a package file that allows resolving the include.
-    newFile('$projectPath/.packages', content: '''
+    newDotPackagesFile(projectPath, content: '''
 pedantic:${pedanticFolder.toUri()}
 ''');
 
diff --git a/pkg/analysis_server/test/analysis/set_priority_files_test.dart b/pkg/analysis_server/test/analysis/set_priority_files_test.dart
index 64d569a..658c3ff 100644
--- a/pkg/analysis_server/test/analysis/set_priority_files_test.dart
+++ b/pkg/analysis_server/test/analysis/set_priority_files_test.dart
@@ -83,8 +83,8 @@
   }
 
   Future<void> test_ignoredInAnalysisOptions_inChildContext() async {
-    newFile('$projectPath/.packages');
-    newFile('$projectPath/child/.packages');
+    newDotPackagesFile(projectPath);
+    newDotPackagesFile('$projectPath/child');
     var sampleFile = convertPath('$projectPath/child/samples/sample.dart');
     newFile('$projectPath/child/${file_paths.analysisOptionsYaml}',
         content: r'''
@@ -99,8 +99,8 @@
   }
 
   Future<void> test_ignoredInAnalysisOptions_inRootContext() async {
-    newFile('$projectPath/.packages');
-    newFile('$projectPath/child/.packages');
+    newDotPackagesFile(projectPath);
+    newDotPackagesFile('$projectPath/child');
     var sampleFile = convertPath('$projectPath/child/samples/sample.dart');
     newFile('$projectPath/${file_paths.analysisOptionsYaml}', content: r'''
 analyzer:
diff --git a/pkg/analysis_server/test/client/completion_driver_test.dart b/pkg/analysis_server/test/client/completion_driver_test.dart
index 15e7e41..9aac2e6 100644
--- a/pkg/analysis_server/test/client/completion_driver_test.dart
+++ b/pkg/analysis_server/test/client/completion_driver_test.dart
@@ -145,7 +145,7 @@
     driver.createProject(packageRoots: packageRoots);
 
     newPubspecYamlFile(projectPath, '');
-    newFile('$projectPath/.packages', content: '''
+    newDotPackagesFile(projectPath, content: '''
 project:${toUri('$projectPath/lib')}
 ''');
     // todo (pq): add logic (possibly to driver) that waits for SDK suggestions
diff --git a/pkg/analysis_server/test/domain_analysis_test.dart b/pkg/analysis_server/test/domain_analysis_test.dart
index 653339c..dd97d60 100644
--- a/pkg/analysis_server/test/domain_analysis_test.dart
+++ b/pkg/analysis_server/test/domain_analysis_test.dart
@@ -536,7 +536,7 @@
     assertHasErrors(testFilePath);
 
     // Write `.packages`, recreate analysis contexts.
-    newFile('$testPackageRootPath/.packages', content: '''
+    newDotPackagesFile(testPackageRootPath, content: '''
 aaa:${toUriStr(aaaLibPath)}
 ''');
 
@@ -858,7 +858,7 @@
 ''');
 
     // Write `.packages` empty, without `package:aaa`.
-    newFile('$testPackageRootPath/.packages', content: '');
+    newDotPackagesFile(testPackageRootPath, content: '');
 
     newFile(testFilePath, content: '''
 import 'package:aaa/a.dart';
@@ -872,7 +872,7 @@
     assertHasErrors(testFilePath);
 
     // Write `.packages`, recreate analysis contexts.
-    newFile('$testPackageRootPath/.packages', content: '''
+    newDotPackagesFile(testPackageRootPath, content: '''
 aaa:${toUriStr(aaaLibPath)}
 ''');
 
@@ -1090,7 +1090,7 @@
 class A {}
 ''');
 
-    newFile('$testPackageRootPath/.packages', content: '''
+    newDotPackagesFile(testPackageRootPath, content: '''
 aaa:${toUriStr(aaaLibPath)}
 ''');
 
@@ -1193,7 +1193,7 @@
 class A {}
 ''');
 
-    newFile('$testPackageRootPath/.packages', content: '''
+    newDotPackagesFile(testPackageRootPath, content: '''
 aaa:${toUriStr(aaaLibPath)}
 ''');
 
@@ -1671,7 +1671,7 @@
 library lib_a;
 class A {}
 ''').path;
-    newFile('/project/.packages', content: 'pkgA:file:///packages/pkgA/lib');
+    newDotPackagesFile('/project', content: 'pkgA:file:///packages/pkgA/lib');
     //
     addTestFile('''
 import 'package:pkgA/libA.dart';
@@ -1722,7 +1722,7 @@
 library lib_a;
 class A {}
 ''').path;
-    newFile('/project/.packages', content: 'pkgA:/packages/pkgA/lib');
+    newDotPackagesFile('/project', content: 'pkgA:/packages/pkgA/lib');
     //
     addTestFile('// no "pkgA" reference');
     createProject();
diff --git a/pkg/analysis_server/test/edit/fixes_test.dart b/pkg/analysis_server/test/edit/fixes_test.dart
index 1a397f2..53ba68b 100644
--- a/pkg/analysis_server/test/edit/fixes_test.dart
+++ b/pkg/analysis_server/test/edit/fixes_test.dart
@@ -150,7 +150,7 @@
 
   Future<void> test_suggestImportFromDifferentAnalysisRoot() async {
     newFolder('/aaa');
-    newFile('/aaa/.packages', content: '''
+    newDotPackagesFile('/aaa', content: '''
 aaa:${toUri('/aaa/lib')}
 bbb:${toUri('/bbb/lib')}
 ''');
@@ -160,7 +160,7 @@
 ''');
 
     newFolder('/bbb');
-    newFile('/bbb/.packages', content: '''
+    newDotPackagesFile('/bbb', content: '''
 bbb:${toUri('/bbb/lib')}
 ''');
     newFile('/bbb/lib/target.dart', content: 'class Foo() {}');
diff --git a/pkg/analysis_server/test/lsp/hover_test.dart b/pkg/analysis_server/test/lsp/hover_test.dart
index 9abd77a..19c80c0 100644
--- a/pkg/analysis_server/test/lsp/hover_test.dart
+++ b/pkg/analysis_server/test/lsp/hover_test.dart
@@ -174,6 +174,52 @@
     expect(hover!.range, equals(rangeFromMarkers(content)));
   }
 
+  Future<void> test_signatureFormatting_multiLine() async {
+    final content = '''
+    class Foo {
+      Foo(String arg1, String arg2, [String arg3]);
+    }
+
+    main() {
+      var a = Fo^o();
+    }
+    ''';
+
+    await initialize();
+    await openFile(mainFileUri, withoutMarkers(content));
+    final hover = await getHover(mainFileUri, positionFromMarker(content));
+    final contents = _getStringContents(hover!);
+    expect(contents, startsWith('''
+```dart
+(new) Foo Foo(
+  String arg1,
+  String arg2, [
+  String arg3,
+])
+```'''));
+  }
+
+  Future<void> test_signatureFormatting_singleLine() async {
+    final content = '''
+    class Foo {
+      Foo(String a, String b);
+    }
+
+    main() {
+      var a = Fo^o();
+    }
+    ''';
+
+    await initialize();
+    await openFile(mainFileUri, withoutMarkers(content));
+    final hover = await getHover(mainFileUri, positionFromMarker(content));
+    final contents = _getStringContents(hover!);
+    expect(contents, startsWith('''
+```dart
+(new) Foo Foo(String a, String b)
+```'''));
+  }
+
   Future<void> test_string_noDocComment() async {
     final content = '''
     String [[a^bc]];
diff --git a/pkg/analysis_server/test/lsp/semantic_tokens_test.dart b/pkg/analysis_server/test/lsp/semantic_tokens_test.dart
index 1a7a8c2..c688729 100644
--- a/pkg/analysis_server/test/lsp/semantic_tokens_test.dart
+++ b/pkg/analysis_server/test/lsp/semantic_tokens_test.dart
@@ -297,13 +297,15 @@
           [SemanticTokenModifiers.documentation]),
       _Token('@', CustomSemanticTokenTypes.annotation),
       _Token('override', SemanticTokenTypes.property),
-      _Token('void', SemanticTokenTypes.keyword),
+      _Token('void', SemanticTokenTypes.keyword,
+          [CustomSemanticTokenModifiers.void_]),
       _Token('myMethod', SemanticTokenTypes.method,
           [SemanticTokenModifiers.declaration]),
       _Token('/// static method docs', SemanticTokenTypes.comment,
           [SemanticTokenModifiers.documentation]),
       _Token('static', SemanticTokenTypes.keyword),
-      _Token('void', SemanticTokenTypes.keyword),
+      _Token('void', SemanticTokenTypes.keyword,
+          [CustomSemanticTokenModifiers.void_]),
       _Token('myStaticMethod', SemanticTokenTypes.method,
           [SemanticTokenModifiers.declaration, SemanticTokenModifiers.static]),
       _Token('// static method comment', SemanticTokenTypes.comment),
@@ -492,7 +494,8 @@
     ''';
 
     final expected = [
-      _Token('void', SemanticTokenTypes.keyword),
+      _Token('void', SemanticTokenTypes.keyword,
+          [CustomSemanticTokenModifiers.void_]),
       _Token('main', SemanticTokenTypes.function,
           [SemanticTokenModifiers.declaration, SemanticTokenModifiers.static]),
       _Token('async', SemanticTokenTypes.keyword,
diff --git a/pkg/analysis_server/test/search/type_hierarchy_test.dart b/pkg/analysis_server/test/search/type_hierarchy_test.dart
index b257f54..4c54acd 100644
--- a/pkg/analysis_server/test/search/type_hierarchy_test.dart
+++ b/pkg/analysis_server/test/search/type_hierarchy_test.dart
@@ -166,10 +166,10 @@
 class A {}
 class B extends A {}
 ''');
-    newFile('/packages/pkgA/.packages',
+    newDotPackagesFile('/packages/pkgA',
         content: 'pkgA:${toUriStr('/packages/pkgA/lib')}');
     // reference the package from a project
-    newFile('$projectPath/.packages',
+    newDotPackagesFile(projectPath,
         content: 'pkgA:${toUriStr('/packages/pkgA/lib')}');
     addTestFile('''
 import 'package:pkgA/libA.dart';
diff --git a/pkg/analysis_server/test/services/completion/dart/relevance/named_argument_test.dart b/pkg/analysis_server/test/services/completion/dart/relevance/named_argument_test.dart
index ff02ed2..beb0563 100644
--- a/pkg/analysis_server/test/services/completion/dart/relevance/named_argument_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/relevance/named_argument_test.dart
@@ -22,7 +22,7 @@
 
     var metaLibFolder = MockPackages.instance.addMeta(resourceProvider);
 
-    newFile('$projectPath/.packages', content: '''
+    newDotPackagesFile(projectPath, content: '''
 meta:${metaLibFolder.toUri()}
 project:${toUri('$projectPath/lib')}
 ''');
diff --git a/pkg/analysis_server/test/src/domains/completion/available_suggestions_base.dart b/pkg/analysis_server/test/src/domains/completion/available_suggestions_base.dart
index d9417a4..6172336 100644
--- a/pkg/analysis_server/test/src/domains/completion/available_suggestions_base.dart
+++ b/pkg/analysis_server/test/src/domains/completion/available_suggestions_base.dart
@@ -78,7 +78,7 @@
     testFile = convertPath('/home/test/lib/test.dart');
 
     newPubspecYamlFile('/home/test', '');
-    newFile('/home/test/.packages', content: '''
+    newDotPackagesFile('/home/test', content: '''
 test:${toUri('/home/test/lib')}
 ''');
 
diff --git a/pkg/analysis_server/test/src/domains/flutter/base.dart b/pkg/analysis_server/test/src/domains/flutter/base.dart
index 2cadf8b..0ab812c 100644
--- a/pkg/analysis_server/test/src/domains/flutter/base.dart
+++ b/pkg/analysis_server/test/src/domains/flutter/base.dart
@@ -44,7 +44,7 @@
     testFile = convertPath('/home/test/lib/test.dart');
 
     newPubspecYamlFile('/home/test', '');
-    newFile('/home/test/.packages', content: '''
+    newDotPackagesFile('/home/test', content: '''
 test:${toUri('/home/test/lib')}
 ''');
 
diff --git a/pkg/analysis_server/test/src/flutter/flutter_outline_notification_test.dart b/pkg/analysis_server/test/src/flutter/flutter_outline_notification_test.dart
index 6d57e25..df54552 100644
--- a/pkg/analysis_server/test/src/flutter/flutter_outline_notification_test.dart
+++ b/pkg/analysis_server/test/src/flutter/flutter_outline_notification_test.dart
@@ -72,7 +72,7 @@
   }
 
   Future<void> test_children() async {
-    newFile('$projectPath/.packages', content: '''
+    newDotPackagesFile(projectPath, content: '''
 flutter:${flutterFolder.toUri()}
 ''');
     newFile('$projectPath/analysis_options.yaml', content: '''
diff --git a/pkg/analysis_server/test/src/plugin/plugin_manager_test.dart b/pkg/analysis_server/test/src/plugin/plugin_manager_test.dart
index 39e4ddc..ffb6492 100644
--- a/pkg/analysis_server/test/src/plugin/plugin_manager_test.dart
+++ b/pkg/analysis_server/test/src/plugin/plugin_manager_test.dart
@@ -480,7 +480,7 @@
     //
     var pluginDirPath = newFolder('/plugin').path;
     var pluginFilePath = newFile('/plugin/bin/plugin.dart').path;
-    var packagesFilePath = newFile('/plugin/.packages').path;
+    var packagesFilePath = newDotPackagesFile('/plugin').path;
     //
     // Test path computation.
     //
diff --git a/pkg/analysis_server/test/src/services/correction/fix/analysis_options/test_support.dart b/pkg/analysis_server/test/src/services/correction/fix/analysis_options/test_support.dart
index b9569d4..6090ba5 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/analysis_options/test_support.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/analysis_options/test_support.dart
@@ -36,7 +36,11 @@
     var optionsFile = getFile('/analysis_options.yaml');
     var sourceFactory = SourceFactory([]);
     var errors = analyzeAnalysisOptions(
-        optionsFile.createSource(), content, sourceFactory);
+      optionsFile.createSource(),
+      content,
+      sourceFactory,
+      '/',
+    );
     expect(errors, hasLength(1));
     var error = errors[0];
     var options = _parseYaml(content);
diff --git a/pkg/analysis_server/test/src/services/correction/fix/create_file_test.dart b/pkg/analysis_server/test/src/services/correction/fix/create_file_test.dart
index 0c156d3..5f328c6 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/create_file_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/create_file_test.dart
@@ -20,6 +20,24 @@
   @override
   FixKind get kind => DartFixKind.CREATE_FILE;
 
+  Future<void> test_forExport() async {
+    await resolveTestCode('''
+export 'my_file.dart';
+''');
+    await assertHasFixWithoutApplying();
+    // validate change
+    var fileEdits = change.edits;
+    expect(fileEdits, hasLength(1));
+    var fileEdit = change.edits[0];
+    expect(fileEdit.file, convertPath('/home/test/lib/my_file.dart'));
+    expect(fileEdit.fileStamp, -1);
+    expect(fileEdit.edits, hasLength(1));
+    expect(
+      fileEdit.edits[0].replacement,
+      contains('// TODO Implement this library.'),
+    );
+  }
+
   Future<void> test_forImport() async {
     await resolveTestCode('''
 import 'my_file.dart';
diff --git a/pkg/analyzer/lib/dart/analysis/context_root.dart b/pkg/analyzer/lib/dart/analysis/context_root.dart
index fc6862b..0e3e4cf5 100644
--- a/pkg/analyzer/lib/dart/analysis/context_root.dart
+++ b/pkg/analyzer/lib/dart/analysis/context_root.dart
@@ -35,7 +35,7 @@
   File? get optionsFile;
 
   /// The packages file that should be used when analyzing the files within this
-  /// context root, or `null` if there is no options file.
+  /// context root, or `null` if there is no packages file.
   File? get packagesFile;
 
   /// The resource provider used to access the file system.
diff --git a/pkg/analyzer/lib/dart/element/element.dart b/pkg/analyzer/lib/dart/element/element.dart
index 236df2f..96d810b 100644
--- a/pkg/analyzer/lib/dart/element/element.dart
+++ b/pkg/analyzer/lib/dart/element/element.dart
@@ -686,9 +686,16 @@
   /// If [withNullability] is `false`, nullability suffixes will not be
   /// included into the presentation.
   ///
+  /// If [multiline] is `true`, the string may be wrapped over multiple lines
+  /// with newlines to improve formatting. For example function signatures may
+  /// be formatted as if they had trailing commas.
+  ///
   /// Clients should not depend on the content of the returned value as it will
   /// be changed if doing so would improve the UX.
-  String getDisplayString({required bool withNullability});
+  String getDisplayString({
+    required bool withNullability,
+    bool multiline = false,
+  });
 
   /// Return a display name for the given element that includes the path to the
   /// compilation unit in which the type is defined. If [shortName] is `null`
diff --git a/pkg/analyzer/lib/src/analysis_options/error/option_codes.dart b/pkg/analyzer/lib/src/analysis_options/error/option_codes.dart
index 2b47fc1..33ea055 100644
--- a/pkg/analyzer/lib/src/analysis_options/error/option_codes.dart
+++ b/pkg/analyzer/lib/src/analysis_options/error/option_codes.dart
@@ -101,9 +101,10 @@
   /// Parameters:
   /// 0: the uri of the file to be included
   /// 1: the path of the file containing the include directive
+  /// 2: the path of the context being analyzed
   static const AnalysisOptionsWarningCode INCLUDE_FILE_NOT_FOUND =
       AnalysisOptionsWarningCode('INCLUDE_FILE_NOT_FOUND',
-          "The include file {0} in {1} cannot be found.");
+          "The include file '{0}' in '{1}' can't be found when analyzing '{2}'.");
 
   /// An error code indicating a specified include file has a warning.
   ///
diff --git a/pkg/analyzer/lib/src/dart/element/display_string_builder.dart b/pkg/analyzer/lib/src/dart/element/display_string_builder.dart
index c5adcb6..612db53 100644
--- a/pkg/analyzer/lib/src/dart/element/display_string_builder.dart
+++ b/pkg/analyzer/lib/src/dart/element/display_string_builder.dart
@@ -16,10 +16,12 @@
 
   final bool skipAllDynamicArguments;
   final bool withNullability;
+  final bool multiline;
 
   ElementDisplayStringBuilder({
     required this.skipAllDynamicArguments,
     required this.withNullability,
+    this.multiline = false,
   });
 
   @override
@@ -61,7 +63,11 @@
       _write(element.displayName);
     }
 
-    _writeFormalParameters(element.parameters, forElement: true);
+    _writeFormalParameters(
+      element.parameters,
+      forElement: true,
+      allowMultiline: true,
+    );
   }
 
   void writeDynamicType() {
@@ -81,7 +87,11 @@
 
     if (element.kind != ElementKind.GETTER) {
       _writeTypeParameters(element.typeParameters);
-      _writeFormalParameters(element.parameters, forElement: true);
+      _writeFormalParameters(
+        element.parameters,
+        forElement: true,
+        allowMultiline: true,
+      );
     }
   }
 
@@ -222,15 +232,34 @@
   void _writeFormalParameters(
     List<ParameterElement> parameters, {
     required bool forElement,
+    bool allowMultiline = false,
   }) {
+    // Assume the display string looks better wrapped when there are at least
+    // three parameters. This avoids having to pre-compute the single-line
+    // version and know the length of the function name/return type.
+    var multiline = allowMultiline && this.multiline && parameters.length >= 3;
+
+    // The prefix for open groups is included in seperator for single-line but
+    // not for multline so must be added explicitly.
+    var openGroupPrefix = multiline ? ' ' : '';
+    var separator = multiline ? ',' : ', ';
+    var trailingComma = multiline ? ',\n' : '';
+    var parameterPrefix = multiline ? '\n  ' : '';
+
     _write('(');
 
-    var lastKind = _WriteFormalParameterKind.requiredPositional;
+    _WriteFormalParameterKind? lastKind;
     var lastClose = '';
 
     void openGroup(_WriteFormalParameterKind kind, String open, String close) {
       if (lastKind != kind) {
         _write(lastClose);
+        if (lastKind != null) {
+          // We only need to include the space before the open group if there
+          // was a previous parameter, otherwise it goes immediately after the
+          // open paren.
+          _write(openGroupPrefix);
+        }
         _write(open);
         lastKind = kind;
         lastClose = close;
@@ -239,7 +268,7 @@
 
     for (var i = 0; i < parameters.length; i++) {
       if (i != 0) {
-        _write(', ');
+        _write(separator);
       }
 
       var parameter = parameters[i];
@@ -250,9 +279,11 @@
       } else if (parameter.isNamed) {
         openGroup(_WriteFormalParameterKind.named, '{', '}');
       }
+      _write(parameterPrefix);
       _writeWithoutDelimiters(parameter, forElement: forElement);
     }
 
+    _write(trailingComma);
     _write(lastClose);
     _write(')');
   }
diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart
index 2a32921..2735e16 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -2390,10 +2390,14 @@
   }
 
   @override
-  String getDisplayString({required bool withNullability}) {
+  String getDisplayString({
+    required bool withNullability,
+    bool multiline = false,
+  }) {
     var builder = ElementDisplayStringBuilder(
       skipAllDynamicArguments: false,
       withNullability: withNullability,
+      multiline: multiline,
     );
     appendTo(builder);
     return builder.toString();
@@ -4405,7 +4409,10 @@
       visitor.visitMultiplyDefinedElement(this);
 
   @override
-  String getDisplayString({required bool withNullability}) {
+  String getDisplayString({
+    required bool withNullability,
+    bool multiline = false,
+  }) {
     var elementsStr = conflictingElements.map((e) {
       return e.getDisplayString(
         withNullability: withNullability,
diff --git a/pkg/analyzer/lib/src/dart/element/member.dart b/pkg/analyzer/lib/src/dart/element/member.dart
index 0cb160f..119513f 100644
--- a/pkg/analyzer/lib/src/dart/element/member.dart
+++ b/pkg/analyzer/lib/src/dart/element/member.dart
@@ -576,10 +576,14 @@
   void appendTo(ElementDisplayStringBuilder builder);
 
   @override
-  String getDisplayString({required bool withNullability}) {
+  String getDisplayString({
+    required bool withNullability,
+    bool multiline = false,
+  }) {
     var builder = ElementDisplayStringBuilder(
       skipAllDynamicArguments: false,
       withNullability: withNullability,
+      multiline: multiline,
     );
     appendTo(builder);
     return builder.toString();
diff --git a/pkg/analyzer/lib/src/dart/error/hint_codes.dart b/pkg/analyzer/lib/src/dart/error/hint_codes.dart
index 05e7152..1d0d7d2 100644
--- a/pkg/analyzer/lib/src/dart/error/hint_codes.dart
+++ b/pkg/analyzer/lib/src/dart/error/hint_codes.dart
@@ -307,11 +307,12 @@
       hasPublishedDocs: true);
 
   /**
-   * `Function` should not be extended anymore.
+   * No parameters.
    */
   static const HintCode DEPRECATED_EXTENDS_FUNCTION = HintCode(
-      'DEPRECATED_EXTENDS_FUNCTION', "Extending 'Function' is deprecated.",
-      correction: "Try removing 'Function' from the 'extends' clause.");
+      'DEPRECATED_SUBTYPE_OF_FUNCTION', "Extending 'Function' is deprecated.",
+      correction: "Try removing 'Function' from the 'extends' clause.",
+      uniqueName: 'DEPRECATED_EXTENDS_FUNCTION');
 
   /**
    * Users should not create a class named `Function` anymore.
@@ -322,13 +323,13 @@
       correction: "Try renaming the class.");
 
   /**
-   * According to the specification: If a class or mixin declaration implements
-   * Function, it has no effect.
+   * No parameters.
    */
   static const HintCode DEPRECATED_IMPLEMENTS_FUNCTION = HintCode(
-      'DEPRECATED_IMPLEMENTS_FUNCTION',
+      'DEPRECATED_SUBTYPE_OF_FUNCTION',
       "Implementing 'Function' has no effect.",
-      correction: "Try removing 'Function' from the 'implements' clause.");
+      correction: "Try removing 'Function' from the 'implements' clause.",
+      uniqueName: 'DEPRECATED_IMPLEMENTS_FUNCTION');
 
   /**
    * Parameters:
@@ -421,11 +422,12 @@
   );
 
   /**
-   * `Function` should not be mixed in anymore.
+   * No parameters.
    */
   static const HintCode DEPRECATED_MIXIN_FUNCTION = HintCode(
-      'DEPRECATED_MIXIN_FUNCTION', "Mixing in 'Function' is deprecated.",
-      correction: "Try removing 'Function' from the 'with' clause.");
+      'DEPRECATED_SUBTYPE_OF_FUNCTION', "Mixing in 'Function' is deprecated.",
+      correction: "Try removing 'Function' from the 'with' clause.",
+      uniqueName: 'DEPRECATED_MIXIN_FUNCTION');
 
   /**
    * Hint to use the ~/ operator.
diff --git a/pkg/analyzer/lib/src/task/options.dart b/pkg/analyzer/lib/src/task/options.dart
index 5110041..28b4452 100644
--- a/pkg/analyzer/lib/src/task/options.dart
+++ b/pkg/analyzer/lib/src/task/options.dart
@@ -26,7 +26,11 @@
 final _OptionsProcessor _processor = _OptionsProcessor();
 
 List<AnalysisError> analyzeAnalysisOptions(
-    Source source, String content, SourceFactory sourceFactory) {
+  Source source,
+  String content,
+  SourceFactory sourceFactory,
+  String contextRoot,
+) {
   List<AnalysisError> errors = <AnalysisError>[];
   Source initialSource = source;
   SourceSpan? initialIncludeSpan;
@@ -70,7 +74,7 @@
           initialIncludeSpan!.start.offset,
           initialIncludeSpan!.length,
           AnalysisOptionsWarningCode.INCLUDE_FILE_NOT_FOUND,
-          [includeUri, source.fullName]));
+          [includeUri, source.fullName, contextRoot]));
       return;
     }
     try {
diff --git a/pkg/analyzer/test/generated/elements_types_mixin.dart b/pkg/analyzer/test/generated/elements_types_mixin.dart
index 68e092a..2933f98 100644
--- a/pkg/analyzer/test/generated/elements_types_mixin.dart
+++ b/pkg/analyzer/test/generated/elements_types_mixin.dart
@@ -496,11 +496,13 @@
     String? name,
     required DartType type,
     bool isCovariant = false,
+    String? defaultValueCode,
   }) {
     var parameter = ParameterElementImpl(name ?? '', 0);
     parameter.parameterKind = ParameterKind.POSITIONAL;
     parameter.type = type;
     parameter.isExplicitlyCovariant = isCovariant;
+    parameter.defaultValueCode = defaultValueCode;
     return parameter;
   }
 
diff --git a/pkg/analyzer/test/src/context/builder_test.dart b/pkg/analyzer/test/src/context/builder_test.dart
index 727364a..e439283 100644
--- a/pkg/analyzer/test/src/context/builder_test.dart
+++ b/pkg/analyzer/test/src/context/builder_test.dart
@@ -266,7 +266,7 @@
   }
 
   void test_createWorkspace_hasPackagesFile_hasDartToolAndPubspec() {
-    newFile('/workspace/.packages');
+    newDotPackagesFile('/workspace');
     newFolder('/workspace/.dart_tool/build/generated/project/lib');
     newPubspecYamlFile('/workspace', 'name: project');
     Workspace workspace = _createWorkspace('/workspace/project/lib/lib.dart');
@@ -274,14 +274,14 @@
   }
 
   void test_createWorkspace_hasPackagesFile_hasPubspec() {
-    newFile('/workspace/.packages');
+    newDotPackagesFile('/workspace');
     newPubspecYamlFile('/workspace', 'name: project');
     Workspace workspace = _createWorkspace('/workspace/project/lib/lib.dart');
     expect(workspace, TypeMatcher<PubWorkspace>());
   }
 
   void test_createWorkspace_hasPackagesFile_noMarkerFiles() {
-    newFile('/workspace/.packages');
+    newDotPackagesFile('/workspace');
     Workspace workspace = _createWorkspace('/workspace/project/lib/lib.dart');
     expect(workspace, TypeMatcher<BasicWorkspace>());
   }
diff --git a/pkg/analyzer/test/src/context/packages_test.dart b/pkg/analyzer/test/src/context/packages_test.dart
index 792753b..17cef59 100644
--- a/pkg/analyzer/test/src/context/packages_test.dart
+++ b/pkg/analyzer/test/src/context/packages_test.dart
@@ -21,7 +21,7 @@
   }
 
   void test_findPackagesFrom_fallbackToDotPackages() {
-    newFile('/test/.packages', content: '''
+    newDotPackagesFile('/test', content: '''
 test:lib/
 bbb:${toUriStr('/packages/bbb/lib')}
 ''');
@@ -76,7 +76,7 @@
 }
 ''');
 
-    newFile('/test/.packages', content: '''
+    newDotPackagesFile('/test', content: '''
 test:lib/
 bbb:${toUriStr('/packages/bbb/lib')}
 ''');
@@ -138,7 +138,7 @@
   }
 
   test_parseDotPackagesFile() {
-    var file = newFile('/test/.packages', content: '''
+    var file = newDotPackagesFile('/test', content: '''
 # Generated by pub
 aaa:${toUriStr('/packages/aaa/lib/')}
 test:lib/
@@ -210,12 +210,11 @@
   }
 
   test_parsePackagesFile_dotPackages() {
-    var path = convertPath('/test/.packages');
-    newFile(path, content: '''
+    var dotPackagesFile = newDotPackagesFile('/test', content: '''
 bbb:${toUriStr('/packages/bbb/lib')}
 ''');
 
-    var packages = parsePackagesFile(resourceProvider, getFile(path));
+    var packages = parsePackagesFile(resourceProvider, dotPackagesFile);
 
     _assertPackage(
       packages,
@@ -266,14 +265,13 @@
 }
 ''');
 
-    var dotPackagesPath = '/test/.packages';
-    newFile(dotPackagesPath, content: '''
+    var dotPackagesFile = newDotPackagesFile('/test', content: '''
 bbb:${toUriStr('/packages/bbb/lib')}
 ''');
 
     var packages = parsePackagesFile(
       resourceProvider,
-      getFile(dotPackagesPath),
+      dotPackagesFile,
     );
 
     _assertPackage(
diff --git a/pkg/analyzer/test/src/dart/analysis/session_test.dart b/pkg/analyzer/test/src/dart/analysis/session_test.dart
index 26d4849..b560691 100644
--- a/pkg/analyzer/test/src/dart/analysis/session_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/session_test.dart
@@ -233,7 +233,7 @@
     aaaContextPath = newFolder('/home/aaa').path;
     bbbContextPath = newFolder('/home/bbb').path;
 
-    newFile('/home/test/.packages', content: r'''
+    newDotPackagesFile('/home/test', content: r'''
 test:lib/
 ''');
 
diff --git a/pkg/analyzer/test/src/dart/element/display_string_test.dart b/pkg/analyzer/test/src/dart/element/display_string_test.dart
new file mode 100644
index 0000000..e5f4644
--- /dev/null
+++ b/pkg/analyzer/test/src/dart/element/display_string_test.dart
@@ -0,0 +1,126 @@
+// Copyright (c) 2021, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:analyzer/dart/element/type_provider.dart';
+import 'package:analyzer/src/dart/element/element.dart';
+import 'package:analyzer/src/dart/element/type_system.dart';
+import 'package:test/test.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../../../generated/elements_types_mixin.dart';
+import '../../../generated/test_analysis_context.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(ElementDisplayStringTest);
+  });
+}
+
+@reflectiveTest
+class ElementDisplayStringTest with ElementsTypesMixin {
+  late final TestAnalysisContext _analysisContext;
+
+  @override
+  late final LibraryElementImpl testLibrary;
+
+  @override
+  late final TypeProvider typeProvider;
+
+  late final TypeSystemImpl typeSystem;
+
+  void setUp() {
+    _analysisContext = TestAnalysisContext();
+    typeProvider = _analysisContext.typeProviderLegacy;
+    typeSystem = _analysisContext.typeSystemLegacy;
+
+    testLibrary = library_(
+      uriStr: 'package:test/test.dart',
+      analysisContext: _analysisContext,
+      analysisSession: _analysisContext.analysisSession,
+      typeSystem: typeSystem,
+    );
+  }
+
+  void test_longMethod() {
+    final methodA = method(
+      'longMethodName',
+      stringQuestion,
+      parameters: [
+        requiredParameter(name: 'aaa', type: stringQuestion),
+        positionalParameter(
+            name: 'bbb', type: stringQuestion, defaultValueCode: "'a'"),
+        positionalParameter(name: 'ccc', type: stringQuestion),
+      ],
+    );
+
+    final singleLine = methodA.getDisplayString(withNullability: true);
+    expect(singleLine, '''
+String? longMethodName(String? aaa, [String? bbb = 'a', String? ccc])''');
+
+    final multiLine =
+        methodA.getDisplayString(withNullability: true, multiline: true);
+    expect(multiLine, '''
+String? longMethodName(
+  String? aaa, [
+  String? bbb = 'a',
+  String? ccc,
+])''');
+  }
+
+  void test_longMethod_functionType() {
+    // Function types are always kept on one line, even nested within multiline
+    // signatures.
+    final methodA = method(
+      'longMethodName',
+      stringQuestion,
+      parameters: [
+        requiredParameter(name: 'aaa', type: stringQuestion),
+        positionalParameter(
+            name: 'bbb',
+            type: functionTypeNone(
+              parameters: [
+                requiredParameter(name: 'xxx', type: stringQuestion),
+                requiredParameter(name: 'yyy', type: stringQuestion),
+                requiredParameter(name: 'zzz', type: stringQuestion),
+              ],
+              returnType: stringQuestion,
+            )),
+        positionalParameter(name: 'ccc', type: stringQuestion),
+      ],
+    );
+
+    final singleLine = methodA.getDisplayString(withNullability: true);
+    expect(singleLine, '''
+String? longMethodName(String? aaa, [String? Function(String?, String?, String?) bbb, String? ccc])''');
+
+    final multiLine =
+        methodA.getDisplayString(withNullability: true, multiline: true);
+    expect(multiLine, '''
+String? longMethodName(
+  String? aaa, [
+  String? Function(String?, String?, String?) bbb,
+  String? ccc,
+])''');
+  }
+
+  void test_shortMethod() {
+    final methodA = method(
+      'm',
+      stringQuestion,
+      parameters: [
+        requiredParameter(name: 'a', type: stringQuestion),
+        positionalParameter(name: 'b', type: stringQuestion),
+      ],
+    );
+
+    final singleLine = methodA.getDisplayString(withNullability: true);
+    expect(singleLine, 'String? m(String? a, [String? b])');
+
+    final multiLine =
+        methodA.getDisplayString(withNullability: true, multiline: true);
+    // The signature is short enough that it remains on one line even for
+    // multiline: true.
+    expect(multiLine, 'String? m(String? a, [String? b])');
+  }
+}
diff --git a/pkg/analyzer/test/src/dart/element/test_all.dart b/pkg/analyzer/test/src/dart/element/test_all.dart
index f86065c..980299f 100644
--- a/pkg/analyzer/test/src/dart/element/test_all.dart
+++ b/pkg/analyzer/test/src/dart/element/test_all.dart
@@ -5,6 +5,7 @@
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'class_hierarchy_test.dart' as class_hierarchy;
+import 'display_string_test.dart' as display_string;
 import 'element_test.dart' as element;
 import 'factor_type_test.dart' as factor_type;
 import 'flatten_type_test.dart' as flatten_type;
@@ -34,6 +35,7 @@
 main() {
   defineReflectiveSuite(() {
     class_hierarchy.main();
+    display_string.main();
     element.main();
     factor_type.main();
     flatten_type.main();
diff --git a/pkg/analyzer/test/src/dart/resolution/metadata_test.dart b/pkg/analyzer/test/src/dart/resolution/metadata_test.dart
index 39c6c92..07af5c1 100644
--- a/pkg/analyzer/test/src/dart/resolution/metadata_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/metadata_test.dart
@@ -50,6 +50,8 @@
             IntegerLiteral
               literal: 0
               staticType: int
+          leftParenthesis: (
+          rightParenthesis: )
         constructorName: ConstructorName
           staticElement: self::@class::A::@constructor::•
           type: TypeName
@@ -59,6 +61,9 @@
               token: A
             type: A
         staticType: A
+    leftParenthesis: (
+    rightParenthesis: )
+  atSign.offset: 80
   element: self::@class::A::@constructor::•
   name: SimpleIdentifier
     staticElement: self::@class::A
@@ -344,6 +349,9 @@
       IntegerLiteral
         literal: 42
         staticType: int
+    leftParenthesis: (
+    rightParenthesis: )
+  atSign.offset: 53
   element: self::@class::A::@constructor::named
   name: PrefixedIdentifier
     identifier: SimpleIdentifier
@@ -382,6 +390,7 @@
     var annotation = findNode.annotation('@A');
     _assertResolvedNodeText(annotation, r'''
 Annotation
+  atSign.offset: 42
   element: self::@class::A::@getter::foo
   name: PrefixedIdentifier
     identifier: SimpleIdentifier
@@ -420,6 +429,9 @@
       IntegerLiteral
         literal: 42
         staticType: int
+    leftParenthesis: (
+    rightParenthesis: )
+  atSign.offset: 48
   element: self::@class::A::@constructor::•
   name: SimpleIdentifier
     staticElement: self::@class::A
@@ -456,6 +468,9 @@
       IntegerLiteral
         literal: 42
         staticType: int
+    leftParenthesis: (
+    rightParenthesis: )
+  atSign.offset: 54
   element: ConstructorMember
     base: self::@class::A::@constructor::named
     substitution: {T: int}
@@ -506,6 +521,9 @@
       IntegerLiteral
         literal: 42
         staticType: int
+    leftParenthesis: (
+    rightParenthesis: )
+  atSign.offset: 49
   element: ConstructorMember
     base: self::@class::A::@constructor::•
     substitution: {T: int}
@@ -537,6 +555,7 @@
 
     _assertResolvedNodeText(findNode.annotation('@A'), r'''
 Annotation
+  atSign.offset: 31
   element: self::@class::A::@getter::foo
   name: PrefixedIdentifier
     identifier: SimpleIdentifier
@@ -572,6 +591,9 @@
       IntegerLiteral
         literal: 42
         staticType: int
+    leftParenthesis: (
+    rightParenthesis: )
+  atSign.offset: 56
   element: ConstructorMember
     base: self::@class::A::@constructor::named
     substitution: {T: dynamic}
@@ -611,6 +633,7 @@
     var annotation = findNode.annotation('@A');
     _assertResolvedNodeText(annotation, r'''
 Annotation
+  atSign.offset: 38
   element: self::@class::A::@getter::foo
   name: PrefixedIdentifier
     identifier: SimpleIdentifier
@@ -649,6 +672,9 @@
       IntegerLiteral
         literal: 42
         staticType: int
+    leftParenthesis: (
+    rightParenthesis: )
+  atSign.offset: 54
   constructorName: SimpleIdentifier
     staticElement: ConstructorMember
       base: self::@class::A::@constructor::named
@@ -670,6 +696,8 @@
           staticType: null
           token: int
         type: int
+    leftBracket: <
+    rightBracket: >
 ''');
     _assertAnnotationValueText(annotation, '''
 A<int>
@@ -701,6 +729,9 @@
       IntegerLiteral
         literal: 42
         staticType: int
+    leftParenthesis: (
+    rightParenthesis: )
+  atSign.offset: 49
   element: ConstructorMember
     base: self::@class::A::@constructor::•
     substitution: {T: int}
@@ -716,6 +747,8 @@
           staticType: null
           token: int
         type: int
+    leftBracket: <
+    rightBracket: >
 ''');
     _assertAnnotationValueText(annotation, r'''
 A<int>
@@ -748,6 +781,9 @@
       IntegerLiteral
         literal: 42
         staticType: int
+    leftParenthesis: (
+    rightParenthesis: )
+  atSign.offset: 48
   element: ConstructorMember
     base: self::@class::A::@constructor::•
     substitution: {T: dynamic}
@@ -790,6 +826,9 @@
       IntegerLiteral
         literal: 42
         staticType: int
+    leftParenthesis: (
+    rightParenthesis: )
+  atSign.offset: 88
   element: ConstructorMember
     base: self::@class::B::@constructor::•
     substitution: {T: int}
@@ -828,6 +867,9 @@
       IntegerLiteral
         literal: 42
         staticType: int
+    leftParenthesis: (
+    rightParenthesis: )
+  atSign.offset: 88
   element: ConstructorMember
     base: self::@class::B::@constructor::•
     substitution: {T: int}
@@ -843,6 +885,8 @@
           staticType: null
           token: int
         type: int
+    leftBracket: <
+    rightBracket: >
 ''');
     _assertAnnotationValueText(annotation, r'''
 B<int>
@@ -958,6 +1002,7 @@
     var annotation = findNode.annotation('@prefix.B');
     _assertResolvedNodeText(annotation, r'''
 Annotation
+  atSign.offset: 28
   constructorName: SimpleIdentifier
     staticElement: package:test/a.dart::@class::A::@getter::foo
     staticType: null
@@ -1005,6 +1050,9 @@
       IntegerLiteral
         literal: 42
         staticType: int
+    leftParenthesis: (
+    rightParenthesis: )
+  atSign.offset: 28
   constructorName: SimpleIdentifier
     staticElement: ConstructorMember
       base: package:test/a.dart::@class::A::@constructor::named
@@ -1063,6 +1111,9 @@
       IntegerLiteral
         literal: 42
         staticType: int
+    leftParenthesis: (
+    rightParenthesis: )
+  atSign.offset: 28
   element: ConstructorMember
     base: package:test/a.dart::@class::A::@constructor::•
     substitution: {T: int}
@@ -1115,6 +1166,9 @@
       IntegerLiteral
         literal: 42
         staticType: int
+    leftParenthesis: (
+    rightParenthesis: )
+  atSign.offset: 28
   constructorName: SimpleIdentifier
     staticElement: ConstructorMember
       base: package:test/a.dart::@class::A::@constructor::named
@@ -1144,6 +1198,8 @@
           staticType: null
           token: int
         type: int
+    leftBracket: <
+    rightBracket: >
 ''');
     _assertAnnotationValueText(annotation, r'''
 A<int>
@@ -1181,6 +1237,9 @@
       IntegerLiteral
         literal: 42
         staticType: int
+    leftParenthesis: (
+    rightParenthesis: )
+  atSign.offset: 28
   element: ConstructorMember
     base: package:test/a.dart::@class::A::@constructor::•
     substitution: {T: int}
@@ -1204,6 +1263,8 @@
           staticType: null
           token: int
         type: int
+    leftBracket: <
+    rightBracket: >
 ''');
     _assertAnnotationValueText(annotation, r'''
 A<int>
@@ -1232,6 +1293,7 @@
     var annotation = findNode.annotation('@B');
     _assertResolvedNodeText(annotation, r'''
 Annotation
+  atSign.offset: 58
   element: self::@class::A::@getter::foo
   name: PrefixedIdentifier
     identifier: SimpleIdentifier
@@ -1276,6 +1338,9 @@
       DoubleLiteral
         literal: 1.2
         staticType: double
+    leftParenthesis: (
+    rightParenthesis: )
+  atSign.offset: 108
   constructorName: SimpleIdentifier
     staticElement: ConstructorMember
       base: self::@class::A::@constructor::named
@@ -1297,6 +1362,8 @@
           staticType: null
           token: int
         type: int
+    leftBracket: <
+    rightBracket: >
 ''');
     _assertAnnotationValueText(annotation, r'''
 A<int, double>
@@ -1342,6 +1409,9 @@
       DoubleLiteral
         literal: 1.2
         staticType: double
+    leftParenthesis: (
+    rightParenthesis: )
+  atSign.offset: 102
   element: ConstructorMember
     base: self::@class::A::@constructor::•
     substitution: {T: int, U: double}
@@ -1357,6 +1427,8 @@
           staticType: null
           token: int
         type: int
+    leftBracket: <
+    rightBracket: >
 ''');
     _assertAnnotationValueText(annotation, r'''
 A<int, double>
@@ -1398,6 +1470,9 @@
       IntegerLiteral
         literal: 42
         staticType: int
+    leftParenthesis: (
+    rightParenthesis: )
+  atSign.offset: 76
   element: ConstructorMember
     base: self::@class::A::@constructor::named
     substitution: {T: int}
@@ -1451,6 +1526,9 @@
       IntegerLiteral
         literal: 42
         staticType: int
+    leftParenthesis: (
+    rightParenthesis: )
+  atSign.offset: 70
   element: ConstructorMember
     base: self::@class::A::@constructor::•
     substitution: {T: int}
@@ -1492,6 +1570,9 @@
       IntegerLiteral
         literal: 42
         staticType: int
+    leftParenthesis: (
+    rightParenthesis: )
+  atSign.offset: 76
   constructorName: SimpleIdentifier
     staticElement: ConstructorMember
       base: self::@class::A::@constructor::named
@@ -1513,6 +1594,8 @@
           staticType: null
           token: int
         type: int
+    leftBracket: <
+    rightBracket: >
 ''');
     _assertAnnotationValueText(annotation, r'''
 A<int>
@@ -1547,6 +1630,9 @@
       IntegerLiteral
         literal: 42
         staticType: int
+    leftParenthesis: (
+    rightParenthesis: )
+  atSign.offset: 70
   element: ConstructorMember
     base: self::@class::A::@constructor::•
     substitution: {T: int}
@@ -1562,6 +1648,8 @@
           staticType: null
           token: int
         type: int
+    leftBracket: <
+    rightBracket: >
 ''');
     _assertAnnotationValueText(annotation, r'''
 A<int>
@@ -1596,6 +1684,9 @@
       IntegerLiteral
         literal: 42
         staticType: int
+    leftParenthesis: (
+    rightParenthesis: )
+  atSign.offset: 75
   element: ConstructorMember
     base: self::@class::A::@constructor::named
     substitution: {T: int}
@@ -1649,6 +1740,9 @@
       IntegerLiteral
         literal: 42
         staticType: int
+    leftParenthesis: (
+    rightParenthesis: )
+  atSign.offset: 69
   element: ConstructorMember
     base: self::@class::A::@constructor::•
     substitution: {T: int}
@@ -1690,6 +1784,9 @@
       IntegerLiteral
         literal: 42
         staticType: int
+    leftParenthesis: (
+    rightParenthesis: )
+  atSign.offset: 69
   element: self::@class::A::@constructor::named
   name: PrefixedIdentifier
     identifier: SimpleIdentifier
@@ -1736,6 +1833,9 @@
       IntegerLiteral
         literal: 42
         staticType: int
+    leftParenthesis: (
+    rightParenthesis: )
+  atSign.offset: 63
   element: self::@class::A::@constructor::•
   name: SimpleIdentifier
     staticElement: self::@typeAlias::B
diff --git a/pkg/analyzer/test/src/diagnostics/analysis_options/analysis_options_test_support.dart b/pkg/analyzer/test/src/diagnostics/analysis_options/analysis_options_test_support.dart
index 900fd85..e0432e0 100644
--- a/pkg/analyzer/test/src/diagnostics/analysis_options/analysis_options_test_support.dart
+++ b/pkg/analyzer/test/src/diagnostics/analysis_options/analysis_options_test_support.dart
@@ -12,7 +12,7 @@
   Future<void> assertErrorsInCode(
       String code, List<ExpectedError> expectedErrors) async {
     var diagnostics =
-        analyzeAnalysisOptions(TestSource(), code, SourceFactory([]));
+        analyzeAnalysisOptions(TestSource(), code, SourceFactory([]), '/');
     var errorListener = GatheringErrorListener();
     errorListener.addAll(diagnostics);
     errorListener.assertErrors(expectedErrors);
diff --git a/pkg/analyzer/test/src/diagnostics/analysis_options/include_file_not_found.dart b/pkg/analyzer/test/src/diagnostics/analysis_options/include_file_not_found_test.dart
similarity index 74%
rename from pkg/analyzer/test/src/diagnostics/analysis_options/include_file_not_found.dart
rename to pkg/analyzer/test/src/diagnostics/analysis_options/include_file_not_found_test.dart
index 976fc62..17df357 100644
--- a/pkg/analyzer/test/src/diagnostics/analysis_options/include_file_not_found.dart
+++ b/pkg/analyzer/test/src/diagnostics/analysis_options/include_file_not_found_test.dart
@@ -19,6 +19,14 @@
     assertErrorsInCode('''
 # We don't depend on pedantic, but we should consider adding it.
 include: package:pedantic/analysis_options.yaml
-''', [error(AnalysisOptionsWarningCode.INCLUDE_FILE_NOT_FOUND, 74, 38)]);
+''', [
+      error(
+        AnalysisOptionsWarningCode.INCLUDE_FILE_NOT_FOUND,
+        74,
+        38,
+        text: "The include file 'package:pedantic/analysis_options.yaml'"
+            " in '/test.dart' can't be found when analyzing '/'.",
+      )
+    ]);
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/analysis_options/test_all.dart b/pkg/analyzer/test/src/diagnostics/analysis_options/test_all.dart
new file mode 100644
index 0000000..4793f87
--- /dev/null
+++ b/pkg/analyzer/test/src/diagnostics/analysis_options/test_all.dart
@@ -0,0 +1,13 @@
+// Copyright (c) 2021, 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:test_reflective_loader/test_reflective_loader.dart';
+
+import 'include_file_not_found_test.dart' as include_file_not_found_test;
+
+main() {
+  defineReflectiveSuite(() {
+    include_file_not_found_test.main();
+  });
+}
diff --git a/pkg/analyzer/test/src/diagnostics/test_all.dart b/pkg/analyzer/test/src/diagnostics/test_all.dart
index ef8d0f6..ff961d3 100644
--- a/pkg/analyzer/test/src/diagnostics/test_all.dart
+++ b/pkg/analyzer/test/src/diagnostics/test_all.dart
@@ -15,6 +15,7 @@
     as ambiguous_extension_member_access;
 import 'ambiguous_import_test.dart' as ambiguous_import;
 import 'ambiguous_set_or_map_literal_test.dart' as ambiguous_set_or_map_literal;
+import 'analysis_options/test_all.dart' as analysis_options;
 import 'annotation_on_pointer_field_test.dart' as annotation_on_pointer_field;
 import 'annotation_syntax_test.dart' as annotation_syntax;
 import 'argument_must_be_a_constant_test.dart' as argument_must_be_a_constant;
@@ -712,6 +713,7 @@
     ambiguous_extension_member_access.main();
     ambiguous_import.main();
     ambiguous_set_or_map_literal.main();
+    analysis_options.main();
     annotation_on_pointer_field.main();
     annotation_syntax.main();
     argument_must_be_a_constant.main();
diff --git a/pkg/analyzer/test/src/services/available_declarations_test.dart b/pkg/analyzer/test/src/services/available_declarations_test.dart
index 9829096..a2e41c6 100644
--- a/pkg/analyzer/test/src/services/available_declarations_test.dart
+++ b/pkg/analyzer/test/src/services/available_declarations_test.dart
@@ -102,7 +102,7 @@
     MockSdk(resourceProvider: resourceProvider);
 
     newFolder('/home/test');
-    newFile('/home/test/.packages', content: '''
+    newDotPackagesFile('/home/test', content: '''
 test:${toUri('/home/test/lib')}
 ''');
 
diff --git a/pkg/analyzer/test/src/summary/element_text.dart b/pkg/analyzer/test/src/summary/element_text.dart
index 0f1dc1b..59a96d7 100644
--- a/pkg/analyzer/test/src/summary/element_text.dart
+++ b/pkg/analyzer/test/src/summary/element_text.dart
@@ -5,13 +5,10 @@
 import 'dart:io';
 
 import 'package:analyzer/dart/ast/ast.dart';
-import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/type.dart';
 import 'package:analyzer/src/dart/element/element.dart';
-import 'package:analyzer/src/dart/element/type.dart';
 import 'package:analyzer/src/generated/source.dart';
-import 'package:analyzer/src/summary2/reference.dart';
 import 'package:analyzer/src/task/inference_error.dart';
 import 'package:test/test.dart';
 
@@ -48,31 +45,13 @@
 void checkElementText(
   LibraryElement library,
   String expected, {
-  bool withAliasElementArguments = false,
   bool withCodeRanges = false,
-  bool withConstElements = true,
   bool withExportScope = false,
-  bool withOffsets = false,
-  bool withResolvedAst = false,
-  bool withResolvedAstOffsets = false,
-  bool withSyntheticAccessors = false,
-  bool withSyntheticFields = false,
-  bool withTypes = false,
-  bool withTypeParameterVariance = false,
 }) {
   var writer = _ElementWriter(
     selfUriStr: '${library.source.uri}',
-    withAliasElementArguments: withAliasElementArguments,
     withCodeRanges: withCodeRanges,
-    withConstElements: withConstElements,
     withExportScope: withExportScope,
-    withOffsets: withOffsets,
-    withResolvedAst: withResolvedAst,
-    withResolvedAstOffsets: withResolvedAstOffsets,
-    withSyntheticAccessors: withSyntheticAccessors,
-    withSyntheticFields: withSyntheticFields,
-    withTypes: withTypes,
-    withTypeParameterVariance: withTypeParameterVariance,
   );
   writer.writeLibraryElement(library);
 
@@ -134,1075 +113,59 @@
 /// Writes the canonical text presentation of elements.
 class _ElementWriter {
   final String? selfUriStr;
-  final bool withAliasElementArguments;
   final bool withCodeRanges;
   final bool withExportScope;
-  final bool withOffsets;
-  final bool withResolvedAst;
-  final bool withResolvedAstOffsets;
-  final bool withConstElements;
-  final bool withSyntheticAccessors;
-  final bool withSyntheticFields;
-  final bool withTypes;
-  final bool withTypeParameterVariance;
   final StringBuffer buffer = StringBuffer();
 
   String indent = '';
 
   _ElementWriter({
     this.selfUriStr,
-    this.withAliasElementArguments = false,
     this.withCodeRanges = false,
-    this.withConstElements = true,
     this.withExportScope = false,
-    this.withOffsets = false,
-    this.withResolvedAst = false,
-    this.withResolvedAstOffsets = false,
-    this.withSyntheticAccessors = false,
-    this.withSyntheticFields = false,
-    this.withTypes = false,
-    this.withTypeParameterVariance = false,
   });
 
-  bool isDynamicType(DartType type) => type is DynamicTypeImpl;
-
-  bool isEnumField(Element e) {
-    var enclosing = e.enclosingElement;
-    return enclosing is ClassElement && enclosing.isEnum;
-  }
-
-  void newLineIfNotEmpty() {
-    if (buffer.isNotEmpty) {
-      buffer.writeln();
-    }
-  }
-
-  void writeBodyModifiers(ExecutableElement e) {
-    if (e.isAsynchronous) {
-      expect(e.isSynchronous, isFalse);
-      buffer.write(' async');
-    }
-
-    if (e.isSynchronous && e.isGenerator) {
-      expect(e.isAsynchronous, isFalse);
-      buffer.write(' sync');
-    }
-
-    writeIf(e.isGenerator, '*');
-  }
-
-  void writeClassElement(ClassElement e) {
-    writeDocumentation(e);
-    writeMetadata(e, '', '\n');
-
-    writeIf(e.isAbstract && !e.isMixin, 'abstract ');
-    writeIf(!e.isSimplyBounded, 'notSimplyBounded ');
-
-    if (e.isEnum) {
-      buffer.write('enum ');
-    } else if (e.isMixin) {
-      buffer.write('mixin ');
-    } else {
-      buffer.write('class ');
-    }
-
-    writeIf(e.isMixinApplication, 'alias ');
-
-    writeName(e);
-    writeCodeRange(e);
-    writeTypeParameterElements(e.typeParameters, withDefault: true);
-
-    if (e.supertype != null && e.supertype!.element.name != 'Object' ||
-        e.mixins.isNotEmpty) {
-      buffer.write(' extends ');
-      writeType(e.supertype!);
-    }
-
-    if (e.isMixin) {
-      if (e.superclassConstraints.isEmpty) {
-        throw StateError('At least Object is expected.');
-      }
-      writeList(' on ', '', e.superclassConstraints, ', ', writeType);
-    }
-
-    writeList(' with ', '', e.mixins, ', ', writeType);
-    writeList(' implements ', '', e.interfaces, ', ', writeType);
-
-    buffer.writeln(' {');
-
+  void writeLibraryElement(LibraryElement e) {
+    _writelnWithIndent('library');
     _withIndent(() {
-      e.fields.forEach(writePropertyInducingElement);
-      e.accessors.forEach(writePropertyAccessorElement);
-
-      if (e.isEnum) {
-        expect(e.constructors, isEmpty);
-      } else {
-        expect(e.constructors, isNotEmpty);
+      var name = e.name;
+      if (name != null && name.isNotEmpty) {
+        _writelnWithIndent('name: $name');
       }
 
-      if (e.constructors.length == 1 &&
-          e.constructors[0].isSynthetic &&
-          e.mixins.isEmpty) {
-        expect(e.constructors[0].parameters, isEmpty);
-      } else {
-        e.constructors.forEach(writeConstructorElement);
+      var nameOffset = e.nameOffset;
+      if (nameOffset != -1) {
+        _writelnWithIndent('nameOffset: $nameOffset');
       }
 
-      e.methods.forEach(writeMethodElement);
-    });
+      _writeDocumentation(e);
+      _writeMetadata(e);
 
-    buffer.writeln('}');
+      var imports = e.imports.where((import) => !import.isSynthetic).toList();
+      _writeElements('imports', imports, _writeImportElement);
 
-    if (withResolvedAst) {
+      _writeElements('exports', e.exports, _writeExportElement);
+
+      _writelnWithIndent('definingUnit');
       _withIndent(() {
-        _writeResolvedMetadata(e.metadata);
-        _writeResolvedTypeParameters(e.typeParameters);
+        _writeUnitElement(e.definingCompilationUnit);
       });
-    }
-  }
 
-  void writeCodeRange(Element e) {
-    if (withCodeRanges) {
-      var elementImpl = e as ElementImpl;
-      buffer.write('/*codeOffset=');
-      buffer.write(elementImpl.codeOffset);
-      buffer.write(', codeLength=');
-      buffer.write(elementImpl.codeLength);
-      buffer.write('*/');
-    }
-  }
-
-  void writeConstructorElement(ConstructorElement e) {
-    writeDocumentation(e, '  ');
-    writeMetadata(e, '  ', '\n');
-
-    buffer.write('  ');
-
-    writeIf(e.isSynthetic, 'synthetic ');
-    writeIf(e.isExternal, 'external ');
-    writeIf(e.isConst, 'const ');
-    writeIf(e.isFactory, 'factory ');
-    expect(e.isAbstract, isFalse);
-
-    buffer.write(e.enclosingElement.name);
-    if (e.name.isNotEmpty) {
-      buffer.write('.');
-      buffer.write(e.displayName);
-    }
-    if (!e.isSynthetic) {
-      writeCodeRange(e);
-      if (withOffsets) {
-        var periodOffset = e.periodOffset;
-        var nameEnd = e.nameEnd;
-        if (periodOffset != null && nameEnd != null) {
-          buffer.write('[periodOffset: $periodOffset]');
-          buffer.write('[nameOffset: ${e.nameOffset}]');
-          buffer.write('[nameEnd: $nameEnd]');
-        } else {
-          buffer.write('[nameOffset: ${e.nameOffset}]');
-        }
-      }
-    }
-
-    writeParameterElements(e.parameters);
-
-    {
-      var redirected = e.redirectedConstructor;
-      if (redirected != null) {
-        buffer.write(' = ');
-        writeType(redirected.returnType);
-        if (redirected.name.isNotEmpty) {
-          buffer.write('.');
-          buffer.write(redirected.name);
-        }
-      }
-    }
-
-    var initializers = (e as ConstructorElementImpl).constantInitializers;
-    if (withResolvedAst) {
-      buffer.writeln(';');
-      _withIndent(() {
-        _writeResolvedMetadata(e.metadata);
-        if (initializers.isNotEmpty) {
-          _writelnWithIndent('constantInitializers');
-          _withIndent(() {
-            for (var initializer in initializers) {
-              _writeResolvedNode(initializer);
-            }
-          });
-        }
-        _writeParameterElementDefaultValues(e.parameters);
-      });
-    } else {
-      writeList(' : ', '', initializers, ', ', writeNode);
-      buffer.writeln(';');
-    }
-
-    expect(e.isAsynchronous, isFalse);
-    expect(e.isGenerator, isFalse);
-  }
-
-  void writeDocumentation(Element e, [String prefix = '']) {
-    var comment = e.documentationComment;
-    if (comment != null) {
-      if (comment.startsWith('///')) {
-        comment = comment.split('\n').join('\n$prefix');
-      }
-      buffer.write(prefix);
-      buffer.writeln(comment);
-    }
-  }
-
-  void writeExportElement(ExportElement e) {
-    writeMetadata(e, '', '\n');
-    buffer.write('export ');
-    writeUri(e.exportedLibrary?.source);
-
-    e.combinators.forEach(writeNamespaceCombinator);
-
-    buffer.writeln(';');
-  }
-
-  void writeExportScope(LibraryElement e) {
-    if (!withExportScope) return;
-
-    buffer.writeln();
-    buffer.writeln('-' * 20);
-    buffer.writeln('Exports:');
-
-    var map = e.exportNamespace.definedNames;
-    var names = map.keys.toList()..sort();
-    for (var name in names) {
-      var element = map[name];
-      var elementLocationStr = _getElementLocationString(element);
-      buffer.writeln('  $name: $elementLocationStr');
-    }
-  }
-
-  void writeExtensionElement(ExtensionElement e) {
-    writeDocumentation(e);
-    writeMetadata(e, '', '\n');
-
-    buffer.write('extension ');
-    writeName(e);
-    writeCodeRange(e);
-    writeTypeParameterElements(e.typeParameters, withDefault: false);
-    buffer.write(' on ');
-    writeType(e.extendedType);
-
-    buffer.writeln(' {');
-
-    _withIndent(() {
-      e.fields.forEach(writePropertyInducingElement);
-      e.accessors.forEach(writePropertyAccessorElement);
-      e.methods.forEach(writeMethodElement);
-    });
-
-    buffer.writeln('}');
-
-    if (withResolvedAst) {
-      _withIndent(() {
-        _writeResolvedMetadata(e.metadata);
-        _writeResolvedTypeParameters(e.typeParameters);
-      });
-    }
-  }
-
-  void writeFunctionElement(FunctionElement e) {
-    writeDocumentation(e);
-    writeMetadata(e, '', '\n');
-
-    writeIf(e.isExternal, 'external ');
-
-    writeType2(e.returnType);
-
-    writeName(e);
-    writeCodeRange(e);
-
-    writeTypeParameterElements(e.typeParameters, withDefault: false);
-    writeParameterElements(e.parameters);
-
-    writeBodyModifiers(e);
-
-    buffer.writeln(' {}');
-
-    if (withResolvedAst) {
-      _withIndent(() {
-        _writeResolvedTypeParameters(e.typeParameters);
-        _writeResolvedMetadata(e.metadata);
-        _writeParameterElementDefaultValues(e.parameters);
-      });
-    }
-  }
-
-  void writeIf(bool flag, String str) {
-    if (flag) {
-      buffer.write(str);
-    }
-  }
-
-  void writeImportElement(ImportElement e) {
-    if (!e.isSynthetic) {
-      writeMetadata(e, '', '\n');
-      buffer.write('import ');
-      writeUri(e.importedLibrary?.source);
-
-      writeIf(e.isDeferred, ' deferred');
-
-      var prefix = e.prefix;
-      if (prefix != null) {
-        buffer.write(' as ');
-        writeName(prefix);
-        if (withOffsets) {
-          buffer.write('(${prefix.nameOffset})');
-        }
-      }
-
-      e.combinators.forEach(writeNamespaceCombinator);
-
-      buffer.writeln(';');
-
-      if (withResolvedAst) {
+      _writeElements('parts', e.parts, (CompilationUnitElement e) {
+        _writelnWithIndent(e.uri!);
         _withIndent(() {
-          _writeResolvedMetadata(e.metadata);
+          _writeMetadata(e);
+          _writeUnitElement(e);
+        });
+      });
+
+      if (withExportScope) {
+        _writelnWithIndent('exportScope');
+        _withIndent(() {
+          _writeExportScope(e);
         });
       }
-    }
-  }
-
-  void writeInterfaceTypeArgsComment(Expression e) {
-    var typeArguments = (e.staticType as InterfaceType).typeArguments;
-    writeList('/*typeArgs=', '*/', typeArguments, ',', writeType);
-  }
-
-  void writeLibraryElement(LibraryElement e) {
-    if (e.documentationComment != null) {
-      buffer.writeln(e.documentationComment);
-    }
-
-    if (e.displayName != '') {
-      writeMetadata(e, '', '\n');
-      buffer.write('library ');
-      writeName(e);
-      buffer.writeln(';');
-    }
-
-    e.imports.forEach(writeImportElement);
-    e.exports.forEach(writeExportElement);
-    e.parts.forEach(writePartElement);
-
-    e.units.forEach(writeUnitElement);
-
-    writeExportScope(e);
-  }
-
-  void writeList<T>(String open, String close, List<T> items, String separator,
-      Function(T item) writeItem,
-      {bool includeEmpty = false}) {
-    if (!includeEmpty && items.isEmpty) {
-      return;
-    }
-    buffer.write(open);
-    bool first = true;
-    for (T item in items) {
-      if (!first) {
-        buffer.write(separator);
-      }
-      writeItem(item);
-      first = false;
-    }
-    buffer.write(close);
-  }
-
-  void writeMetadata(Element e, String prefix, String separator) {
-    if (withResolvedAst) {
-      return;
-    }
-
-    if (e.metadata.isNotEmpty) {
-      writeList(prefix, '', e.metadata, '$separator$prefix', (a) {
-        writeNode((a as ElementAnnotationImpl).annotationAst);
-      });
-      buffer.write(separator);
-    }
-  }
-
-  void writeMethodElement(MethodElement e) {
-    writeDocumentation(e, '  ');
-    writeMetadata(e, '  ', '\n');
-
-    buffer.write('  ');
-
-    writeIf(e.isExternal, 'external ');
-    writeIf(e.isStatic, 'static ');
-
-    writeType2(e.returnType);
-
-    writeName(e);
-    writeCodeRange(e);
-    writeTypeInferenceError(e);
-
-    writeTypeParameterElements(e.typeParameters, withDefault: false);
-    writeParameterElements(e.parameters);
-
-    writeBodyModifiers(e);
-
-    if (e.isAbstract) {
-      buffer.writeln(';');
-    } else {
-      buffer.writeln(' {}');
-    }
-
-    if (withResolvedAst) {
-      _withIndent(() {
-        _writeResolvedTypeParameters(e.typeParameters);
-        _writeResolvedMetadata(e.metadata);
-        _writeParameterElementDefaultValues(e.parameters);
-      });
-    }
-  }
-
-  void writeName(Element e) {
-    buffer.write(e.displayName);
-    if (withOffsets) {
-      buffer.write('@');
-      buffer.write(e.nameOffset);
-    }
-  }
-
-  void writeNamespaceCombinator(NamespaceCombinator e) {
-    if (e is ShowElementCombinator) {
-      buffer.write(' show ');
-      buffer.write(e.shownNames.join(', '));
-    } else if (e is HideElementCombinator) {
-      buffer.write(' hide ');
-      buffer.write(e.hiddenNames.join(', '));
-    }
-  }
-
-  void writeNode(AstNode? e, {Expression? enclosing}) {
-    bool needsParenthesis = e is Expression &&
-        enclosing != null &&
-        e.precedence < enclosing.precedence;
-
-    if (needsParenthesis) {
-      buffer.write('(');
-    }
-
-    if (e == null) {
-      buffer.write('<null>');
-    } else if (e is SimpleIdentifier && e.name == '#invalidConst') {
-      buffer.write('#invalidConst');
-    } else if (e is AdjacentStrings) {
-      writeList("'", "'", e.strings, '',
-          (StringLiteral s) => buffer.write(s.stringValue),
-          includeEmpty: true);
-    } else if (e is Annotation) {
-      buffer.write('@');
-      writeNode(e.name);
-      if (e.constructorName != null) {
-        buffer.write('.');
-        writeNode(e.constructorName);
-      }
-      if (e.arguments != null) {
-        writeList('(', ')', e.arguments!.arguments, ', ', writeNode,
-            includeEmpty: true);
-      }
-    } else if (e is AsExpression) {
-      writeNode(e.expression);
-      buffer.write(' as ');
-      writeNode(e.type);
-    } else if (e is AssertInitializer) {
-      buffer.write('assert(');
-      writeNode(e.condition);
-      if (e.message != null) {
-        buffer.write(', ');
-        writeNode(e.message);
-      }
-      buffer.write(')');
-    } else if (e is BinaryExpression) {
-      writeNode(e.leftOperand, enclosing: e);
-      buffer.write(' ');
-      buffer.write(e.operator.lexeme);
-      buffer.write(' ');
-      writeNode(e.rightOperand, enclosing: e);
-    } else if (e is BooleanLiteral) {
-      buffer.write(e.value);
-    } else if (e is ConditionalExpression) {
-      writeNode(e.condition);
-      buffer.write(' ? ');
-      writeNode(e.thenExpression);
-      buffer.write(' : ');
-      writeNode(e.elseExpression);
-    } else if (e is ConstructorFieldInitializer) {
-      writeNode(e.fieldName);
-      buffer.write(' = ');
-      writeNode(e.expression);
-    } else if (e is ConstructorName) {
-      writeNode(e.type);
-      if (e.name != null) {
-        buffer.write('.');
-        writeNode(e.name);
-      }
-    } else if (e is DoubleLiteral) {
-      buffer.write(e.value);
-    } else if (e is GenericFunctionType) {
-      if (e.returnType != null) {
-        writeNode(e.returnType);
-        buffer.write(' ');
-      }
-      buffer.write('Function');
-      if (e.typeParameters != null) {
-        writeList('<', '>', e.typeParameters!.typeParameters, ', ', writeNode);
-      }
-      writeList('(', ')', e.parameters.parameters, ', ', writeNode,
-          includeEmpty: true);
-    } else if (e is InstanceCreationExpression) {
-      if (e.keyword != null) {
-        buffer.write(e.keyword!.lexeme);
-        buffer.write(' ');
-      }
-      if (withTypes && e.constructorName.type.typeArguments == null) {
-        writeInterfaceTypeArgsComment(e);
-      }
-      writeNode(e.constructorName);
-      writeList('(', ')', e.argumentList.arguments, ', ', writeNode,
-          includeEmpty: true);
-    } else if (e is IntegerLiteral) {
-      buffer.write(e.value);
-    } else if (e is InterpolationExpression) {
-      buffer.write(r'${');
-      writeNode(e.expression);
-      buffer.write(r'}');
-    } else if (e is InterpolationString) {
-      buffer.write(e.value.replaceAll("'", r"\'"));
-    } else if (e is IsExpression) {
-      writeNode(e.expression);
-      buffer.write(e.notOperator == null ? ' is ' : ' is! ');
-      writeNode(e.type);
-    } else if (e is ListLiteral) {
-      if (e.constKeyword != null) {
-        buffer.write('const ');
-      }
-      if (e.typeArguments != null) {
-        writeList('<', '>', e.typeArguments!.arguments, ', ', writeNode);
-      } else if (withTypes) {
-        writeInterfaceTypeArgsComment(e);
-      }
-      writeList('[', ']', e.elements, ', ', writeNode, includeEmpty: true);
-    } else if (e is Label) {
-      writeNode(e.label);
-      buffer.write(': ');
-    } else if (e is SetOrMapLiteral) {
-      if (e.constKeyword != null) {
-        buffer.write('const ');
-      }
-      if (e.typeArguments != null) {
-        writeList('<', '>', e.typeArguments!.arguments, ', ', writeNode);
-      } else if (withTypes) {
-        writeInterfaceTypeArgsComment(e);
-      }
-      writeList('{', '}', e.elements, ', ', writeNode, includeEmpty: true);
-      if (e.isMap) {
-        buffer.write('/*isMap*/');
-      }
-      if (e.isSet) {
-        buffer.write('/*isSet*/');
-      }
-    } else if (e is MapLiteralEntry) {
-      writeNode(e.key);
-      buffer.write(': ');
-      writeNode(e.value);
-    } else if (e is MethodInvocation) {
-      if (e.target != null) {
-        writeNode(e.target);
-        buffer.write(e.operator);
-      }
-      writeNode(e.methodName);
-      if (e.typeArguments != null) {
-        writeList('<', '>', e.typeArguments!.arguments, ', ', writeNode);
-      }
-      writeList('(', ')', e.argumentList.arguments, ', ', writeNode,
-          includeEmpty: true);
-    } else if (e is NamedExpression) {
-      writeNode(e.name);
-      buffer.write(e.expression);
-    } else if (e is NullLiteral) {
-      buffer.write('null');
-    } else if (e is ParenthesizedExpression) {
-      writeNode(e.expression, enclosing: e);
-    } else if (e is PrefixExpression) {
-      buffer.write(e.operator.lexeme);
-      writeNode(e.operand, enclosing: e);
-    } else if (e is PrefixedIdentifier) {
-      writeNode(e.prefix);
-      buffer.write('.');
-      writeNode(e.identifier);
-    } else if (e is PropertyAccess) {
-      writeNode(e.target, enclosing: e);
-      buffer.write('.');
-      writeNode(e.propertyName);
-    } else if (e is RedirectingConstructorInvocation) {
-      buffer.write('this');
-      if (e.constructorName != null) {
-        buffer.write('.');
-        writeNode(e.constructorName);
-      }
-      writeList('(', ')', e.argumentList.arguments, ', ', writeNode,
-          includeEmpty: true);
-    } else if (e is SimpleFormalParameter) {
-      writeNode(e.type);
-      if (e.identifier != null) {
-        buffer.write(' ');
-        buffer.write(e.identifier!.name);
-      }
-    } else if (e is SimpleIdentifier) {
-      if (withConstElements) {
-        buffer.writeln();
-        buffer.write('  ' * 4);
-        buffer.write(e.name);
-        buffer.write('/*');
-        buffer.write('location: ');
-        buffer.write(_getElementLocationString(e.staticElement));
-        buffer.write('*/');
-      } else {
-        buffer.write(e.name);
-      }
-    } else if (e is SimpleStringLiteral) {
-      buffer.write("'");
-      buffer.write(e.value.replaceAll("'", r"\'"));
-      buffer.write("'");
-    } else if (e is StringInterpolation) {
-      buffer.write("'");
-      e.elements.forEach(writeNode);
-      buffer.write("'");
-    } else if (e is SuperConstructorInvocation) {
-      buffer.write('super');
-      if (e.constructorName != null) {
-        buffer.write('.');
-        writeNode(e.constructorName);
-      }
-      writeList('(', ')', e.argumentList.arguments, ', ', writeNode,
-          includeEmpty: true);
-    } else if (e is SuperExpression) {
-      buffer.write('super');
-    } else if (e is SymbolLiteral) {
-      buffer.write('#');
-      writeList('', '', e.components, '.',
-          (Token token) => buffer.write(token.lexeme));
-    } else if (e is ThisExpression) {
-      buffer.write('this');
-    } else if (e is ThrowExpression) {
-      buffer.write('throw ');
-      writeNode(e.expression);
-    } else if (e is TypeName) {
-      writeNode(e.name);
-      if (e.typeArguments != null) {
-        writeList('<', '>', e.typeArguments!.arguments, ', ', writeNode);
-      }
-    } else if (e is SpreadElement) {
-      buffer.write(e.spreadOperator.lexeme);
-      writeNode(e.expression);
-    } else if (e is IfElement) {
-      buffer.write('if (');
-      writeNode(e.condition);
-      buffer.write(') ');
-      writeNode(e.thenElement);
-      var elseElement = e.elseElement;
-      if (elseElement != null) {
-        buffer.write(' else ');
-        writeNode(elseElement);
-      }
-    } else {
-      fail('Unsupported expression type: ${e.runtimeType}');
-    }
-
-    if (needsParenthesis) {
-      buffer.write(')');
-    }
-  }
-
-  void writeParameterElement(ParameterElement e) {
-    String? defaultValueSeparator;
-    Expression? defaultValue;
-    String closeString;
-    if (e.isRequiredPositional) {
-      closeString = '';
-    } else if (e.isOptionalPositional) {
-      buffer.write('[');
-      defaultValueSeparator = ' = ';
-      defaultValue = (e as ConstVariableElement).constantInitializer;
-      closeString = ']';
-    } else if (e.isNamed) {
-      buffer.write('{');
-      defaultValueSeparator = ': ';
-      defaultValue = (e as ConstVariableElement).constantInitializer;
-      closeString = '}';
-    } else {
-      fail('Unknown parameter kind');
-    }
-
-    writeMetadata(e, '', ' ');
-
-    writeIf(e.isCovariant, 'covariant ');
-    writeIf(e.isFinal, 'final ');
-
-    writeType2(e.type);
-
-    if (e is FieldFormalParameterElement) {
-      buffer.write('this.');
-    }
-
-    writeName(e);
-    writeCodeRange(e);
-
-    if (!withResolvedAst) {
-      if (e.typeParameters.isNotEmpty) {
-        buffer.write('/*');
-        writeTypeParameterElements(e.typeParameters, withDefault: false);
-        buffer.write('*/');
-      }
-
-      if (e.parameters.isNotEmpty) {
-        buffer.write('/*');
-        writeList('(', ')', e.parameters, ', ', writeParameterElement);
-        buffer.write('*/');
-      }
-
-      if (defaultValue != null) {
-        buffer.write(defaultValueSeparator);
-        writeNode(defaultValue);
-      }
-    }
-
-    buffer.write(closeString);
-  }
-
-  void writeParameterElements(List<ParameterElement> elements) {
-    writeList('(', ')', elements, ', ', writeParameterElement,
-        includeEmpty: true);
-  }
-
-  void writePartElement(CompilationUnitElement e) {
-    writeMetadata(e, '', '\n');
-    buffer.write('part ');
-    writeUri(e.source);
-    buffer.writeln(';');
-  }
-
-  void writePropertyAccessorElement(PropertyAccessorElement e) {
-    if (e.isSynthetic && !withSyntheticAccessors) {
-      return;
-    }
-
-    if (!e.isSynthetic) {
-      PropertyInducingElement variable = e.variable;
-      expect(variable, isNotNull);
-
-      if (e.isGetter) {
-        // Usually we have a synthetic property for a non-synthetic accessor.
-        expect(variable.isSynthetic, isTrue);
-      } else {
-        // But it is possible to have a non-synthetic property.
-        // class A {
-        //   final int foo;
-        //   set foo(int newValue) {}
-        // }
-      }
-
-      var variableEnclosing = variable.enclosingElement;
-      if (variableEnclosing is CompilationUnitElement) {
-        expect(variableEnclosing.topLevelVariables, contains(variable));
-      } else if (variableEnclosing is ClassElement) {
-        expect(variableEnclosing.fields, contains(variable));
-      }
-
-      if (e.isGetter) {
-        expect(variable.getter, same(e));
-        if (variable.setter != null) {
-          expect(variable.setter!.variable, same(variable));
-        }
-      } else {
-        expect(variable.setter, same(e));
-        if (variable.getter != null) {
-          expect(variable.getter!.variable, same(variable));
-        }
-      }
-    }
-
-    if (e.enclosingElement is ClassElement ||
-        e.enclosingElement is ExtensionElement) {
-      writeDocumentation(e, '  ');
-      writeMetadata(e, '  ', '\n');
-
-      buffer.write('  ');
-
-      writeIf(e.isSynthetic, 'synthetic ');
-      writeIf(e.isStatic, 'static ');
-    } else {
-      writeDocumentation(e);
-      writeMetadata(e, '', '\n');
-      writeIf(e.isSynthetic, 'synthetic ');
-    }
-
-    writeIf(e.isExternal, 'external ');
-
-    writeType2(e.returnType);
-
-    if (e.isGetter) {
-      buffer.write('get ');
-    } else {
-      buffer.write('set ');
-    }
-
-    writeName(e);
-
-    expect(e.typeParameters, isEmpty);
-
-    if (e.isSetter || e.parameters.isNotEmpty) {
-      writeParameterElements(e.parameters);
-    }
-
-    writeBodyModifiers(e);
-
-    if (e.isAbstract || e.isExternal) {
-      buffer.writeln(';');
-    } else {
-      buffer.writeln(' {}');
-    }
-
-    if (withResolvedAst) {
-      _withIndent(() {
-        _writeResolvedMetadata(e.metadata);
-        _writeParameterElementDefaultValues(e.parameters);
-      });
-    }
-  }
-
-  void writePropertyInducingElement(PropertyInducingElement e) {
-    if (e.isSynthetic && !withSyntheticFields && !isEnumField(e)) {
-      return;
-    }
-
-    DartType type = e.type;
-    expect(type, isNotNull);
-
-    if (!e.isSynthetic) {
-      expect(e.getter, isNotNull);
-      _assertSyntheticAccessorEnclosing(e, e.getter!);
-
-      if (e.setter != null) {
-        _assertSyntheticAccessorEnclosing(e, e.setter!);
-      }
-    }
-
-    if (e.enclosingElement is ClassElement ||
-        e.enclosingElement is ExtensionElement) {
-      writeDocumentation(e, '  ');
-      writeMetadata(e, '  ', '\n');
-
-      buffer.write('  ');
-
-      writeIf(e.isSynthetic, 'synthetic ');
-      writeIf(e.isStatic, 'static ');
-      writeIf(e is FieldElementImpl && e.isAbstract, 'abstract ');
-      writeIf(e is FieldElementImpl && e.isCovariant, 'covariant ');
-      writeIf(e is FieldElementImpl && e.isExternal, 'external ');
-    } else {
-      writeDocumentation(e);
-      writeMetadata(e, '', '\n');
-      writeIf(e.isSynthetic, 'synthetic ');
-      writeIf(e is TopLevelVariableElementImpl && e.isExternal, 'external ');
-    }
-
-    writeIf(e.isLate, 'late ');
-    writeIf(e.isFinal, 'final ');
-    writeIf(e.isConst, 'const ');
-    writeType2(type);
-
-    writeName(e);
-    writeCodeRange(e);
-
-    writeTypeInferenceError(e);
-
-    if (withResolvedAst) {
-      buffer.writeln(';');
-      _withIndent(() {
-        _writeResolvedMetadata(e.metadata);
-        if (e is ConstVariableElement) {
-          var initializer = (e as ConstVariableElement).constantInitializer;
-          if (initializer != null) {
-            _writelnWithIndent('constantInitializer');
-            _withIndent(() {
-              _writeResolvedNode(initializer);
-            });
-          }
-        }
-      });
-    } else {
-      if (e is ConstVariableElement) {
-        var initializer = (e as ConstVariableElement).constantInitializer;
-        if (initializer != null) {
-          buffer.write(' = ');
-          writeNode(initializer);
-        }
-      }
-      buffer.writeln(';');
-    }
-
-    // TODO(scheglov) Paul: One of the things that was hardest to get right
-    // when resynthesizing the element model was the synthetic function for the
-    // initializer.  Can we write that out (along with its return type)?
-  }
-
-  void writeType(DartType type) {
-    var typeStr = _typeStr(type);
-    buffer.write(typeStr);
-
-    if (withAliasElementArguments) {
-      var aliasElement = type.aliasElement;
-      if (aliasElement is TypeAliasElementImpl) {
-        buffer.write('<aliasElement: ');
-        buffer.write(_referenceToString(aliasElement.reference!));
-        var typeArguments = type.aliasArguments!;
-        writeList(', aliasArguments: [', ']', typeArguments, ', ', writeType);
-        buffer.write('>');
-      }
-    }
-  }
-
-  void writeType2(DartType type) {
-    writeType(type);
-    buffer.write(' ');
-  }
-
-  void writeTypeAliasElement(TypeAliasElement e) {
-    writeDocumentation(e);
-    writeMetadata(e, '', '\n');
-    writeIf(!e.isSimplyBounded, 'notSimplyBounded ');
-
-    buffer.write('typedef ');
-    writeName(e);
-    writeCodeRange(e);
-    writeTypeParameterElements(e.typeParameters, withDefault: true);
-
-    buffer.write(' = ');
-
-    var aliasedElement = e.aliasedElement;
-    if (aliasedElement is GenericFunctionTypeElement) {
-      writeType(aliasedElement.returnType);
-      buffer.write(' Function');
-      writeTypeParameterElements(aliasedElement.typeParameters,
-          withDefault: false);
-      writeParameterElements(aliasedElement.parameters);
-    } else {
-      writeType(e.aliasedType);
-    }
-
-    buffer.writeln(';');
-
-    if (withResolvedAst) {
-      _withIndent(() {
-        _writeResolvedMetadata(e.metadata);
-        _writeResolvedTypeParameters(e.typeParameters);
-        var aliasedElement = e.aliasedElement;
-        if (aliasedElement is GenericFunctionTypeElement) {
-          _writelnWithIndent('aliasedElement');
-          _withIndent(() {
-            _writeResolvedTypeParameters(aliasedElement.typeParameters);
-            _writeResolvedParameterElements(aliasedElement.parameters);
-          });
-        }
-      });
-    }
-  }
-
-  void writeTypeInferenceError(Element e) {
-    TopLevelInferenceError? inferenceError;
-    if (e is MethodElementImpl) {
-      inferenceError = e.typeInferenceError;
-    } else if (e is PropertyInducingElementImpl) {
-      inferenceError = e.typeInferenceError;
-    }
-
-    if (inferenceError != null) {
-      String kindName = inferenceError.kind.toString();
-      if (kindName.startsWith('TopLevelInferenceErrorKind.')) {
-        kindName = kindName.substring('TopLevelInferenceErrorKind.'.length);
-      }
-      buffer.write('/*error: $kindName*/');
-    }
-  }
-
-  void writeTypeParameterElement(
-    TypeParameterElement e, {
-    required bool withDefault,
-  }) {
-    var impl = e as TypeParameterElementImpl;
-
-    writeMetadata(e, '', '\n');
-
-    // TODO (kallentu) : Clean up TypeParameterElementImpl casting once
-    // variance is added to the interface.
-    if (withTypeParameterVariance) {
-      var variance = impl.variance;
-      buffer.write(variance.toString() + ' ');
-    }
-
-    writeName(e);
-    writeCodeRange(e);
-    if (e.bound != null && !e.bound!.isDartCoreObject) {
-      buffer.write(' extends ');
-      writeType(e.bound!);
-    }
-
-    if (withDefault) {
-      var defaultType = impl.defaultType!;
-      if (defaultType is! DynamicTypeImpl) {
-        buffer.write(' = ');
-        writeType(defaultType);
-      }
-    }
-  }
-
-  void writeTypeParameterElements(
-    List<TypeParameterElement> elements, {
-    required bool withDefault,
-  }) {
-    if (!withResolvedAst) {
-      writeList<TypeParameterElement>('<', '>', elements, ', ', (e) {
-        writeTypeParameterElement(e, withDefault: withDefault);
-      });
-    }
-  }
-
-  void writeUnitElement(CompilationUnitElement e) {
-    if (e.library.definingCompilationUnit != e) {
-      buffer.writeln('-' * 20);
-      buffer.writeln('unit: ${e.source.shortName}');
-      buffer.writeln();
-    }
-    e.typeAliases.forEach(writeTypeAliasElement);
-    e.enums.forEach(writeClassElement);
-    e.classes.forEach(writeClassElement);
-    e.mixins.forEach(writeClassElement);
-    e.extensions.forEach(writeExtensionElement);
-    e.topLevelVariables.forEach(writePropertyInducingElement);
-    e.accessors.forEach(writePropertyAccessorElement);
-    e.functions.forEach(writeFunctionElement);
-  }
-
-  void writeUri(Source? source) {
-    if (source != null) {
-      Uri uri = source.uri;
-      String uriStr = uri.toString();
-      if (uri.isScheme('file')) {
-        uriStr = uri.pathSegments.last;
-      }
-      buffer.write('\'$uriStr\'');
-    } else {
-      buffer.write('\'<unresolved>\'');
-    }
+    });
   }
 
   /// Assert that the [accessor] of the [property] is correctly linked to
@@ -1232,6 +195,16 @@
     }
   }
 
+  ResolvedAstPrinter _createAstPrinter() {
+    return ResolvedAstPrinter(
+      selfUriStr: selfUriStr,
+      sink: buffer,
+      indent: indent,
+      withNullability: true,
+      withOffsets: true,
+    );
+  }
+
   String _getElementLocationString(Element? element) {
     if (element == null || element is MultiplyDefinedElement) {
       return 'null';
@@ -1258,25 +231,6 @@
     return components.join(';');
   }
 
-  String _referenceToString(Reference reference) {
-    var parent = reference.parent!;
-    if (parent.parent == null) {
-      var libraryUriStr = reference.name;
-      if (libraryUriStr == selfUriStr) {
-        return 'self';
-      }
-      return libraryUriStr;
-    }
-
-    // Ignore the unit, skip to the library.
-    if (parent.name == '@unit') {
-      return _referenceToString(parent.parent!);
-    }
-
-    var name = reference.name;
-    return _referenceToString(parent) + '::$name';
-  }
-
   String? _typeStr(DartType? type) {
     return type?.getDisplayString(
       withNullability: true,
@@ -1290,10 +244,249 @@
     indent = savedIndent;
   }
 
-  void _writelnTypeWithIndent(String name, DartType? type) {
+  void _writeBodyModifiers(ExecutableElement e) {
+    if (e.isAsynchronous) {
+      expect(e.isSynchronous, isFalse);
+      buffer.write(' async');
+    }
+
+    if (e.isSynchronous && e.isGenerator) {
+      expect(e.isAsynchronous, isFalse);
+      buffer.write(' sync');
+    }
+
+    _writeIf(e.isGenerator, '*');
+  }
+
+  void _writeClassElement(ClassElement e) {
+    _writeIndentedLine(() {
+      _writeIf(e.isAbstract && !e.isMixin, 'abstract ');
+      _writeIf(!e.isSimplyBounded, 'notSimplyBounded ');
+
+      if (e.isEnum) {
+        buffer.write('enum ');
+      } else if (e.isMixin) {
+        buffer.write('mixin ');
+      } else {
+        buffer.write('class ');
+      }
+      _writeIf(e.isMixinApplication, 'alias ');
+
+      _writeName(e);
+    });
+
+    _withIndent(() {
+      _writeDocumentation(e);
+      _writeMetadata(e);
+      _writeCodeRange(e);
+      _writeTypeParameterElements(e.typeParameters);
+
+      var supertype = e.supertype;
+      if (supertype != null &&
+          (supertype.element.name != 'Object' || e.mixins.isNotEmpty)) {
+        _writeType(supertype, name: 'supertype');
+      }
+
+      if (e.isMixin) {
+        var superclassConstraints = e.superclassConstraints;
+        if (superclassConstraints.isEmpty) {
+          throw StateError('At least Object is expected.');
+        }
+        _writeElements<DartType>(
+          'superclassConstraints',
+          superclassConstraints,
+          _writeType,
+        );
+      }
+
+      _writeElements<DartType>('mixins', e.mixins, _writeType);
+      _writeElements<DartType>('interfaces', e.interfaces, _writeType);
+
+      _writeElements('fields', e.fields, _writePropertyInducingElement);
+
+      var constructors = e.constructors;
+      if (e.isEnum) {
+        expect(constructors, isEmpty);
+      } else {
+        expect(constructors, isNotEmpty);
+      }
+      _writeElements('constructors', constructors, _writeConstructorElement);
+
+      _writeElements('accessors', e.accessors, _writePropertyAccessorElement);
+      _writeElements('methods', e.methods, _writeMethodElement);
+    });
+  }
+
+  void _writeCodeRange(Element e) {
+    if (withCodeRanges && !e.isSynthetic) {
+      e as ElementImpl;
+      _writelnWithIndent('codeOffset: ${e.codeOffset}');
+      _writelnWithIndent('codeLength: ${e.codeLength}');
+    }
+  }
+
+  void _writeConstantInitializer(Element e) {
+    if (e is ConstVariableElement) {
+      var initializer = e.constantInitializer;
+      if (initializer != null) {
+        _writelnWithIndent('constantInitializer');
+        _withIndent(() {
+          _writeNode(initializer);
+        });
+      }
+    }
+  }
+
+  void _writeConstructorElement(ConstructorElement e) {
+    e as ConstructorElementImpl;
+
+    _writeIndentedLine(() {
+      _writeIf(e.isSynthetic, 'synthetic ');
+      _writeIf(e.isExternal, 'external ');
+      _writeIf(e.isConst, 'const ');
+      _writeIf(e.isFactory, 'factory ');
+      expect(e.isAbstract, isFalse);
+      _writeName(e);
+    });
+
+    _withIndent(() {
+      _writeDocumentation(e);
+      _writeMetadata(e);
+      _writeCodeRange(e);
+
+      var periodOffset = e.periodOffset;
+      var nameEnd = e.nameEnd;
+      if (periodOffset != null && nameEnd != null) {
+        _writelnWithIndent('periodOffset: $periodOffset');
+        _writelnWithIndent('nameEnd: $nameEnd');
+      }
+
+      _writeParameterElements(e.parameters);
+
+      _writeElements(
+        'constantInitializers',
+        e.constantInitializers,
+        _writeNode,
+      );
+
+      var redirectedConstructor = e.redirectedConstructor;
+      if (redirectedConstructor != null) {
+        var printer = _createAstPrinter();
+        printer.writeElement('redirectedConstructor', redirectedConstructor);
+      }
+    });
+
+    expect(e.isAsynchronous, isFalse);
+    expect(e.isGenerator, isFalse);
+  }
+
+  void _writeDocumentation(Element element) {
+    var documentation = element.documentationComment;
+    if (documentation != null) {
+      var str = documentation;
+      str = str.replaceAll('\n', r'\n');
+      str = str.replaceAll('\r', r'\r');
+      _writelnWithIndent('documentationComment: $str');
+    }
+  }
+
+  void _writeElements<T>(String name, List<T> elements, void Function(T) f) {
+    if (elements.isNotEmpty) {
+      _writelnWithIndent(name);
+      _withIndent(() {
+        for (var element in elements) {
+          f(element);
+        }
+      });
+    }
+  }
+
+  void _writeExportElement(ExportElement e) {
+    _writeIndentedLine(() {
+      _writeUri(e.exportedLibrary?.source);
+    });
+
+    _withIndent(() {
+      _writeMetadata(e);
+      _writeNamespaceCombinators(e.combinators);
+    });
+  }
+
+  void _writeExportScope(LibraryElement e) {
+    var map = e.exportNamespace.definedNames;
+    var names = map.keys.toList()..sort();
+    for (var name in names) {
+      var element = map[name];
+      var elementLocationStr = _getElementLocationString(element);
+      _writelnWithIndent('$name: $elementLocationStr');
+    }
+  }
+
+  void _writeExtensionElement(ExtensionElement e) {
+    _writeIndentedLine(() {
+      _writeName(e);
+    });
+
+    _withIndent(() {
+      _writeDocumentation(e);
+      _writeMetadata(e);
+      _writeCodeRange(e);
+      _writeTypeParameterElements(e.typeParameters);
+      _writeType(e.extendedType, name: 'extendedType');
+    });
+
+    _withIndent(() {
+      _writeElements('fields', e.fields, _writePropertyInducingElement);
+      _writeElements('accessors', e.accessors, _writePropertyAccessorElement);
+      _writeElements('methods', e.methods, _writeMethodElement);
+    });
+  }
+
+  void _writeFunctionElement(FunctionElement e) {
+    _writeIndentedLine(() {
+      _writeIf(e.isExternal, 'external ');
+      _writeName(e);
+      _writeBodyModifiers(e);
+    });
+
+    _withIndent(() {
+      _writeDocumentation(e);
+      _writeMetadata(e);
+      _writeCodeRange(e);
+      _writeTypeParameterElements(e.typeParameters);
+      _writeParameterElements(e.parameters);
+      _writeType(e.returnType, name: 'returnType');
+    });
+  }
+
+  void _writeIf(bool flag, String str) {
+    if (flag) {
+      buffer.write(str);
+    }
+  }
+
+  void _writeImportElement(ImportElement e) {
+    _writeIndentedLine(() {
+      _writeUri(e.importedLibrary?.source);
+      _writeIf(e.isDeferred, ' deferred');
+
+      var prefix = e.prefix;
+      if (prefix != null) {
+        buffer.write(' as ');
+        _writeName(prefix);
+      }
+    });
+
+    _withIndent(() {
+      _writeMetadata(e);
+      _writeNamespaceCombinators(e.combinators);
+    });
+  }
+
+  void _writeIndentedLine(void Function() f) {
     buffer.write(indent);
-    buffer.write('$name: ');
-    buffer.writeln(_typeStr(type));
+    f();
+    buffer.writeln();
   }
 
   void _writelnWithIndent(String line) {
@@ -1301,101 +494,320 @@
     buffer.writeln(line);
   }
 
-  void _writeParameterElementDefaultValues(
-    List<ParameterElement> parameters, {
-    String enclosingNames = '',
-  }) {
-    for (var parameter in parameters) {
-      if (parameter is ConstVariableElement) {
-        var defaultParameter = parameter as ConstVariableElement;
-        var defaultValue = defaultParameter.constantInitializer;
-        if (defaultValue != null) {
-          _writelnWithIndent(enclosingNames + parameter.name);
-          _withIndent(() {
-            _writeResolvedNode(defaultValue);
-          });
-        }
-      }
-      var subParameters = parameter.parameters;
+  void _writeMetadata(Element element) {
+    var annotations = element.metadata;
+    if (annotations.isNotEmpty) {
+      _writelnWithIndent('metadata');
       _withIndent(() {
-        _writeParameterElementDefaultValues(
-          subParameters,
-          enclosingNames: enclosingNames + parameter.name + '::',
+        for (var annotation in annotations) {
+          annotation as ElementAnnotationImpl;
+          _writeNode(annotation.annotationAst);
+        }
+      });
+    }
+  }
+
+  void _writeMethodElement(MethodElement e) {
+    _writeIndentedLine(() {
+      _writeIf(e.isStatic, 'static ');
+      _writeIf(e.isAbstract, 'abstract ');
+      _writeIf(e.isExternal, 'external ');
+
+      _writeName(e);
+      _writeBodyModifiers(e);
+    });
+
+    _withIndent(() {
+      _writeDocumentation(e);
+      _writeMetadata(e);
+      _writeCodeRange(e);
+      _writeTypeInferenceError(e);
+
+      _writeTypeParameterElements(e.typeParameters);
+      _writeParameterElements(e.parameters);
+      _writeType(e.returnType, name: 'returnType');
+    });
+  }
+
+  void _writeName(Element e) {
+    var name = e.displayName;
+    buffer.write(name);
+    buffer.write(name.isNotEmpty ? ' @' : '@');
+    buffer.write(e.nameOffset);
+  }
+
+  void _writeNamespaceCombinator(NamespaceCombinator e) {
+    _writeIndentedLine(() {
+      if (e is ShowElementCombinator) {
+        buffer.write('show: ');
+        buffer.write(e.shownNames.join(', '));
+      } else if (e is HideElementCombinator) {
+        buffer.write('hide: ');
+        buffer.write(e.hiddenNames.join(', '));
+      }
+    });
+  }
+
+  void _writeNamespaceCombinators(List<NamespaceCombinator> elements) {
+    _writeElements('combinators', elements, _writeNamespaceCombinator);
+  }
+
+  void _writeNode(AstNode node) {
+    buffer.write(indent);
+    node.accept(
+      _createAstPrinter(),
+    );
+  }
+
+  void _writeParameterElement(ParameterElement e) {
+    _writeIndentedLine(() {
+      if (e.isRequiredPositional) {
+        buffer.write('requiredPositional ');
+      } else if (e.isOptionalPositional) {
+        buffer.write('optionalPositional ');
+      } else if (e.isRequiredNamed) {
+        buffer.write('requiredName ');
+      } else if (e.isOptionalNamed) {
+        buffer.write('optionalNamed ');
+      }
+
+      _writeIf(e.isCovariant, 'covariant ');
+      _writeIf(e.isFinal, 'final ');
+
+      if (e is FieldFormalParameterElement) {
+        buffer.write('this.');
+      }
+
+      _writeName(e);
+    });
+
+    _withIndent(() {
+      _writeType(e.type, name: 'type');
+      _writeMetadata(e);
+      _writeCodeRange(e);
+      _writeTypeParameterElements(e.typeParameters);
+      _writeParameterElements(e.parameters);
+      _writeConstantInitializer(e);
+    });
+  }
+
+  void _writeParameterElements(List<ParameterElement> elements) {
+    _writeElements('parameters', elements, _writeParameterElement);
+  }
+
+  void _writePropertyAccessorElement(PropertyAccessorElement e) {
+    PropertyInducingElement variable = e.variable;
+    expect(variable, isNotNull);
+
+    var variableEnclosing = variable.enclosingElement;
+    if (variableEnclosing is CompilationUnitElement) {
+      expect(variableEnclosing.topLevelVariables, contains(variable));
+    } else if (variableEnclosing is ClassElement) {
+      expect(variableEnclosing.fields, contains(variable));
+    }
+
+    if (e.isGetter) {
+      expect(variable.getter, same(e));
+      if (variable.setter != null) {
+        expect(variable.setter!.variable, same(variable));
+      }
+    } else {
+      expect(variable.setter, same(e));
+      if (variable.getter != null) {
+        expect(variable.getter!.variable, same(variable));
+      }
+    }
+
+    _writeIndentedLine(() {
+      _writeIf(e.isSynthetic, 'synthetic ');
+      _writeIf(e.isStatic, 'static ');
+      _writeIf(e.isAbstract, 'abstract ');
+      _writeIf(e.isExternal, 'external ');
+
+      if (e.isGetter) {
+        buffer.write('get ');
+      } else {
+        buffer.write('set ');
+      }
+
+      _writeName(e);
+      _writeBodyModifiers(e);
+    });
+
+    _withIndent(() {
+      _writeDocumentation(e);
+      _writeMetadata(e);
+      _writeCodeRange(e);
+
+      expect(e.typeParameters, isEmpty);
+      _writeParameterElements(e.parameters);
+      _writeType(e.returnType, name: 'returnType');
+    });
+  }
+
+  void _writePropertyInducingElement(PropertyInducingElement e) {
+    DartType type = e.type;
+    expect(type, isNotNull);
+
+    if (!e.isSynthetic) {
+      expect(e.getter, isNotNull);
+      _assertSyntheticAccessorEnclosing(e, e.getter!);
+
+      if (e.setter != null) {
+        _assertSyntheticAccessorEnclosing(e, e.setter!);
+      }
+    }
+
+    _writeIndentedLine(() {
+      _writeIf(e.isSynthetic, 'synthetic ');
+      _writeIf(e.isStatic, 'static ');
+      _writeIf(e is FieldElementImpl && e.isAbstract, 'abstract ');
+      _writeIf(e is FieldElementImpl && e.isCovariant, 'covariant ');
+      _writeIf(e is FieldElementImpl && e.isExternal, 'external ');
+      _writeIf(e.isLate, 'late ');
+      _writeIf(e.isFinal, 'final ');
+      _writeIf(e.isConst, 'const ');
+
+      _writeName(e);
+    });
+
+    _withIndent(() {
+      _writeDocumentation(e);
+      _writeMetadata(e);
+      _writeCodeRange(e);
+      _writeTypeInferenceError(e);
+      _writeType(e.type, name: 'type');
+      _writeConstantInitializer(e);
+    });
+  }
+
+  void _writeType(DartType type, {String? name}) {
+    var typeStr = _typeStr(type);
+    if (name != null) {
+      _writelnWithIndent('$name: $typeStr');
+    } else {
+      _writelnWithIndent('$typeStr');
+    }
+
+    var aliasElement = type.aliasElement;
+    var aliasArguments = type.aliasArguments;
+    if (aliasElement is TypeAliasElementImpl && aliasArguments != null) {
+      _withIndent(() {
+        _createAstPrinter().writeElement('aliasElement', aliasElement);
+
+        _writeElements<DartType>(
+          'aliasArguments',
+          aliasArguments,
+          _writeType,
         );
       });
     }
   }
 
-  void _writeResolvedMetadata(List<ElementAnnotation> metadata) {
-    if (metadata.isNotEmpty) {
-      _writelnWithIndent('metadata');
-      _withIndent(() {
-        for (var annotation in metadata) {
-          annotation as ElementAnnotationImpl;
-          _writeResolvedNode(annotation.annotationAst);
-        }
-      });
+  void _writeTypeAliasElement(TypeAliasElement e) {
+    e as TypeAliasElementImpl;
+
+    _writeIndentedLine(() {
+      _writeIf(e.isFunctionTypeAliasBased, 'functionTypeAliasBased ');
+      _writeIf(!e.isSimplyBounded, 'notSimplyBounded ');
+      _writeName(e);
+    });
+
+    _withIndent(() {
+      _writeDocumentation(e);
+      _writeMetadata(e);
+      _writeCodeRange(e);
+      _writeTypeParameterElements(e.typeParameters);
+      _writelnWithIndent('aliasedType: ${e.aliasedType}');
+
+      var aliasedElement = e.aliasedElement;
+      if (aliasedElement is GenericFunctionTypeElement) {
+        final aliasedElement_ = aliasedElement as GenericFunctionTypeElement;
+        _writelnWithIndent('aliasedElement: GenericFunctionTypeElement');
+        _withIndent(() {
+          _writeTypeParameterElements(aliasedElement_.typeParameters);
+          _writeParameterElements(aliasedElement_.parameters);
+          _writeType(aliasedElement_.returnType, name: 'returnType');
+        });
+      }
+    });
+  }
+
+  void _writeTypeInferenceError(Element e) {
+    TopLevelInferenceError? inferenceError;
+    if (e is MethodElementImpl) {
+      inferenceError = e.typeInferenceError;
+    } else if (e is PropertyInducingElementImpl) {
+      inferenceError = e.typeInferenceError;
+    }
+
+    if (inferenceError != null) {
+      String kindName = inferenceError.kind.toString();
+      if (kindName.startsWith('TopLevelInferenceErrorKind.')) {
+        kindName = kindName.substring('TopLevelInferenceErrorKind.'.length);
+      }
+      _writelnWithIndent('typeInferenceError: $kindName');
     }
   }
 
-  void _writeResolvedNode(AstNode node) {
-    buffer.write(indent);
-    node.accept(
-      ResolvedAstPrinter(
-        selfUriStr: selfUriStr,
-        sink: buffer,
-        indent: indent,
-        withNullability: true,
-        withOffsets: withResolvedAstOffsets,
-      ),
+  void _writeTypeParameterElement(TypeParameterElement e) {
+    e as TypeParameterElementImpl;
+
+    _writeIndentedLine(() {
+      buffer.write('${e.variance} ');
+      _writeName(e);
+    });
+
+    _withIndent(() {
+      _writeCodeRange(e);
+
+      var bound = e.bound;
+      if (bound != null) {
+        _writeType(bound, name: 'bound');
+      }
+
+      var defaultType = e.defaultType;
+      if (defaultType != null) {
+        _writeType(defaultType, name: 'defaultType');
+      }
+
+      _writeMetadata(e);
+    });
+  }
+
+  void _writeTypeParameterElements(List<TypeParameterElement> elements) {
+    _writeElements('typeParameters', elements, _writeTypeParameterElement);
+  }
+
+  void _writeUnitElement(CompilationUnitElement e) {
+    _writeElements('classes', e.classes, _writeClassElement);
+    _writeElements('enums', e.enums, _writeClassElement);
+    _writeElements('extensions', e.extensions, _writeExtensionElement);
+    _writeElements('mixins', e.mixins, _writeClassElement);
+    _writeElements('typeAliases', e.typeAliases, _writeTypeAliasElement);
+    _writeElements(
+      'topLevelVariables',
+      e.topLevelVariables,
+      _writePropertyInducingElement,
     );
+    _writeElements(
+      'accessors',
+      e.accessors,
+      _writePropertyAccessorElement,
+    );
+    _writeElements('functions', e.functions, _writeFunctionElement);
   }
 
-  void _writeResolvedParameterElements(
-    List<ParameterElement> parameters, {
-    String enclosingNames = '',
-  }) {
-    if (parameters.isNotEmpty) {
-      _writelnWithIndent('parameters');
-      _withIndent(() {
-        var index = 0;
-        for (var formalParameter in parameters) {
-          var metadata = formalParameter.metadata;
-          var name = formalParameter.name;
-          if (name.isEmpty) {
-            name = '$index';
-          }
-          _writelnWithIndent(name);
-          _withIndent(() {
-            _writeResolvedMetadata(metadata);
-            var subParameters = formalParameter.parameters;
-            _withIndent(() {
-              _writeResolvedParameterElements(
-                subParameters,
-                enclosingNames: enclosingNames + name + '::',
-              );
-            });
-          });
-          index++;
-        }
-      });
-    }
-  }
-
-  void _writeResolvedTypeParameters(List<TypeParameterElement> elements) {
-    if (elements.isNotEmpty) {
-      _writelnWithIndent('typeParameters');
-      _withIndent(() {
-        for (var e in elements) {
-          e as TypeParameterElementImpl;
-          _writelnWithIndent(e.name);
-          _withIndent(() {
-            _writelnTypeWithIndent('bound', e.bound);
-            _writelnTypeWithIndent('defaultType', e.defaultType);
-            _writeResolvedMetadata(e.metadata);
-          });
-        }
-      });
+  void _writeUri(Source? source) {
+    if (source != null) {
+      Uri uri = source.uri;
+      String uriStr = uri.toString();
+      if (uri.isScheme('file')) {
+        uriStr = uri.pathSegments.last;
+      }
+      buffer.write('$uriStr');
+    } else {
+      buffer.write('<unresolved>');
     }
   }
 }
diff --git a/pkg/analyzer/test/src/summary/resolved_ast_printer.dart b/pkg/analyzer/test/src/summary/resolved_ast_printer.dart
index 2c44b7f..a3a772a 100644
--- a/pkg/analyzer/test/src/summary/resolved_ast_printer.dart
+++ b/pkg/analyzer/test/src/summary/resolved_ast_printer.dart
@@ -86,7 +86,11 @@
     _writeNextCodeLine(node);
     _writeln('ArgumentList');
     _withIndent(() {
-      _writeNodeList('arguments', node.arguments);
+      var properties = _Properties();
+      properties.addToken('leftParenthesis', node.leftParenthesis);
+      properties.addNodeList('arguments', node.arguments);
+      properties.addToken('rightParenthesis', node.rightParenthesis);
+      _writeProperties(properties);
     });
   }
 
@@ -97,6 +101,7 @@
     _withIndent(() {
       var properties = _Properties();
       properties.addNode('expression', node.expression);
+      properties.addToken('asOperator', node.asOperator);
       properties.addNode('type', node.type);
       _addExpression(properties, node);
       _writeProperties(properties);
@@ -745,6 +750,19 @@
   }
 
   @override
+  void visitIfElement(IfElement node) {
+    _writeln('IfElement');
+    _withIndent(() {
+      var properties = _Properties();
+      properties.addNode('condition', node.condition);
+      properties.addNode('elseStatement', node.elseElement);
+      properties.addNode('thenStatement', node.thenElement);
+      _addAstNode(properties, node);
+      _writeProperties(properties);
+    });
+  }
+
+  @override
   void visitIfStatement(IfStatement node) {
     _writeNextCodeLine(node);
     _writeln('IfStatement');
@@ -789,8 +807,10 @@
     _writeln('IndexExpression');
     _withIndent(() {
       var properties = _Properties();
+      properties.addToken('leftBracket', node.leftBracket);
       properties.addNode('index', node.index);
       properties.addToken('period', node.period);
+      properties.addToken('rightBracket', node.rightBracket);
       properties.addNode('target', node.target);
       _addExpression(properties, node);
       _addMethodReferenceExpression(properties, node);
@@ -855,6 +875,7 @@
     _withIndent(() {
       var properties = _Properties();
       properties.addNode('expression', node.expression);
+      properties.addToken('isOperator', node.isOperator);
       properties.addNode('type', node.type);
       _addExpression(properties, node);
       _writeProperties(properties);
@@ -900,7 +921,9 @@
     _writeln('ListLiteral');
     _withIndent(() {
       var properties = _Properties();
+      properties.addToken('leftBracket', node.leftBracket);
       properties.addNodeList('elements', node.elements);
+      properties.addToken('rightBracket', node.rightBracket);
       _addTypedLiteral(properties, node);
       _writeProperties(properties);
     });
@@ -1009,7 +1032,9 @@
     _writeln('ParenthesizedExpression');
     _withIndent(() {
       var properties = _Properties();
+      properties.addToken('leftParenthesis', node.leftParenthesis);
       properties.addNode('expression', node.expression);
+      properties.addToken('rightParenthesis', node.rightParenthesis);
       _addExpression(properties, node);
       _writeProperties(properties);
     });
@@ -1179,7 +1204,6 @@
     _writeNextCodeLine(node);
     _writeln('SimpleIdentifier');
     _withIndent(() {
-      _writeOffset('offset', node.offset);
       _writeElement('staticElement', node.staticElement);
       _writeType('staticType', node.staticType);
       _writeToken('token', node.token);
@@ -1196,6 +1220,15 @@
   }
 
   @override
+  void visitSpreadElement(SpreadElement node) {
+    _writeln('SpreadElement');
+    _withIndent(() {
+      _writeNode('expressions', node.expression);
+      _writeToken('spreadOperator', node.spreadOperator);
+    });
+  }
+
+  @override
   void visitStringInterpolation(StringInterpolation node) {
     _writeNextCodeLine(node);
     _writeln('StringInterpolation');
@@ -1267,6 +1300,18 @@
   }
 
   @override
+  void visitSymbolLiteral(SymbolLiteral node) {
+    _writeln('SymbolLiteral');
+    _withIndent(() {
+      var properties = _Properties();
+      properties.addToken('poundSign', node.poundSign);
+      properties.addTokenList('components', node.components);
+      _addAstNode(properties, node);
+      _writeProperties(properties);
+    });
+  }
+
+  @override
   void visitThisExpression(ThisExpression node) {
     _writeNextCodeLine(node);
     _writeln('ThisExpression');
@@ -1324,7 +1369,9 @@
     _writeln('TypeArgumentList');
     _withIndent(() {
       var properties = _Properties();
+      properties.addToken('leftBracket', node.leftBracket);
       properties.addNodeList('arguments', node.arguments);
+      properties.addToken('rightBracket', node.rightBracket);
       _addAstNode(properties, node);
       _writeProperties(properties);
     });
@@ -1365,7 +1412,9 @@
     _writeln('TypeParameterList');
     _withIndent(() {
       var properties = _Properties();
+      properties.addToken('leftBracket', node.leftBracket);
       properties.addNodeList('typeParameters', node.typeParameters);
+      properties.addToken('rightBracket', node.rightBracket);
       _addAstNode(properties, node);
       _writeProperties(properties);
     });
@@ -1452,6 +1501,10 @@
     });
   }
 
+  void writeElement(String name, Element? element) {
+    _writeElement(name, element);
+  }
+
   void _addAnnotatedNode(_Properties properties, AnnotatedNode node) {
     properties.addNode('documentationComment', node.documentationComment);
     properties.addNodeList('metadata', node.metadata);
@@ -1675,6 +1728,12 @@
       if (libraryUriStr == _selfUriStr) {
         return 'self';
       }
+
+      // TODO(scheglov) Make it precise again, after Windows.
+      if (libraryUriStr.startsWith('file:')) {
+        return libraryUriStr.substring(libraryUriStr.lastIndexOf('/') + 1);
+      }
+
       return libraryUriStr;
     }
 
@@ -1796,9 +1855,7 @@
   }
 
   void _writeOffset(String name, int offset) {
-    if (_withOffsets) {
-      _writelnWithIndent('$name: $offset');
-    }
+    _writelnWithIndent('$name: $offset');
   }
 
   void _writeParameterElements(List<ParameterElement> parameters) {
@@ -1846,9 +1903,24 @@
 
   void _writeToken(String name, Token? token) {
     if (token != null) {
-      _writelnWithIndent('$name: $token');
+      if (_withOffsets) {
+        _writelnWithIndent('$name: $token @${token.offset}');
+      } else {
+        _writelnWithIndent('$name: $token');
+      }
+    }
+  }
+
+  void _writeTokenList(String name, List<Token> tokens) {
+    if (tokens.isNotEmpty) {
+      _writelnWithIndent(name);
       _withIndent(() {
-        _writeOffset('offset', token.offset);
+        for (var token in tokens) {
+          _writelnWithIndent('$name: $token');
+          _withIndent(() {
+            _writeOffset('offset', token.offset);
+          });
+        }
       });
     }
   }
@@ -1966,6 +2038,12 @@
     );
   }
 
+  void addTokenList(String name, List<Token> tokens) {
+    properties.add(
+      _TokenListProperty(name, tokens),
+    );
+  }
+
   void addType(String name, DartType? type) {
     properties.add(
       _TypeProperty(name, type),
@@ -2009,6 +2087,17 @@
   }
 }
 
+class _TokenListProperty extends _Property {
+  final List<Token> tokens;
+
+  _TokenListProperty(String name, this.tokens) : super(name);
+
+  @override
+  void write(ResolvedAstPrinter printer) {
+    printer._writeTokenList(name, tokens);
+  }
+}
+
 class _TokenProperty extends _Property {
   final Token? token;
 
diff --git a/pkg/analyzer/test/src/summary/resynthesize_common.dart b/pkg/analyzer/test/src/summary/resynthesize_common.dart
index c7addb5..3bd6477 100644
--- a/pkg/analyzer/test/src/summary/resynthesize_common.dart
+++ b/pkg/analyzer/test/src/summary/resynthesize_common.dart
@@ -108,8 +108,12 @@
   test_class_abstract() async {
     var library = await checkLibrary('abstract class C {}');
     checkElementText(library, r'''
-abstract class C {
-}
+library
+  definingUnit
+    classes
+      abstract class C @15
+        constructors
+          synthetic @-1
 ''');
   }
 
@@ -122,17 +126,35 @@
 class G {}
 ''');
     checkElementText(library, r'''
-class alias C extends D with E, F, G {
-  synthetic C() : super();
-}
-class D {
-}
-class E {
-}
-class F {
-}
-class G {
-}
+library
+  definingUnit
+    classes
+      class alias C @6
+        supertype: D
+        mixins
+          E
+          F
+          G
+        constructors
+          synthetic @-1
+            constantInitializers
+              SuperConstructorInvocation
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticElement: self::@class::D::@constructor::•
+      class D @32
+        constructors
+          synthetic @-1
+      class E @43
+        constructors
+          synthetic @-1
+      class F @54
+        constructors
+          synthetic @-1
+      class G @65
+        constructors
+          synthetic @-1
 ''');
   }
 
@@ -143,13 +165,27 @@
 class E {}
 ''');
     checkElementText(library, r'''
-abstract class alias C extends D with E {
-  synthetic C() : super();
-}
-class D {
-}
-class E {
-}
+library
+  definingUnit
+    classes
+      abstract class alias C @15
+        supertype: D
+        mixins
+          E
+        constructors
+          synthetic @-1
+            constantInitializers
+              SuperConstructorInvocation
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticElement: self::@class::D::@constructor::•
+      class D @35
+        constructors
+          synthetic @-1
+      class E @46
+        constructors
+          synthetic @-1
 ''');
   }
 
@@ -164,16 +200,28 @@
 class E {}
 ''');
     checkElementText(library, r'''
-/**
- * Docs
- */
-class alias C extends D with E {
-  synthetic C() : super();
-}
-class D {
-}
-class E {
-}
+library
+  definingUnit
+    classes
+      class alias C @22
+        documentationComment: /**\n * Docs\n */
+        supertype: D
+        mixins
+          E
+        constructors
+          synthetic @-1
+            constantInitializers
+              SuperConstructorInvocation
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticElement: self::@class::D::@constructor::•
+      class D @43
+        constructors
+          synthetic @-1
+      class E @54
+        constructors
+          synthetic @-1
 ''');
   }
 
@@ -188,16 +236,28 @@
 class E {}
 ''');
     checkElementText(library, r'''
-/// aaa
-/// b
-/// cc
-class alias C extends D with E {
-  synthetic C() : super();
-}
-class D {
-}
-class E {
-}
+library
+  definingUnit
+    classes
+      class alias C @27
+        documentationComment: /// aaa\n/// b\n/// cc
+        supertype: D
+        mixins
+          E
+        constructors
+          synthetic @-1
+            constantInitializers
+              SuperConstructorInvocation
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticElement: self::@class::D::@constructor::•
+      class D @48
+        constructors
+          synthetic @-1
+      class E @59
+        constructors
+          synthetic @-1
 ''');
   }
 
@@ -212,16 +272,28 @@
 class D {}
 class E {}''');
     checkElementText(library, r'''
-/**
- * Docs
- */
-class alias C extends D with E {
-  synthetic C() : super();
-}
-class D {
-}
-class E {
-}
+library
+  definingUnit
+    classes
+      class alias C @66
+        documentationComment: /**\n * Docs\n */
+        supertype: D
+        mixins
+          E
+        constructors
+          synthetic @-1
+            constantInitializers
+              SuperConstructorInvocation
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticElement: self::@class::D::@constructor::•
+      class D @87
+        constructors
+          synthetic @-1
+      class E @98
+        constructors
+          synthetic @-1
 ''');
   }
 
@@ -233,15 +305,37 @@
 class C<C1> {}
 ''');
     checkElementText(library, r'''
-class alias Z extends A with B<int>, C<double> {
-  synthetic Z() : super();
-}
-class A {
-}
-class B<B1> {
-}
-class C<C1> {
-}
+library
+  definingUnit
+    classes
+      class alias Z @6
+        supertype: A
+        mixins
+          B<int>
+          C<double>
+        constructors
+          synthetic @-1
+            constantInitializers
+              SuperConstructorInvocation
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticElement: self::@class::A::@constructor::•
+      class A @42
+        constructors
+          synthetic @-1
+      class B @53
+        typeParameters
+          covariant B1 @55
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+      class C @68
+        typeParameters
+          covariant C1 @70
+            defaultType: dynamic
+        constructors
+          synthetic @-1
 ''');
   }
 
@@ -252,13 +346,31 @@
 class E {}
 ''');
     checkElementText(library, r'''
-notSimplyBounded class alias C<T extends C<dynamic>> extends D with E {
-  synthetic C() : super();
-}
-class D {
-}
-class E {
-}
+library
+  definingUnit
+    classes
+      notSimplyBounded class alias C @6
+        typeParameters
+          covariant T @8
+            bound: C<dynamic>
+            defaultType: dynamic
+        supertype: D
+        mixins
+          E
+        constructors
+          synthetic @-1
+            constantInitializers
+              SuperConstructorInvocation
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticElement: self::@class::D::@constructor::•
+      class D @39
+        constructors
+          synthetic @-1
+      class E @50
+        constructors
+          synthetic @-1
 ''');
   }
 
@@ -271,13 +383,30 @@
 class E {}
 ''');
     checkElementText(library, r'''
-class alias C<T> extends D with E {
-  synthetic C() : super();
-}
-class D {
-}
-class E {
-}
+library
+  definingUnit
+    classes
+      class alias C @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        supertype: D
+        mixins
+          E
+        constructors
+          synthetic @-1
+            constantInitializers
+              SuperConstructorInvocation
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticElement: self::@class::D::@constructor::•
+      class D @29
+        constructors
+          synthetic @-1
+      class E @40
+        constructors
+          synthetic @-1
 ''');
   }
 
@@ -290,13 +419,27 @@
 class E {}
 ''');
     checkElementText(library, r'''
-class alias C extends D with E {
-  synthetic C() : super();
-}
-class D {
-}
-class E {
-}
+library
+  definingUnit
+    classes
+      class alias C @6
+        supertype: D
+        mixins
+          E
+        constructors
+          synthetic @-1
+            constantInitializers
+              SuperConstructorInvocation
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticElement: self::@class::D::@constructor::•
+      class D @26
+        constructors
+          synthetic @-1
+      class E @37
+        constructors
+          synthetic @-1
 ''');
   }
 
@@ -314,34 +457,44 @@
 class M {}
 class MixinApp = Base with M;
 ''');
-    checkElementText(
-        library,
-        r'''
-import 'package:test/a.dart';
-class M {
-}
-class alias MixinApp extends Base with M {
-  synthetic const MixinApp();
-    constantInitializers
-      SuperConstructorInvocation
-        argumentList: ArgumentList
-        staticElement: package:test/a.dart::@class::Base::@constructor::•
-  synthetic const MixinApp.named();
-    constantInitializers
-      SuperConstructorInvocation
-        argumentList: ArgumentList
-        constructorName: SimpleIdentifier
-          staticElement: package:test/a.dart::@class::Base::@constructor::named
-          staticType: null
-          token: named
-        staticElement: package:test/a.dart::@class::Base::@constructor::named
-}
-''',
-        withResolvedAst: true);
+    checkElementText(library, r'''
+library
+  imports
+    package:test/a.dart
+  definingUnit
+    classes
+      class M @23
+        constructors
+          synthetic @-1
+      class alias MixinApp @34
+        supertype: Base
+        mixins
+          M
+        constructors
+          synthetic const @-1
+            constantInitializers
+              SuperConstructorInvocation
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticElement: package:test/a.dart::@class::Base::@constructor::•
+          synthetic const named @-1
+            constantInitializers
+              SuperConstructorInvocation
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                constructorName: SimpleIdentifier
+                  staticElement: package:test/a.dart::@class::Base::@constructor::named
+                  staticType: null
+                  token: named @-1
+                staticElement: package:test/a.dart::@class::Base::@constructor::named
+''');
   }
 
   test_class_alias_with_forwarding_constructors() async {
-    addLibrarySource('/a.dart', '''
+    testFile = convertPath('/home/test/lib/test.dart');
+    addLibrarySource('/home/test/lib/a.dart', r'''
 class Base {
   bool x = true;
   Base._priv();
@@ -362,29 +515,148 @@
 class MixinApp = Base with M;
 ''');
     checkElementText(library, r'''
-import 'a.dart';
-class M {
-}
-class alias MixinApp extends Base with M {
-  synthetic MixinApp() : super();
-  synthetic MixinApp.noArgs() : super.
-        noArgs/*location: a.dart;Base;noArgs*/();
-  synthetic MixinApp.requiredArg(dynamic x) : super.
-        requiredArg/*location: a.dart;Base;requiredArg*/(
-        x/*location: test.dart;MixinApp;requiredArg;x*/);
-  synthetic MixinApp.positionalArg([bool x = true]) : super.
-        positionalArg/*location: a.dart;Base;positionalArg*/(
-        x/*location: test.dart;MixinApp;positionalArg;x*/);
-  synthetic MixinApp.positionalArg2([final bool x = true]) : super.
-        positionalArg2/*location: a.dart;Base;positionalArg2*/(
-        x/*location: test.dart;MixinApp;positionalArg2;x*/);
-  synthetic MixinApp.namedArg({int x: 42}) : super.
-        namedArg/*location: a.dart;Base;namedArg*/(
-        x/*location: test.dart;MixinApp;namedArg;x*/);
-  synthetic MixinApp.namedArg2({final bool x: true}) : super.
-        namedArg2/*location: a.dart;Base;namedArg2*/(
-        x/*location: test.dart;MixinApp;namedArg2;x*/);
-}
+library
+  imports
+    package:test/a.dart
+  definingUnit
+    classes
+      class M @23
+        constructors
+          synthetic @-1
+      class alias MixinApp @34
+        supertype: Base
+        mixins
+          M
+        constructors
+          synthetic @-1
+            constantInitializers
+              SuperConstructorInvocation
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticElement: package:test/a.dart::@class::Base::@constructor::•
+          synthetic noArgs @-1
+            constantInitializers
+              SuperConstructorInvocation
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                constructorName: SimpleIdentifier
+                  staticElement: package:test/a.dart::@class::Base::@constructor::noArgs
+                  staticType: null
+                  token: noArgs @-1
+                staticElement: package:test/a.dart::@class::Base::@constructor::noArgs
+          synthetic requiredArg @-1
+            parameters
+              requiredPositional x @-1
+                type: dynamic
+            constantInitializers
+              SuperConstructorInvocation
+                argumentList: ArgumentList
+                  arguments
+                    SimpleIdentifier
+                      staticElement: x@-1
+                      staticType: dynamic
+                      token: x @-1
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                constructorName: SimpleIdentifier
+                  staticElement: package:test/a.dart::@class::Base::@constructor::requiredArg
+                  staticType: null
+                  token: requiredArg @-1
+                staticElement: package:test/a.dart::@class::Base::@constructor::requiredArg
+          synthetic positionalArg @-1
+            parameters
+              optionalPositional x @-1
+                type: bool
+                constantInitializer
+                  BooleanLiteral
+                    literal: true @0
+                    staticType: bool
+            constantInitializers
+              SuperConstructorInvocation
+                argumentList: ArgumentList
+                  arguments
+                    SimpleIdentifier
+                      staticElement: x@-1
+                      staticType: bool
+                      token: x @-1
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                constructorName: SimpleIdentifier
+                  staticElement: package:test/a.dart::@class::Base::@constructor::positionalArg
+                  staticType: null
+                  token: positionalArg @-1
+                staticElement: package:test/a.dart::@class::Base::@constructor::positionalArg
+          synthetic positionalArg2 @-1
+            parameters
+              optionalPositional final x @-1
+                type: bool
+                constantInitializer
+                  BooleanLiteral
+                    literal: true @0
+                    staticType: bool
+            constantInitializers
+              SuperConstructorInvocation
+                argumentList: ArgumentList
+                  arguments
+                    SimpleIdentifier
+                      staticElement: x@-1
+                      staticType: bool
+                      token: x @-1
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                constructorName: SimpleIdentifier
+                  staticElement: package:test/a.dart::@class::Base::@constructor::positionalArg2
+                  staticType: null
+                  token: positionalArg2 @-1
+                staticElement: package:test/a.dart::@class::Base::@constructor::positionalArg2
+          synthetic namedArg @-1
+            parameters
+              optionalNamed x @-1
+                type: int
+                constantInitializer
+                  IntegerLiteral
+                    literal: 42 @0
+                    staticType: int
+            constantInitializers
+              SuperConstructorInvocation
+                argumentList: ArgumentList
+                  arguments
+                    SimpleIdentifier
+                      staticElement: x@-1
+                      staticType: int
+                      token: x @-1
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                constructorName: SimpleIdentifier
+                  staticElement: package:test/a.dart::@class::Base::@constructor::namedArg
+                  staticType: null
+                  token: namedArg @-1
+                staticElement: package:test/a.dart::@class::Base::@constructor::namedArg
+          synthetic namedArg2 @-1
+            parameters
+              optionalNamed final x @-1
+                type: bool
+                constantInitializer
+                  BooleanLiteral
+                    literal: true @0
+                    staticType: bool
+            constantInitializers
+              SuperConstructorInvocation
+                argumentList: ArgumentList
+                  arguments
+                    SimpleIdentifier
+                      staticElement: x@-1
+                      staticType: bool
+                      token: x @-1
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                constructorName: SimpleIdentifier
+                  staticElement: package:test/a.dart::@class::Base::@constructor::namedArg2
+                  staticType: null
+                  token: namedArg2 @-1
+                staticElement: package:test/a.dart::@class::Base::@constructor::namedArg2
 ''');
   }
 
@@ -397,17 +669,55 @@
 class MixinApp = Base with M;
 ''');
     checkElementText(library, r'''
-class Base<T> {
-  Base.ctor(T t, List<T> l);
-}
-class M {
-}
-class alias MixinApp extends Base<dynamic> with M {
-  synthetic MixinApp.ctor(dynamic t, List<dynamic> l) : super.
-        ctor/*location: test.dart;Base;ctor*/(
-        t/*location: test.dart;MixinApp;ctor;t*/,
-        l/*location: test.dart;MixinApp;ctor;l*/);
-}
+library
+  definingUnit
+    classes
+      class Base @6
+        typeParameters
+          covariant T @11
+            defaultType: dynamic
+        constructors
+          ctor @23
+            periodOffset: 22
+            nameEnd: 27
+            parameters
+              requiredPositional t @30
+                type: T
+              requiredPositional l @41
+                type: List<T>
+      class M @53
+        constructors
+          synthetic @-1
+      class alias MixinApp @64
+        supertype: Base<dynamic>
+        mixins
+          M
+        constructors
+          synthetic ctor @-1
+            parameters
+              requiredPositional t @-1
+                type: dynamic
+              requiredPositional l @-1
+                type: List<dynamic>
+            constantInitializers
+              SuperConstructorInvocation
+                argumentList: ArgumentList
+                  arguments
+                    SimpleIdentifier
+                      staticElement: t@-1
+                      staticType: dynamic
+                      token: t @-1
+                    SimpleIdentifier
+                      staticElement: l@-1
+                      staticType: List<dynamic>
+                      token: l @-1
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                constructorName: SimpleIdentifier
+                  staticElement: self::@class::Base::@constructor::ctor
+                  staticType: null
+                  token: ctor @-1
+                staticElement: self::@class::Base::@constructor::ctor
 ''');
   }
 
@@ -420,17 +730,58 @@
 class MixinApp<U> = Base<List<U>> with M;
 ''');
     checkElementText(library, r'''
-class Base<T> {
-  Base.ctor(T t, List<T> l);
-}
-class M {
-}
-class alias MixinApp<U> extends Base<List<U>> with M {
-  synthetic MixinApp.ctor(List<U> t, List<List<U>> l) : super.
-        ctor/*location: test.dart;Base;ctor*/(
-        t/*location: test.dart;MixinApp;ctor;t*/,
-        l/*location: test.dart;MixinApp;ctor;l*/);
-}
+library
+  definingUnit
+    classes
+      class Base @6
+        typeParameters
+          covariant T @11
+            defaultType: dynamic
+        constructors
+          ctor @23
+            periodOffset: 22
+            nameEnd: 27
+            parameters
+              requiredPositional t @30
+                type: T
+              requiredPositional l @41
+                type: List<T>
+      class M @53
+        constructors
+          synthetic @-1
+      class alias MixinApp @64
+        typeParameters
+          covariant U @73
+            defaultType: dynamic
+        supertype: Base<List<U>>
+        mixins
+          M
+        constructors
+          synthetic ctor @-1
+            parameters
+              requiredPositional t @-1
+                type: List<U>
+              requiredPositional l @-1
+                type: List<List<U>>
+            constantInitializers
+              SuperConstructorInvocation
+                argumentList: ArgumentList
+                  arguments
+                    SimpleIdentifier
+                      staticElement: t@-1
+                      staticType: List<U>
+                      token: t @-1
+                    SimpleIdentifier
+                      staticElement: l@-1
+                      staticType: List<List<U>>
+                      token: l @-1
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                constructorName: SimpleIdentifier
+                  staticElement: self::@class::Base::@constructor::ctor
+                  staticType: null
+                  token: ctor @-1
+                staticElement: self::@class::Base::@constructor::ctor
 ''');
   }
 
@@ -445,80 +796,143 @@
   int x;
 }''');
     checkElementText(library, r'''
-class alias C extends D with E {
-  synthetic C() : super();
-}
-class D {
-}
-class E {
-  int x;
-  int get a {}
-  void set b(int i) {}
-  void f() {}
-}
+library
+  definingUnit
+    classes
+      class alias C @6
+        supertype: D
+        mixins
+          E
+        constructors
+          synthetic @-1
+            constantInitializers
+              SuperConstructorInvocation
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticElement: self::@class::D::@constructor::•
+      class D @26
+        constructors
+          synthetic @-1
+      class E @37
+        fields
+          x @105
+            type: int
+          synthetic a @-1
+            type: int
+          synthetic b @-1
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get x @105
+            returnType: int
+          synthetic set x @105
+            parameters
+              requiredPositional _x @105
+                type: int
+            returnType: void
+          get a @51
+            returnType: int
+          set b @73
+            parameters
+              requiredPositional i @79
+                type: int
+            returnType: void
+        methods
+          f @92
+            returnType: void
 ''');
   }
 
   test_class_constructor_const() async {
     var library = await checkLibrary('class C { const C(); }');
     checkElementText(library, r'''
-class C {
-  const C();
-}
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          const @16
 ''');
   }
 
   test_class_constructor_const_external() async {
     var library = await checkLibrary('class C { external const C(); }');
     checkElementText(library, r'''
-class C {
-  external const C();
-}
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          external const @25
 ''');
   }
 
   test_class_constructor_explicit_named() async {
     var library = await checkLibrary('class C { C.foo(); }');
     checkElementText(library, r'''
-class C {
-  C.foo();
-}
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          foo @12
+            periodOffset: 11
+            nameEnd: 15
 ''');
   }
 
   test_class_constructor_explicit_type_params() async {
     var library = await checkLibrary('class C<T, U> { C(); }');
     checkElementText(library, r'''
-class C<T, U> {
-  C();
-}
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+          covariant U @11
+            defaultType: dynamic
+        constructors
+          @16
 ''');
   }
 
   test_class_constructor_explicit_unnamed() async {
     var library = await checkLibrary('class C { C(); }');
     checkElementText(library, r'''
-class C {
-  C();
-}
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          @10
 ''');
   }
 
   test_class_constructor_external() async {
     var library = await checkLibrary('class C { external C(); }');
     checkElementText(library, r'''
-class C {
-  external C();
-}
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          external @19
 ''');
   }
 
   test_class_constructor_factory() async {
     var library = await checkLibrary('class C { factory C() => throw 0; }');
     checkElementText(library, r'''
-class C {
-  factory C();
-}
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          factory @18
 ''');
   }
 
@@ -526,30 +940,78 @@
     var library =
         await checkLibrary('class C { dynamic x; C(dynamic this.x); }');
     checkElementText(library, r'''
-class C {
-  dynamic x;
-  C(final dynamic this.x);
-}
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          x @18
+            type: dynamic
+        constructors
+          @21
+            parameters
+              requiredPositional final this.x @36
+                type: dynamic
+        accessors
+          synthetic get x @18
+            returnType: dynamic
+          synthetic set x @18
+            parameters
+              requiredPositional _x @18
+                type: dynamic
+            returnType: void
 ''');
   }
 
   test_class_constructor_field_formal_dynamic_typed() async {
     var library = await checkLibrary('class C { dynamic x; C(int this.x); }');
     checkElementText(library, r'''
-class C {
-  dynamic x;
-  C(final int this.x);
-}
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          x @18
+            type: dynamic
+        constructors
+          @21
+            parameters
+              requiredPositional final this.x @32
+                type: int
+        accessors
+          synthetic get x @18
+            returnType: dynamic
+          synthetic set x @18
+            parameters
+              requiredPositional _x @18
+                type: dynamic
+            returnType: void
 ''');
   }
 
   test_class_constructor_field_formal_dynamic_untyped() async {
     var library = await checkLibrary('class C { dynamic x; C(this.x); }');
     checkElementText(library, r'''
-class C {
-  dynamic x;
-  C(final dynamic this.x);
-}
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          x @18
+            type: dynamic
+        constructors
+          @21
+            parameters
+              requiredPositional final this.x @28
+                type: dynamic
+        accessors
+          synthetic get x @18
+            returnType: dynamic
+          synthetic set x @18
+            parameters
+              requiredPositional _x @18
+                type: dynamic
+            returnType: void
 ''');
   }
 
@@ -561,10 +1023,29 @@
 }
 ''');
     checkElementText(library, r'''
-class C {
-  dynamic x;
-  C(final dynamic Function(double) this.x/*(double b)*/);
-}
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          x @16
+            type: dynamic
+        constructors
+          @21
+            parameters
+              requiredPositional final this.x @28
+                type: dynamic Function(double)
+                parameters
+                  requiredPositional b @-1
+                    type: double
+        accessors
+          synthetic get x @16
+            returnType: dynamic
+          synthetic set x @16
+            parameters
+              requiredPositional _x @16
+                type: dynamic
+            returnType: void
 ''');
   }
 
@@ -576,10 +1057,29 @@
 }
 ''');
     checkElementText(library, r'''
-class C {
-  dynamic x;
-  C(final int Function(double) this.x/*(double b)*/);
-}
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          x @16
+            type: dynamic
+        constructors
+          @21
+            parameters
+              requiredPositional final this.x @32
+                type: int Function(double)
+                parameters
+                  requiredPositional b @-1
+                    type: double
+        accessors
+          synthetic get x @16
+            returnType: dynamic
+          synthetic set x @16
+            parameters
+              requiredPositional _x @16
+                type: dynamic
+            returnType: void
 ''');
   }
 
@@ -591,10 +1091,32 @@
 }
 ''');
     checkElementText(library, r'''
-class C {
-  dynamic Function() f;
-  C(final List<U> Function<T, U>(T) this.f/*<T, U>*//*(T t)*/);
-}
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          f @23
+            type: dynamic Function()
+        constructors
+          @28
+            parameters
+              requiredPositional final this.f @43
+                type: List<U> Function<T, U>(T)
+                typeParameters
+                  covariant T @-1
+                  covariant U @-1
+                parameters
+                  requiredPositional t @-1
+                    type: T
+        accessors
+          synthetic get f @23
+            returnType: dynamic Function()
+          synthetic set f @23
+            parameters
+              requiredPositional _f @23
+                type: dynamic Function()
+            returnType: void
 ''');
   }
 
@@ -603,11 +1125,35 @@
     var library = await checkLibrary('class C { C(this.x); int x; String x; }',
         allowErrors: true);
     checkElementText(library, r'''
-class C {
-  int x;
-  String x;
-  C(final int this.x);
-}
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          x @25
+            type: int
+          x @35
+            type: String
+        constructors
+          @10
+            parameters
+              requiredPositional final this.x @17
+                type: int
+        accessors
+          synthetic get x @25
+            returnType: int
+          synthetic set x @25
+            parameters
+              requiredPositional _x @25
+                type: int
+            returnType: void
+          synthetic get x @35
+            returnType: String
+          synthetic set x @35
+            parameters
+              requiredPositional _x @35
+                type: String
+            returnType: void
 ''');
   }
 
@@ -616,9 +1162,15 @@
     var library =
         await checkLibrary('class C { C(this.x); }', allowErrors: true);
     checkElementText(library, r'''
-class C {
-  C(final dynamic this.x);
-}
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          @10
+            parameters
+              requiredPositional final this.x @17
+                type: dynamic
 ''');
   }
 
@@ -626,135 +1178,331 @@
     var library = await checkLibrary('class C { num x; C(dynamic this.x); }',
         allowErrors: true);
     checkElementText(library, r'''
-class C {
-  num x;
-  C(final dynamic this.x);
-}
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          x @14
+            type: num
+        constructors
+          @17
+            parameters
+              requiredPositional final this.x @32
+                type: dynamic
+        accessors
+          synthetic get x @14
+            returnType: num
+          synthetic set x @14
+            parameters
+              requiredPositional _x @14
+                type: num
+            returnType: void
 ''');
   }
 
   test_class_constructor_field_formal_typed_typed() async {
     var library = await checkLibrary('class C { num x; C(int this.x); }');
     checkElementText(library, r'''
-class C {
-  num x;
-  C(final int this.x);
-}
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          x @14
+            type: num
+        constructors
+          @17
+            parameters
+              requiredPositional final this.x @28
+                type: int
+        accessors
+          synthetic get x @14
+            returnType: num
+          synthetic set x @14
+            parameters
+              requiredPositional _x @14
+                type: num
+            returnType: void
 ''');
   }
 
   test_class_constructor_field_formal_typed_untyped() async {
     var library = await checkLibrary('class C { num x; C(this.x); }');
     checkElementText(library, r'''
-class C {
-  num x;
-  C(final num this.x);
-}
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          x @14
+            type: num
+        constructors
+          @17
+            parameters
+              requiredPositional final this.x @24
+                type: num
+        accessors
+          synthetic get x @14
+            returnType: num
+          synthetic set x @14
+            parameters
+              requiredPositional _x @14
+                type: num
+            returnType: void
 ''');
   }
 
   test_class_constructor_field_formal_untyped_dynamic() async {
     var library = await checkLibrary('class C { var x; C(dynamic this.x); }');
     checkElementText(library, r'''
-class C {
-  dynamic x;
-  C(final dynamic this.x);
-}
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          x @14
+            type: dynamic
+        constructors
+          @17
+            parameters
+              requiredPositional final this.x @32
+                type: dynamic
+        accessors
+          synthetic get x @14
+            returnType: dynamic
+          synthetic set x @14
+            parameters
+              requiredPositional _x @14
+                type: dynamic
+            returnType: void
 ''');
   }
 
   test_class_constructor_field_formal_untyped_typed() async {
     var library = await checkLibrary('class C { var x; C(int this.x); }');
     checkElementText(library, r'''
-class C {
-  dynamic x;
-  C(final int this.x);
-}
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          x @14
+            type: dynamic
+        constructors
+          @17
+            parameters
+              requiredPositional final this.x @28
+                type: int
+        accessors
+          synthetic get x @14
+            returnType: dynamic
+          synthetic set x @14
+            parameters
+              requiredPositional _x @14
+                type: dynamic
+            returnType: void
 ''');
   }
 
   test_class_constructor_field_formal_untyped_untyped() async {
     var library = await checkLibrary('class C { var x; C(this.x); }');
     checkElementText(library, r'''
-class C {
-  dynamic x;
-  C(final dynamic this.x);
-}
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          x @14
+            type: dynamic
+        constructors
+          @17
+            parameters
+              requiredPositional final this.x @24
+                type: dynamic
+        accessors
+          synthetic get x @14
+            returnType: dynamic
+          synthetic set x @14
+            parameters
+              requiredPositional _x @14
+                type: dynamic
+            returnType: void
 ''');
   }
 
   test_class_constructor_fieldFormal_named_noDefault() async {
     var library = await checkLibrary('class C { int x; C({this.x}); }');
     checkElementText(library, r'''
-class C {
-  int x;
-  C({final int this.x});
-}
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          x @14
+            type: int
+        constructors
+          @17
+            parameters
+              optionalNamed final this.x @25
+                type: int
+        accessors
+          synthetic get x @14
+            returnType: int
+          synthetic set x @14
+            parameters
+              requiredPositional _x @14
+                type: int
+            returnType: void
 ''');
   }
 
   test_class_constructor_fieldFormal_named_withDefault() async {
     var library = await checkLibrary('class C { int x; C({this.x: 42}); }');
     checkElementText(library, r'''
-class C {
-  int x;
-  C({final int this.x: 42});
-}
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          x @14
+            type: int
+        constructors
+          @17
+            parameters
+              optionalNamed final this.x @25
+                type: int
+                constantInitializer
+                  IntegerLiteral
+                    literal: 42 @0
+                    staticType: int
+        accessors
+          synthetic get x @14
+            returnType: int
+          synthetic set x @14
+            parameters
+              requiredPositional _x @14
+                type: int
+            returnType: void
 ''');
   }
 
   test_class_constructor_fieldFormal_optional_noDefault() async {
     var library = await checkLibrary('class C { int x; C([this.x]); }');
     checkElementText(library, r'''
-class C {
-  int x;
-  C([final int this.x]);
-}
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          x @14
+            type: int
+        constructors
+          @17
+            parameters
+              optionalPositional final this.x @25
+                type: int
+        accessors
+          synthetic get x @14
+            returnType: int
+          synthetic set x @14
+            parameters
+              requiredPositional _x @14
+                type: int
+            returnType: void
 ''');
   }
 
   test_class_constructor_fieldFormal_optional_withDefault() async {
     var library = await checkLibrary('class C { int x; C([this.x = 42]); }');
     checkElementText(library, r'''
-class C {
-  int x;
-  C([final int this.x = 42]);
-}
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          x @14
+            type: int
+        constructors
+          @17
+            parameters
+              optionalPositional final this.x @25
+                type: int
+                constantInitializer
+                  IntegerLiteral
+                    literal: 42 @0
+                    staticType: int
+        accessors
+          synthetic get x @14
+            returnType: int
+          synthetic set x @14
+            parameters
+              requiredPositional _x @14
+                type: int
+            returnType: void
 ''');
   }
 
   test_class_constructor_implicit() async {
     var library = await checkLibrary('class C {}');
     checkElementText(library, r'''
-class C {
-}
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          synthetic @-1
 ''');
   }
 
   test_class_constructor_implicit_type_params() async {
     var library = await checkLibrary('class C<T, U> {}');
     checkElementText(library, r'''
-class C<T, U> {
-}
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+          covariant U @11
+            defaultType: dynamic
+        constructors
+          synthetic @-1
 ''');
   }
 
   test_class_constructor_params() async {
     var library = await checkLibrary('class C { C(x, int y); }');
     checkElementText(library, r'''
-class C {
-  C(dynamic x, int y);
-}
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          @10
+            parameters
+              requiredPositional x @12
+                type: dynamic
+              requiredPositional y @19
+                type: int
 ''');
   }
 
   test_class_constructors() async {
     var library = await checkLibrary('class C { C.foo(); C.bar(); }');
     checkElementText(library, r'''
-class C {
-  C.foo();
-  C.bar();
-}
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          foo @12
+            periodOffset: 11
+            nameEnd: 15
+          bar @21
+            periodOffset: 20
+            nameEnd: 24
 ''');
   }
 
@@ -765,11 +1513,13 @@
  */
 class C {}''');
     checkElementText(library, r'''
-/**
- * Docs
- */
-class C {
-}
+library
+  definingUnit
+    classes
+      class C @22
+        documentationComment: /**\n * Docs\n */
+        constructors
+          synthetic @-1
 ''');
   }
 
@@ -812,43 +1562,46 @@
 class E {}
 ''');
     checkElementText(library, r'''
-/**
- * bbb
- */
-class A {
-}
-/// bbb
-/// ccc
-class B {
-}
-/**
- * ccc
- */
-class C {
-}
-/// ddd
-class D {
-}
-/**
- * aaa
- */
-class E {
-}
+library
+  definingUnit
+    classes
+      class A @36
+        documentationComment: /**\n * bbb\n */
+        constructors
+          synthetic @-1
+      class B @79
+        documentationComment: /// bbb\n/// ccc
+        constructors
+          synthetic @-1
+      class C @122
+        documentationComment: /**\n * ccc\n */
+        constructors
+          synthetic @-1
+      class D @173
+        documentationComment: /// ddd
+        constructors
+          synthetic @-1
+      class E @207
+        documentationComment: /**\n * aaa\n */
+        constructors
+          synthetic @-1
 ''');
   }
 
   test_class_documented_tripleSlash() async {
     var library = await checkLibrary('''
-/// aaa
-/// bbbb
-/// cc
+/// first
+/// second
+/// third
 class C {}''');
     checkElementText(library, r'''
-/// aaa
-/// bbbb
-/// cc
-class C {
-}
+library
+  definingUnit
+    classes
+      class C @37
+        documentationComment: /// first\n/// second\n/// third
+        constructors
+          synthetic @-1
 ''');
   }
 
@@ -862,26 +1615,32 @@
 class D {}
 class E {}''');
     checkElementText(library, r'''
-/**
- * Docs referring to [D] and [E]
- */
-class C {
-}
-class D {
-}
-class E {
-}
+library
+  definingUnit
+    classes
+      class C @47
+        documentationComment: /**\n * Docs referring to [D] and [E]\n */
+        constructors
+          synthetic @-1
+      class D @59
+        constructors
+          synthetic @-1
+      class E @70
+        constructors
+          synthetic @-1
 ''');
   }
 
   test_class_documented_with_windows_line_endings() async {
     var library = await checkLibrary('/**\r\n * Docs\r\n */\r\nclass C {}');
     checkElementText(library, r'''
-/**
- * Docs
- */
-class C {
-}
+library
+  definingUnit
+    classes
+      class C @25
+        documentationComment: /**\n * Docs\n */
+        constructors
+          synthetic @-1
 ''');
   }
 
@@ -893,11 +1652,13 @@
  */
 class C {}''');
     checkElementText(library, r'''
-/**
- * Docs
- */
-class C {
-}
+library
+  definingUnit
+    classes
+      class C @66
+        documentationComment: /**\n * Docs\n */
+        constructors
+          synthetic @-1
 ''');
   }
 
@@ -933,46 +1694,121 @@
   const Annotation.named();
 }
 ''');
-    checkElementText(
-        library,
-        r'''
-/// Comment 1
-/// Comment 2
-@Annotation()
-class BeforeMeta {
-}
-/// Comment 1
-/// Comment 2
-@Annotation.named()
-class BeforeMetaNamed {
-}
-/// Comment 1
-/// Comment 2
-@Annotation()
-class AfterMeta {
-}
-/// Comment 2
-@Annotation()
-class AroundMeta {
-}
-/// Doc comment.
-@Annotation()
-class DocBeforeMetaNotDocAfter {
-}
-class Annotation {
-  const Annotation();
-  const Annotation.named();
-}
-''',
-        withConstElements: false);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class BeforeMeta @48
+        documentationComment: /// Comment 1\n/// Comment 2
+        metadata
+          Annotation
+            arguments: ArgumentList
+              leftParenthesis: ( @39
+              rightParenthesis: ) @40
+            atSign.offset: 28
+            element: self::@class::Annotation::@constructor::•
+            name: SimpleIdentifier
+              staticElement: self::@class::Annotation
+              staticType: null
+              token: Annotation @29
+        constructors
+          synthetic @-1
+      class BeforeMetaNamed @117
+        documentationComment: /// Comment 1\n/// Comment 2
+        metadata
+          Annotation
+            arguments: ArgumentList
+              leftParenthesis: ( @108
+              rightParenthesis: ) @109
+            atSign.offset: 91
+            element: self::@class::Annotation::@constructor::named
+            name: PrefixedIdentifier
+              identifier: SimpleIdentifier
+                staticElement: self::@class::Annotation::@constructor::named
+                staticType: null
+                token: named @103
+              period: . @0
+              prefix: SimpleIdentifier
+                staticElement: self::@class::Annotation
+                staticType: null
+                token: Annotation @92
+              staticElement: self::@class::Annotation::@constructor::named
+              staticType: null
+        constructors
+          synthetic @-1
+      class AfterMeta @185
+        documentationComment: /// Comment 1\n/// Comment 2
+        metadata
+          Annotation
+            arguments: ArgumentList
+              leftParenthesis: ( @148
+              rightParenthesis: ) @149
+            atSign.offset: 137
+            element: self::@class::Annotation::@constructor::•
+            name: SimpleIdentifier
+              staticElement: self::@class::Annotation
+              staticType: null
+              token: Annotation @138
+        constructors
+          synthetic @-1
+      class AroundMeta @247
+        documentationComment: /// Comment 2
+        metadata
+          Annotation
+            arguments: ArgumentList
+              leftParenthesis: ( @224
+              rightParenthesis: ) @225
+            atSign.offset: 213
+            element: self::@class::Annotation::@constructor::•
+            name: SimpleIdentifier
+              staticElement: self::@class::Annotation
+              staticType: null
+              token: Annotation @214
+        constructors
+          synthetic @-1
+      class DocBeforeMetaNotDocAfter @319
+        documentationComment: /// Doc comment.
+        metadata
+          Annotation
+            arguments: ArgumentList
+              leftParenthesis: ( @290
+              rightParenthesis: ) @291
+            atSign.offset: 279
+            element: self::@class::Annotation::@constructor::•
+            name: SimpleIdentifier
+              staticElement: self::@class::Annotation
+              staticType: null
+              token: Annotation @280
+        constructors
+          synthetic @-1
+      class Annotation @354
+        constructors
+          const @375
+          const named @408
+            periodOffset: 407
+            nameEnd: 413
+''');
   }
 
   test_class_field_const() async {
     var library = await checkLibrary('class C { static const int i = 0; }');
     checkElementText(library, r'''
-class C {
-  static const int i = 0;
-}
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          static const i @27
+            type: int
+            constantInitializer
+              IntegerLiteral
+                literal: 0 @31
+                staticType: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic static get i @27
+            returnType: int
 ''');
   }
 
@@ -980,9 +1816,22 @@
     var library =
         await checkLibrary('class C { static late const int i = 0; }');
     checkElementText(library, r'''
-class C {
-  static late const int i = 0;
-}
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          static late const i @32
+            type: int
+            constantInitializer
+              IntegerLiteral
+                literal: 0 @36
+                staticType: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic static get i @32
+            returnType: int
 ''');
   }
 
@@ -994,35 +1843,73 @@
   set foo(int newValue) {}
 }
 ''');
-    checkElementText(
-        library,
-        r'''
-class A {
-  final int foo;
-  synthetic int get foo {}
-  void set foo(int newValue) {}
-  A(final int this.foo);
-}
-''',
-        withSyntheticFields: true,
-        withSyntheticAccessors: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        fields
+          final foo @22
+            type: int
+        constructors
+          @29
+            parameters
+              requiredPositional final this.foo @36
+                type: int
+        accessors
+          synthetic get foo @22
+            returnType: int
+          set foo @48
+            parameters
+              requiredPositional newValue @56
+                type: int
+            returnType: void
+''');
   }
 
   test_class_field_implicit_type() async {
     var library = await checkLibrary('class C { var x; }');
     checkElementText(library, r'''
-class C {
-  dynamic x;
-}
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          x @14
+            type: dynamic
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get x @14
+            returnType: dynamic
+          synthetic set x @14
+            parameters
+              requiredPositional _x @14
+                type: dynamic
+            returnType: void
 ''');
   }
 
   test_class_field_implicit_type_late() async {
     var library = await checkLibrary('class C { late var x; }');
     checkElementText(library, r'''
-class C {
-  late dynamic x;
-}
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          late x @19
+            type: dynamic
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get x @19
+            returnType: dynamic
+          synthetic set x @19
+            parameters
+              requiredPositional _x @19
+                type: dynamic
+            returnType: void
 ''');
   }
 
@@ -1037,50 +1924,111 @@
   final foo = 2;
 }
 ''');
-    checkElementText(
-        library,
-        r'''
-abstract class A {
-  double get foo;
-  const A();
-}
-class B extends A {
-  final double foo;
-    constantInitializer
-      IntegerLiteral
-        literal: 2
-        staticType: double
-  const B();
-}
-''',
-        withResolvedAst: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      abstract class A @15
+        fields
+          synthetic foo @-1
+            type: double
+        constructors
+          const @27
+        accessors
+          abstract get foo @45
+            returnType: double
+      class B @58
+        supertype: A
+        fields
+          final foo @93
+            type: double
+            constantInitializer
+              IntegerLiteral
+                literal: 2 @99
+                staticType: double
+        constructors
+          const @80
+        accessors
+          synthetic get foo @93
+            returnType: double
+''');
   }
 
   test_class_field_static() async {
     var library = await checkLibrary('class C { static int i; }');
     checkElementText(library, r'''
-class C {
-  static int i;
-}
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          static i @21
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic static get i @21
+            returnType: int
+          synthetic static set i @21
+            parameters
+              requiredPositional _i @21
+                type: int
+            returnType: void
 ''');
   }
 
   test_class_field_static_late() async {
     var library = await checkLibrary('class C { static late int i; }');
     checkElementText(library, r'''
-class C {
-  static late int i;
-}
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          static late i @26
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic static get i @26
+            returnType: int
+          synthetic static set i @26
+            parameters
+              requiredPositional _i @26
+                type: int
+            returnType: void
 ''');
   }
 
   test_class_fields() async {
     var library = await checkLibrary('class C { int i; int j; }');
     checkElementText(library, r'''
-class C {
-  int i;
-  int j;
-}
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          i @14
+            type: int
+          j @21
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get i @14
+            returnType: int
+          synthetic set i @14
+            parameters
+              requiredPositional _i @14
+                type: int
+            returnType: void
+          synthetic get j @21
+            returnType: int
+          synthetic set j @21
+            parameters
+              requiredPositional _j @21
+                type: int
+            returnType: void
 ''');
   }
 
@@ -1090,16 +2038,25 @@
   late int foo;
 }
 ''');
-    checkElementText(
-        library,
-        r'''
-class C {
-  late int foo;
-  synthetic int get foo {}
-  synthetic void set foo(int _foo) {}
-}
-''',
-        withSyntheticAccessors: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          late foo @21
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get foo @21
+            returnType: int
+          synthetic set foo @21
+            parameters
+              requiredPositional _foo @21
+                type: int
+            returnType: void
+''');
   }
 
   test_class_fields_late_final() async {
@@ -1108,16 +2065,25 @@
   late final int foo;
 }
 ''');
-    checkElementText(
-        library,
-        r'''
-class C {
-  late final int foo;
-  synthetic int get foo {}
-  synthetic void set foo(int _foo) {}
-}
-''',
-        withSyntheticAccessors: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          late final foo @27
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get foo @27
+            returnType: int
+          synthetic set foo @27
+            parameters
+              requiredPositional _foo @27
+                type: int
+            returnType: void
+''');
   }
 
   test_class_fields_late_final_initialized() async {
@@ -1126,41 +2092,73 @@
   late final int foo = 0;
 }
 ''');
-    checkElementText(
-        library,
-        r'''
-class C {
-  late final int foo;
-  synthetic int get foo {}
-}
-''',
-        withSyntheticAccessors: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          late final foo @27
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get foo @27
+            returnType: int
+''');
   }
 
   test_class_getter_abstract() async {
     var library = await checkLibrary('abstract class C { int get x; }');
     checkElementText(library, r'''
-abstract class C {
-  int get x;
-}
+library
+  definingUnit
+    classes
+      abstract class C @15
+        fields
+          synthetic x @-1
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          abstract get x @27
+            returnType: int
 ''');
   }
 
   test_class_getter_external() async {
     var library = await checkLibrary('class C { external int get x; }');
     checkElementText(library, r'''
-class C {
-  external int get x;
-}
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          synthetic x @-1
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          external get x @27
+            returnType: int
 ''');
   }
 
   test_class_getter_implicit_return_type() async {
     var library = await checkLibrary('class C { get x => null; }');
     checkElementText(library, r'''
-class C {
-  dynamic get x {}
-}
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          synthetic x @-1
+            type: dynamic
+        constructors
+          synthetic @-1
+        accessors
+          get x @14
+            returnType: dynamic
 ''');
   }
 
@@ -1171,33 +2169,59 @@
 }
 ''');
     checkElementText(library, r'''
-class C {
-  external int get x;
-}
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          synthetic x @-1
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          external get x @20
+            returnType: int
 ''');
   }
 
   test_class_getter_static() async {
     var library = await checkLibrary('class C { static int get x => null; }');
-    checkElementText(
-        library,
-        r'''
-class C {
-  synthetic static int x;
-  static int get x {}
-}
-''',
-        withSyntheticFields: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          synthetic static x @-1
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          static get x @25
+            returnType: int
+''');
   }
 
   test_class_getters() async {
     var library =
         await checkLibrary('class C { int get x => null; get y => null; }');
     checkElementText(library, r'''
-class C {
-  int get x {}
-  dynamic get y {}
-}
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          synthetic x @-1
+            type: int
+          synthetic y @-1
+            type: dynamic
+        constructors
+          synthetic @-1
+        accessors
+          get x @18
+            returnType: int
+          get y @33
+            returnType: dynamic
 ''');
   }
 
@@ -1208,16 +2232,25 @@
   void set x(int value) {}
 }
 ''');
-    checkElementText(
-        library,
-        r'''
-class C {
-  synthetic int x;
-  int get x {}
-  void set x(int value) {}
-}
-''',
-        withSyntheticFields: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          synthetic x @-1
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          get x @20
+            returnType: int
+          set x @39
+            parameters
+              requiredPositional value @45
+                type: int
+            returnType: void
+''');
   }
 
   test_class_implicitField_setterFirst() async {
@@ -1227,16 +2260,25 @@
   int get x => 0;
 }
 ''');
-    checkElementText(
-        library,
-        r'''
-class C {
-  synthetic int x;
-  void set x(int value) {}
-  int get x {}
-}
-''',
-        withSyntheticFields: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          synthetic x @-1
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          set x @21
+            parameters
+              requiredPositional value @27
+                type: int
+            returnType: void
+          get x @47
+            returnType: int
+''');
   }
 
   test_class_interfaces() async {
@@ -1246,12 +2288,21 @@
 class E {}
 ''');
     checkElementText(library, r'''
-class C implements D, E {
-}
-class D {
-}
-class E {
-}
+library
+  definingUnit
+    classes
+      class C @6
+        interfaces
+          D
+          E
+        constructors
+          synthetic @-1
+      class D @33
+        constructors
+          synthetic @-1
+      class E @44
+        constructors
+          synthetic @-1
 ''');
   }
 
@@ -1262,12 +2313,21 @@
 class C implements A, Function, B {}
 ''');
     checkElementText(library, r'''
-class A {
-}
-class B {
-}
-class C implements A, B {
-}
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          synthetic @-1
+      class B @17
+        constructors
+          synthetic @-1
+      class C @28
+        interfaces
+          A
+          B
+        constructors
+          synthetic @-1
 ''');
   }
 
@@ -1276,30 +2336,51 @@
         'class C implements X, Y, Z {} class X {} class Z {}',
         allowErrors: true);
     checkElementText(library, r'''
-class C implements X, Z {
-}
-class X {
-}
-class Z {
-}
+library
+  definingUnit
+    classes
+      class C @6
+        interfaces
+          X
+          Z
+        constructors
+          synthetic @-1
+      class X @36
+        constructors
+          synthetic @-1
+      class Z @47
+        constructors
+          synthetic @-1
 ''');
   }
 
   test_class_method_abstract() async {
     var library = await checkLibrary('abstract class C { f(); }');
     checkElementText(library, r'''
-abstract class C {
-  dynamic f();
-}
+library
+  definingUnit
+    classes
+      abstract class C @15
+        constructors
+          synthetic @-1
+        methods
+          abstract f @19
+            returnType: dynamic
 ''');
   }
 
   test_class_method_external() async {
     var library = await checkLibrary('class C { external f(); }');
     checkElementText(library, r'''
-class C {
-  external dynamic f() {}
-}
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          synthetic @-1
+        methods
+          external f @19
+            returnType: dynamic
 ''');
   }
 
@@ -1311,11 +2392,19 @@
 }
 ''');
     checkElementText(library, r'''
-class A {
-}
-class B extends A {
-  void A() {}
-}
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          synthetic @-1
+      class B @17
+        supertype: A
+        constructors
+          synthetic @-1
+        methods
+          A @38
+            returnType: void
 ''');
   }
 
@@ -1326,37 +2415,67 @@
 }
 ''');
     checkElementText(library, r'''
-class C {
-  external int m() {}
-}
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          synthetic @-1
+        methods
+          external m @16
+            returnType: int
 ''');
   }
 
   test_class_method_params() async {
     var library = await checkLibrary('class C { f(x, y) {} }');
     checkElementText(library, r'''
-class C {
-  dynamic f(dynamic x, dynamic y) {}
-}
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          synthetic @-1
+        methods
+          f @10
+            parameters
+              requiredPositional x @12
+                type: dynamic
+              requiredPositional y @15
+                type: dynamic
+            returnType: dynamic
 ''');
   }
 
   test_class_method_static() async {
     var library = await checkLibrary('class C { static f() {} }');
     checkElementText(library, r'''
-class C {
-  static dynamic f() {}
-}
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          synthetic @-1
+        methods
+          static f @17
+            returnType: dynamic
 ''');
   }
 
   test_class_methods() async {
     var library = await checkLibrary('class C { f() {} g() {} }');
     checkElementText(library, r'''
-class C {
-  dynamic f() {}
-  dynamic g() {}
-}
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          synthetic @-1
+        methods
+          f @10
+            returnType: dynamic
+          g @17
+            returnType: dynamic
 ''');
   }
 
@@ -1369,17 +2488,29 @@
 class G {}
 ''');
     checkElementText(library, r'''
-class C extends D with E, F, G {
-  synthetic C();
-}
-class D {
-}
-class E {
-}
-class F {
-}
-class G {
-}
+library
+  definingUnit
+    classes
+      class C @6
+        supertype: D
+        mixins
+          E
+          F
+          G
+        constructors
+          synthetic @-1
+      class D @40
+        constructors
+          synthetic @-1
+      class E @51
+        constructors
+          synthetic @-1
+      class F @62
+        constructors
+          synthetic @-1
+      class G @73
+        constructors
+          synthetic @-1
 ''');
   }
 
@@ -1391,15 +2522,31 @@
 class C<C1> {}
 ''');
     checkElementText(library, r'''
-class Z extends A with B<int>, C<double> {
-  synthetic Z();
-}
-class A {
-}
-class B<B1> {
-}
-class C<C1> {
-}
+library
+  definingUnit
+    classes
+      class Z @6
+        supertype: A
+        mixins
+          B<int>
+          C<double>
+        constructors
+          synthetic @-1
+      class A @50
+        constructors
+          synthetic @-1
+      class B @61
+        typeParameters
+          covariant B1 @63
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+      class C @76
+        typeParameters
+          covariant C1 @78
+            defaultType: dynamic
+        constructors
+          synthetic @-1
 ''');
   }
 
@@ -1408,13 +2555,22 @@
         'class C extends Object with X, Y, Z {} class X {} class Z {}',
         allowErrors: true);
     checkElementText(library, r'''
-class C extends Object with X, Z {
-  synthetic C();
-}
-class X {
-}
-class Z {
-}
+library
+  definingUnit
+    classes
+      class C @6
+        supertype: Object
+        mixins
+          X
+          Z
+        constructors
+          synthetic @-1
+      class X @45
+        constructors
+          synthetic @-1
+      class Z @56
+        constructors
+          synthetic @-1
 ''');
   }
 
@@ -1426,9 +2582,24 @@
 typedef F(C value);
 ''');
     checkElementText(library, r'''
-notSimplyBounded typedef F = dynamic Function(C<dynamic Function()> value);
-notSimplyBounded class C<T extends dynamic Function() = dynamic Function()> {
-}
+library
+  definingUnit
+    classes
+      notSimplyBounded class C @6
+        typeParameters
+          covariant T @8
+            bound: dynamic Function()
+            defaultType: dynamic Function()
+        constructors
+          synthetic @-1
+    typeAliases
+      functionTypeAliasBased notSimplyBounded F @32
+        aliasedType: dynamic Function(C<dynamic Function()>)
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional value @-1
+              type: C<dynamic Function()>
+          returnType: dynamic
 ''');
   }
 
@@ -1439,8 +2610,16 @@
 class C<T extends C<dynamic>> {}
 ''');
     checkElementText(library, r'''
-class C<T extends C<dynamic> = C<dynamic>> {
-}
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          covariant T @8
+            bound: C<dynamic>
+            defaultType: C<dynamic>
+        constructors
+          synthetic @-1
 ''');
   }
 
@@ -1450,10 +2629,23 @@
 class D<T extends C> {}
 ''');
     checkElementText(library, r'''
-notSimplyBounded class C<T extends D<dynamic>> {
-}
-notSimplyBounded class D<T extends C<dynamic>> {
-}
+library
+  definingUnit
+    classes
+      notSimplyBounded class C @6
+        typeParameters
+          covariant T @8
+            bound: D<dynamic>
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+      notSimplyBounded class D @30
+        typeParameters
+          covariant T @32
+            bound: C<dynamic>
+            defaultType: dynamic
+        constructors
+          synthetic @-1
 ''');
   }
 
@@ -1463,8 +2655,25 @@
 typedef D<T extends C> = void Function();
 ''');
     checkElementText(library, r'''
-notSimplyBounded typedef C<T extends dynamic Function()> = void Function();
-notSimplyBounded typedef D<T extends dynamic Function()> = void Function();
+library
+  definingUnit
+    typeAliases
+      notSimplyBounded C @8
+        typeParameters
+          unrelated T @10
+            bound: dynamic Function()
+            defaultType: dynamic
+        aliasedType: void Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: void
+      notSimplyBounded D @50
+        typeParameters
+          unrelated T @52
+            bound: dynamic Function()
+            defaultType: dynamic
+        aliasedType: void Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: void
 ''');
   }
 
@@ -1475,8 +2684,21 @@
 typedef D<T extends C> = List<T>;
 ''');
     checkElementText(library, r'''
-notSimplyBounded typedef C<T extends dynamic> = List<T>;
-notSimplyBounded typedef D<T extends dynamic> = List<T>;
+library
+  definingUnit
+    typeAliases
+      notSimplyBounded C @8
+        typeParameters
+          covariant T @10
+            bound: dynamic
+            defaultType: dynamic
+        aliasedType: List<T>
+      notSimplyBounded D @42
+        typeParameters
+          covariant T @44
+            bound: dynamic
+            defaultType: dynamic
+        aliasedType: List<T>
 ''');
   }
 
@@ -1486,10 +2708,23 @@
 class D<T extends D> {}
 ''');
     checkElementText(library, r'''
-notSimplyBounded class C<T extends D<dynamic> = D<dynamic>> {
-}
-notSimplyBounded class D<T extends D<dynamic>> {
-}
+library
+  definingUnit
+    classes
+      notSimplyBounded class C @6
+        typeParameters
+          covariant T @8
+            bound: D<dynamic>
+            defaultType: D<dynamic>
+        constructors
+          synthetic @-1
+      notSimplyBounded class D @30
+        typeParameters
+          covariant T @32
+            bound: D<dynamic>
+            defaultType: dynamic
+        constructors
+          synthetic @-1
 ''');
   }
 
@@ -1499,10 +2734,22 @@
 class D<T> {}
 ''');
     checkElementText(library, r'''
-notSimplyBounded class C<T extends D<T> = D<dynamic>> {
-}
-class D<T> {
-}
+library
+  definingUnit
+    classes
+      notSimplyBounded class C @6
+        typeParameters
+          covariant T @8
+            bound: D<T>
+            defaultType: D<dynamic>
+        constructors
+          synthetic @-1
+      class D @33
+        typeParameters
+          covariant T @35
+            defaultType: dynamic
+        constructors
+          synthetic @-1
 ''');
   }
 
@@ -1514,10 +2761,23 @@
 class D<T extends D<T>> {}
 ''');
     checkElementText(library, r'''
-class C<T extends D<dynamic> = D<dynamic>> {
-}
-notSimplyBounded class D<T extends D<T> = D<dynamic>> {
-}
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          covariant T @8
+            bound: D<dynamic>
+            defaultType: D<dynamic>
+        constructors
+          synthetic @-1
+      notSimplyBounded class D @39
+        typeParameters
+          covariant T @41
+            bound: D<T>
+            defaultType: D<dynamic>
+        constructors
+          synthetic @-1
 ''');
   }
 
@@ -1526,8 +2786,16 @@
 class C<T extends void Function(T)> {}
 ''');
     checkElementText(library, r'''
-notSimplyBounded class C<T extends void Function(T) = void Function(Never)> {
-}
+library
+  definingUnit
+    classes
+      notSimplyBounded class C @6
+        typeParameters
+          covariant T @8
+            bound: void Function(T)
+            defaultType: void Function(Never)
+        constructors
+          synthetic @-1
 ''');
   }
 
@@ -1537,8 +2805,16 @@
 class C<T extends void Function(T)> {}
 ''');
     checkElementText(library, r'''
-notSimplyBounded class C<T extends void Function(T*)* = void Function(Null*)*> {
-}
+library
+  definingUnit
+    classes
+      notSimplyBounded class C @6
+        typeParameters
+          covariant T @8
+            bound: void Function(T*)*
+            defaultType: void Function(Null*)*
+        constructors
+          synthetic @-1
 ''');
   }
 
@@ -1547,8 +2823,16 @@
 class C<T extends T Function()> {}
 ''');
     checkElementText(library, r'''
-notSimplyBounded class C<T extends T Function() = dynamic Function()> {
-}
+library
+  definingUnit
+    classes
+      notSimplyBounded class C @6
+        typeParameters
+          covariant T @8
+            bound: T Function()
+            defaultType: dynamic Function()
+        constructors
+          synthetic @-1
 ''');
   }
 
@@ -1557,8 +2841,16 @@
 class C<T extends void Function()> {}
 ''');
     checkElementText(library, r'''
-class C<T extends void Function() = void Function()> {
-}
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          covariant T @8
+            bound: void Function()
+            defaultType: void Function()
+        constructors
+          synthetic @-1
 ''');
   }
 
@@ -1572,10 +2864,31 @@
 typedef G(F value);
 ''');
     checkElementText(library, r'''
-notSimplyBounded typedef F = dynamic Function(dynamic Function() value);
-notSimplyBounded typedef G = dynamic Function(dynamic Function() value);
-notSimplyBounded class C<T extends dynamic Function() = dynamic Function()> {
-}
+library
+  definingUnit
+    classes
+      notSimplyBounded class C @6
+        typeParameters
+          covariant T @8
+            bound: dynamic Function()
+            defaultType: dynamic Function()
+        constructors
+          synthetic @-1
+    typeAliases
+      functionTypeAliasBased notSimplyBounded F @32
+        aliasedType: dynamic Function(dynamic Function())
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional value @-1
+              type: dynamic Function()
+          returnType: dynamic
+      functionTypeAliasBased notSimplyBounded G @52
+        aliasedType: dynamic Function(dynamic Function())
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional value @-1
+              type: dynamic Function()
+          returnType: dynamic
 ''');
   }
 
@@ -1584,8 +2897,16 @@
 class C<T extends C> {}
 ''');
     checkElementText(library, r'''
-notSimplyBounded class C<T extends C<dynamic>> {
-}
+library
+  definingUnit
+    classes
+      notSimplyBounded class C @6
+        typeParameters
+          covariant T @8
+            bound: C<dynamic>
+            defaultType: dynamic
+        constructors
+          synthetic @-1
 ''');
   }
 
@@ -1596,8 +2917,12 @@
 class C {}
 ''');
     checkElementText(library, r'''
-class C {
-}
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          synthetic @-1
 ''');
   }
 
@@ -1607,10 +2932,22 @@
 class D<T> {}
 ''');
     checkElementText(library, r'''
-class C<T extends D<dynamic> = D<dynamic>> {
-}
-class D<T> {
-}
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          covariant T @8
+            bound: D<dynamic>
+            defaultType: D<dynamic>
+        constructors
+          synthetic @-1
+      class D @30
+        typeParameters
+          covariant T @32
+            defaultType: dynamic
+        constructors
+          synthetic @-1
 ''');
   }
 
@@ -1621,8 +2958,15 @@
 class C<T> {}
 ''');
     checkElementText(library, r'''
-class C<T> {
-}
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        constructors
+          synthetic @-1
 ''');
   }
 
@@ -1631,10 +2975,24 @@
 class C {}
 C c;
 ''');
-    checkElementText(library, '''
-class C {
-}
-C c;
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          synthetic @-1
+    topLevelVariables
+      static c @13
+        type: C
+    accessors
+      synthetic static get c @13
+        returnType: C
+      synthetic static set c @13
+        parameters
+          requiredPositional _c @13
+            type: C
+        returnType: void
 ''');
   }
 
@@ -1643,10 +3001,24 @@
 class C {}
 C? c;
 ''');
-    checkElementText(library, '''
-class C {
-}
-C? c;
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          synthetic @-1
+    topLevelVariables
+      static c @14
+        type: C?
+    accessors
+      synthetic static get c @14
+        returnType: C?
+      synthetic static set c @14
+        parameters
+          requiredPositional _c @14
+            type: C?
+        returnType: void
 ''');
   }
 
@@ -1656,10 +3028,24 @@
 class C {}
 C c;
 ''');
-    checkElementText(library, '''
-class C {
-}
-C* c;
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          synthetic @-1
+    topLevelVariables
+      static c @13
+        type: C*
+    accessors
+      synthetic static get c @13
+        returnType: C*
+      synthetic static set c @13
+        parameters
+          requiredPositional _c @13
+            type: C*
+        returnType: void
 ''');
   }
 
@@ -1667,9 +3053,21 @@
     var library =
         await checkLibrary('abstract class C { void set x(int value); }');
     checkElementText(library, r'''
-abstract class C {
-  void set x(int value);
-}
+library
+  definingUnit
+    classes
+      abstract class C @15
+        fields
+          synthetic x @-1
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          abstract set x @28
+            parameters
+              requiredPositional value @34
+                type: int
+            returnType: void
 ''');
   }
 
@@ -1677,63 +3075,146 @@
     var library =
         await checkLibrary('class C { external void set x(int value); }');
     checkElementText(library, r'''
-class C {
-  external void set x(int value);
-}
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          synthetic x @-1
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          external set x @28
+            parameters
+              requiredPositional value @34
+                type: int
+            returnType: void
 ''');
   }
 
   test_class_setter_implicit_param_type() async {
     var library = await checkLibrary('class C { void set x(value) {} }');
     checkElementText(library, r'''
-class C {
-  void set x(dynamic value) {}
-}
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          synthetic x @-1
+            type: dynamic
+        constructors
+          synthetic @-1
+        accessors
+          set x @19
+            parameters
+              requiredPositional value @21
+                type: dynamic
+            returnType: void
 ''');
   }
 
   test_class_setter_implicit_return_type() async {
     var library = await checkLibrary('class C { set x(int value) {} }');
     checkElementText(library, r'''
-class C {
-  void set x(int value) {}
-}
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          synthetic x @-1
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          set x @14
+            parameters
+              requiredPositional value @20
+                type: int
+            returnType: void
 ''');
   }
 
   test_class_setter_invalid_named_parameter() async {
     var library = await checkLibrary('class C { void set x({a}) {} }');
     checkElementText(library, r'''
-class C {
-  void set x({dynamic a}) {}
-}
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          synthetic x @-1
+            type: dynamic
+        constructors
+          synthetic @-1
+        accessors
+          set x @19
+            parameters
+              optionalNamed a @22
+                type: dynamic
+            returnType: void
 ''');
   }
 
   test_class_setter_invalid_no_parameter() async {
     var library = await checkLibrary('class C { void set x() {} }');
     checkElementText(library, r'''
-class C {
-  void set x() {}
-}
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          synthetic x @-1
+            type: dynamic
+        constructors
+          synthetic @-1
+        accessors
+          set x @19
+            returnType: void
 ''');
   }
 
   test_class_setter_invalid_optional_parameter() async {
     var library = await checkLibrary('class C { void set x([a]) {} }');
     checkElementText(library, r'''
-class C {
-  void set x([dynamic a]) {}
-}
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          synthetic x @-1
+            type: dynamic
+        constructors
+          synthetic @-1
+        accessors
+          set x @19
+            parameters
+              optionalPositional a @22
+                type: dynamic
+            returnType: void
 ''');
   }
 
   test_class_setter_invalid_too_many_parameters() async {
     var library = await checkLibrary('class C { void set x(a, b) {} }');
     checkElementText(library, r'''
-class C {
-  void set x(dynamic a, dynamic b) {}
-}
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          synthetic x @-1
+            type: dynamic
+        constructors
+          synthetic @-1
+        accessors
+          set x @19
+            parameters
+              requiredPositional a @21
+                type: dynamic
+              requiredPositional b @24
+                type: dynamic
+            returnType: void
 ''');
   }
 
@@ -1744,9 +3225,21 @@
 }
 ''');
     checkElementText(library, r'''
-class C {
-  external void set x(int value);
-}
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          synthetic x @-1
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          external set x @21
+            parameters
+              requiredPositional value @27
+                type: int
+            returnType: void
 ''');
   }
 
@@ -1754,9 +3247,21 @@
     var library =
         await checkLibrary('class C { static void set x(int value) {} }');
     checkElementText(library, r'''
-class C {
-  static void set x(int value) {}
-}
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          synthetic static x @-1
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          static set x @26
+            parameters
+              requiredPositional value @32
+                type: int
+            returnType: void
 ''');
   }
 
@@ -1768,10 +3273,28 @@
 }
 ''');
     checkElementText(library, r'''
-class C {
-  void set x(int value) {}
-  void set y(dynamic value) {}
-}
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          synthetic x @-1
+            type: int
+          synthetic y @-1
+            type: dynamic
+        constructors
+          synthetic @-1
+        accessors
+          set x @21
+            parameters
+              requiredPositional value @27
+                type: int
+            returnType: void
+          set y @43
+            parameters
+              requiredPositional value @45
+                type: dynamic
+            returnType: void
 ''');
   }
 
@@ -1781,10 +3304,16 @@
 class D {}
 ''');
     checkElementText(library, r'''
-class C extends D {
-}
-class D {
-}
+library
+  definingUnit
+    classes
+      class C @6
+        supertype: D
+        constructors
+          synthetic @-1
+      class D @27
+        constructors
+          synthetic @-1
 ''');
   }
 
@@ -1794,10 +3323,21 @@
 class D<T1, T2> {}
 ''');
     checkElementText(library, r'''
-class C extends D<int, double> {
-}
-class D<T1, T2> {
-}
+library
+  definingUnit
+    classes
+      class C @6
+        supertype: D<int, double>
+        constructors
+          synthetic @-1
+      class D @40
+        typeParameters
+          covariant T1 @42
+            defaultType: dynamic
+          covariant T2 @46
+            defaultType: dynamic
+        constructors
+          synthetic @-1
 ''');
   }
 
@@ -1807,26 +3347,48 @@
 class B extends A<B> {}
 ''');
     checkElementText(library, r'''
-class A<T> {
-}
-class B extends A<B> {
-}
+library
+  definingUnit
+    classes
+      class A @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+      class B @20
+        supertype: A<B>
+        constructors
+          synthetic @-1
 ''');
   }
 
   test_class_supertype_unresolved() async {
     var library = await checkLibrary('class C extends D {}', allowErrors: true);
     checkElementText(library, r'''
-class C {
-}
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          synthetic @-1
 ''');
   }
 
   test_class_type_parameters() async {
     var library = await checkLibrary('class C<T, U> {}');
     checkElementText(library, r'''
-class C<T, U> {
-}
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+          covariant U @11
+            defaultType: dynamic
+        constructors
+          synthetic @-1
 ''');
   }
 
@@ -1836,50 +3398,97 @@
 class D {}
 ''');
     checkElementText(library, r'''
-class C<T = Object, U extends D = D> {
-}
-class D {
-}
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          covariant T @8
+            bound: Object
+            defaultType: Object
+          covariant U @26
+            bound: D
+            defaultType: D
+        constructors
+          synthetic @-1
+      class D @48
+        constructors
+          synthetic @-1
 ''');
   }
 
   test_class_type_parameters_cycle_1of1() async {
     var library = await checkLibrary('class C<T extends T> {}');
-    checkElementText(
-        library,
-        r'''
-notSimplyBounded class C<T extends dynamic> {
-}
-''',
-        withTypes: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      notSimplyBounded class C @6
+        typeParameters
+          covariant T @8
+            bound: dynamic
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+''');
   }
 
   test_class_type_parameters_cycle_2of3() async {
     var library = await checkLibrary(r'''
 class C<T extends V, U, V extends T> {}
 ''');
-    checkElementText(
-        library,
-        r'''
-notSimplyBounded class C<T extends dynamic, U, V extends dynamic> {
-}
-''',
-        withTypes: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      notSimplyBounded class C @6
+        typeParameters
+          covariant T @8
+            bound: dynamic
+            defaultType: dynamic
+          covariant U @21
+            defaultType: dynamic
+          covariant V @24
+            bound: dynamic
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+''');
   }
 
   test_class_type_parameters_f_bound_complex() async {
     var library = await checkLibrary('class C<T extends List<U>, U> {}');
     checkElementText(library, r'''
-notSimplyBounded class C<T extends List<U> = List<dynamic>, U> {
-}
+library
+  definingUnit
+    classes
+      notSimplyBounded class C @6
+        typeParameters
+          covariant T @8
+            bound: List<U>
+            defaultType: List<dynamic>
+          covariant U @27
+            defaultType: dynamic
+        constructors
+          synthetic @-1
 ''');
   }
 
   test_class_type_parameters_f_bound_simple() async {
     var library = await checkLibrary('class C<T extends U, U> {}');
     checkElementText(library, r'''
-notSimplyBounded class C<T extends U, U> {
-}
+library
+  definingUnit
+    classes
+      notSimplyBounded class C @6
+        typeParameters
+          covariant T @8
+            bound: U
+            defaultType: dynamic
+          covariant U @21
+            defaultType: dynamic
+        constructors
+          synthetic @-1
 ''');
   }
 
@@ -1887,13 +3496,18 @@
     var library = await checkLibrary(r'''
 class A<T extends void Function(A)> {}
 ''');
-    checkElementText(
-        library,
-        r'''
-notSimplyBounded class A<covariant T extends void Function(A<dynamic>)> {
-}
-''',
-        withTypeParameterVariance: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      notSimplyBounded class A @6
+        typeParameters
+          covariant T @8
+            bound: void Function(A<dynamic>)
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+''');
   }
 
   test_class_typeParameters_defaultType_cycle_genericFunctionType2() async {
@@ -1901,13 +3515,18 @@
     var library = await checkLibrary(r'''
 class C<T extends void Function<U extends C>()> {}
 ''');
-    checkElementText(
-        library,
-        r'''
-notSimplyBounded class C<covariant T extends void Function<U extends C<dynamic>>()> {
-}
-''',
-        withTypeParameterVariance: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      notSimplyBounded class C @6
+        typeParameters
+          covariant T @8
+            bound: void Function<U extends C<dynamic>>()
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+''');
   }
 
   test_class_typeParameters_defaultType_functionTypeAlias_contravariant_legacy() async {
@@ -1917,14 +3536,35 @@
 
 class A<X extends F<X>> {}
 ''');
-    checkElementText(
-        library,
-        r'''
-typedef F<contravariant X> = void Function(X* );
-notSimplyBounded class A<covariant X extends void Function(X*)* = void Function(Null*)*> {
-}
-''',
-        withTypeParameterVariance: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      notSimplyBounded class A @40
+        typeParameters
+          covariant X @42
+            bound: void Function(X*)*
+              aliasElement: self::@typeAlias::F
+              aliasArguments
+                X*
+            defaultType: void Function(Null*)*
+              aliasElement: self::@typeAlias::F
+              aliasArguments
+                Null*
+        constructors
+          synthetic @-1
+    typeAliases
+      F @8
+        typeParameters
+          contravariant X @10
+            defaultType: dynamic
+        aliasedType: void Function(X*)*
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional @-1
+              type: X*
+          returnType: void
+''');
   }
 
   test_class_typeParameters_defaultType_functionTypeAlias_contravariant_nullSafe() async {
@@ -1933,14 +3573,35 @@
 
 class A<X extends F<X>> {}
 ''');
-    checkElementText(
-        library,
-        r'''
-typedef F<contravariant X> = void Function(X );
-notSimplyBounded class A<covariant X extends void Function(X) = void Function(Never)> {
-}
-''',
-        withTypeParameterVariance: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      notSimplyBounded class A @40
+        typeParameters
+          covariant X @42
+            bound: void Function(X)
+              aliasElement: self::@typeAlias::F
+              aliasArguments
+                X
+            defaultType: void Function(Never)
+              aliasElement: self::@typeAlias::F
+              aliasArguments
+                Never
+        constructors
+          synthetic @-1
+    typeAliases
+      F @8
+        typeParameters
+          contravariant X @10
+            defaultType: dynamic
+        aliasedType: void Function(X)
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional @-1
+              type: X
+          returnType: void
+''');
   }
 
   test_class_typeParameters_defaultType_functionTypeAlias_covariant_nullSafe() async {
@@ -1949,14 +3610,32 @@
 
 class A<X extends F<X>> {}
 ''');
-    checkElementText(
-        library,
-        r'''
-typedef F<covariant X> = X Function();
-notSimplyBounded class A<covariant X extends X Function() = dynamic Function()> {
-}
-''',
-        withTypeParameterVariance: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      notSimplyBounded class A @36
+        typeParameters
+          covariant X @38
+            bound: X Function()
+              aliasElement: self::@typeAlias::F
+              aliasArguments
+                X
+            defaultType: dynamic Function()
+              aliasElement: self::@typeAlias::F
+              aliasArguments
+                dynamic
+        constructors
+          synthetic @-1
+    typeAliases
+      F @8
+        typeParameters
+          covariant X @10
+            defaultType: dynamic
+        aliasedType: X Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: X
+''');
   }
 
   test_class_typeParameters_defaultType_functionTypeAlias_invariant_legacy() async {
@@ -1965,14 +3644,35 @@
 
 class A<X extends F<X>> {}
 ''');
-    checkElementText(
-        library,
-        r'''
-typedef F<invariant X> = X Function(X );
-notSimplyBounded class A<covariant X extends X Function(X) = dynamic Function(dynamic)> {
-}
-''',
-        withTypeParameterVariance: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      notSimplyBounded class A @37
+        typeParameters
+          covariant X @39
+            bound: X Function(X)
+              aliasElement: self::@typeAlias::F
+              aliasArguments
+                X
+            defaultType: dynamic Function(dynamic)
+              aliasElement: self::@typeAlias::F
+              aliasArguments
+                dynamic
+        constructors
+          synthetic @-1
+    typeAliases
+      F @8
+        typeParameters
+          invariant X @10
+            defaultType: dynamic
+        aliasedType: X Function(X)
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional @-1
+              type: X
+          returnType: X
+''');
   }
 
   test_class_typeParameters_defaultType_functionTypeAlias_invariant_nullSafe() async {
@@ -1981,14 +3681,35 @@
 
 class A<X extends F<X>> {}
 ''');
-    checkElementText(
-        library,
-        r'''
-typedef F<invariant X> = X Function(X );
-notSimplyBounded class A<covariant X extends X Function(X) = dynamic Function(dynamic)> {
-}
-''',
-        withTypeParameterVariance: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      notSimplyBounded class A @37
+        typeParameters
+          covariant X @39
+            bound: X Function(X)
+              aliasElement: self::@typeAlias::F
+              aliasArguments
+                X
+            defaultType: dynamic Function(dynamic)
+              aliasElement: self::@typeAlias::F
+              aliasArguments
+                dynamic
+        constructors
+          synthetic @-1
+    typeAliases
+      F @8
+        typeParameters
+          invariant X @10
+            defaultType: dynamic
+        aliasedType: X Function(X)
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional @-1
+              type: X
+          returnType: X
+''');
   }
 
   test_class_typeParameters_defaultType_genericFunctionType_both_legacy() async {
@@ -1997,8 +3718,16 @@
 class A<X extends X Function(X)> {}
 ''');
     checkElementText(library, r'''
-notSimplyBounded class A<X extends X* Function(X*)* = dynamic Function(Null*)*> {
-}
+library
+  definingUnit
+    classes
+      notSimplyBounded class A @6
+        typeParameters
+          covariant X @8
+            bound: X* Function(X*)*
+            defaultType: dynamic Function(Null*)*
+        constructors
+          synthetic @-1
 ''');
   }
 
@@ -2007,8 +3736,16 @@
 class A<X extends X Function(X)> {}
 ''');
     checkElementText(library, r'''
-notSimplyBounded class A<X extends X Function(X) = dynamic Function(Never)> {
-}
+library
+  definingUnit
+    classes
+      notSimplyBounded class A @6
+        typeParameters
+          covariant X @8
+            bound: X Function(X)
+            defaultType: dynamic Function(Never)
+        constructors
+          synthetic @-1
 ''');
   }
 
@@ -2018,8 +3755,16 @@
 class A<X extends void Function(X)> {}
 ''');
     checkElementText(library, r'''
-notSimplyBounded class A<X extends void Function(X*)* = void Function(Null*)*> {
-}
+library
+  definingUnit
+    classes
+      notSimplyBounded class A @6
+        typeParameters
+          covariant X @8
+            bound: void Function(X*)*
+            defaultType: void Function(Null*)*
+        constructors
+          synthetic @-1
 ''');
   }
 
@@ -2028,8 +3773,16 @@
 class A<X extends void Function(X)> {}
 ''');
     checkElementText(library, r'''
-notSimplyBounded class A<X extends void Function(X) = void Function(Never)> {
-}
+library
+  definingUnit
+    classes
+      notSimplyBounded class A @6
+        typeParameters
+          covariant X @8
+            bound: void Function(X)
+            defaultType: void Function(Never)
+        constructors
+          synthetic @-1
 ''');
   }
 
@@ -2038,8 +3791,16 @@
 class A<X extends X Function()> {}
 ''');
     checkElementText(library, r'''
-notSimplyBounded class A<X extends X Function() = dynamic Function()> {
-}
+library
+  definingUnit
+    classes
+      notSimplyBounded class A @6
+        typeParameters
+          covariant X @8
+            bound: X Function()
+            defaultType: dynamic Function()
+        constructors
+          synthetic @-1
 ''');
   }
 
@@ -2048,8 +3809,16 @@
 class A<X extends X Function()> {}
 ''');
     checkElementText(library, r'''
-notSimplyBounded class A<X extends X Function() = dynamic Function()> {
-}
+library
+  definingUnit
+    classes
+      notSimplyBounded class A @6
+        typeParameters
+          covariant X @8
+            bound: X Function()
+            defaultType: dynamic Function()
+        constructors
+          synthetic @-1
 ''');
   }
 
@@ -2060,14 +3829,30 @@
 
 class B<X extends A<X>> {}
 ''');
-    checkElementText(
-        library,
-        r'''
-typedef A<contravariant X> = List<void Function(X)>;
-notSimplyBounded class B<covariant X extends List<void Function(X)> = List<void Function(Never)>> {
-}
-''',
-        withTypeParameterVariance: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      notSimplyBounded class B @46
+        typeParameters
+          covariant X @48
+            bound: List<void Function(X)>
+              aliasElement: self::@typeAlias::A
+              aliasArguments
+                X
+            defaultType: List<void Function(Never)>
+              aliasElement: self::@typeAlias::A
+              aliasArguments
+                Never
+        constructors
+          synthetic @-1
+    typeAliases
+      A @8
+        typeParameters
+          contravariant X @10
+            defaultType: dynamic
+        aliasedType: List<void Function(X)>
+''');
   }
 
   test_class_typeParameters_defaultType_typeAlias_interface_covariant() async {
@@ -2077,67 +3862,108 @@
 
 class B<X extends A<X>> {}
 ''');
-    checkElementText(
-        library,
-        r'''
-typedef A<covariant X> = Map<X, int>;
-notSimplyBounded class B<covariant X extends Map<X, int> = Map<dynamic, int>> {
-}
-''',
-        withTypeParameterVariance: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      notSimplyBounded class B @35
+        typeParameters
+          covariant X @37
+            bound: Map<X, int>
+              aliasElement: self::@typeAlias::A
+              aliasArguments
+                X
+            defaultType: Map<dynamic, int>
+              aliasElement: self::@typeAlias::A
+              aliasArguments
+                dynamic
+        constructors
+          synthetic @-1
+    typeAliases
+      A @8
+        typeParameters
+          covariant X @10
+            defaultType: dynamic
+        aliasedType: Map<X, int>
+''');
   }
 
   test_class_typeParameters_variance_contravariant() async {
     var library = await checkLibrary('class C<in T> {}');
-    checkElementText(
-        library,
-        r'''
-class C<contravariant T> {
-}
-''',
-        withTypeParameterVariance: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          contravariant T @11
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+''');
   }
 
   test_class_typeParameters_variance_covariant() async {
     var library = await checkLibrary('class C<out T> {}');
-    checkElementText(
-        library,
-        r'''
-class C<covariant T> {
-}
-''',
-        withTypeParameterVariance: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          covariant T @12
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+''');
   }
 
   test_class_typeParameters_variance_invariant() async {
     var library = await checkLibrary('class C<inout T> {}');
-    checkElementText(
-        library,
-        r'''
-class C<invariant T> {
-}
-''',
-        withTypeParameterVariance: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          invariant T @14
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+''');
   }
 
   test_class_typeParameters_variance_multiple() async {
     var library = await checkLibrary('class C<inout T, in U, out V> {}');
-    checkElementText(
-        library,
-        r'''
-class C<invariant T, contravariant U, covariant V> {
-}
-''',
-        withTypeParameterVariance: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          invariant T @14
+            defaultType: dynamic
+          contravariant U @20
+            defaultType: dynamic
+          covariant V @27
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+''');
   }
 
   test_classes() async {
     var library = await checkLibrary('class C {} class D {}');
     checkElementText(library, r'''
-class C {
-}
-class D {
-}
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          synthetic @-1
+      class D @17
+        constructors
+          synthetic @-1
 ''');
   }
 
@@ -2149,7 +3975,11 @@
 }
 ''');
     checkElementText(library, r'''
-dynamic f() {}
+library
+  definingUnit
+    functions
+      f @0
+        returnType: dynamic
 ''');
   }
 
@@ -2158,7 +3988,14 @@
 final f = <U, V>(U x, V y) => y;
 ''');
     checkElementText(library, r'''
-final V Function<U, V>(U, V) f;
+library
+  definingUnit
+    topLevelVariables
+      static final f @6
+        type: V Function<U, V>(U, V)
+    accessors
+      synthetic static get f @6
+        returnType: V Function<U, V>(U, V)
 ''');
   }
 
@@ -2169,12 +4006,18 @@
 part "a.dart";
 ''');
     checkElementText(library, r'''
-library lib;
-part 'a.dart';
---------------------
-unit: a.dart
-
-final double Function(int) f;
+library
+  name: lib
+  nameOffset: 8
+  definingUnit
+  parts
+    a.dart
+      topLevelVariables
+        static final f @19
+          type: double Function(int)
+      accessors
+        synthetic static get f @19
+          returnType: double Function(int)
 ''');
   }
 
@@ -2207,32 +4050,89 @@
     checkElementText(
         library,
         r'''
-class Raw/*codeOffset=0, codeLength=12*/ {
-}
-/// Comment 1.
-/// Comment 2.
-class HasDocComment/*codeOffset=14, codeLength=52*/ {
-}
-@Object()
-class HasAnnotation/*codeOffset=68, codeLength=32*/ {
-}
-/// Comment 1.
-/// Comment 2.
-@Object()
-class AnnotationThenComment/*codeOffset=102, codeLength=70*/ {
-}
-/// Comment 1.
-/// Comment 2.
-@Object()
-class CommentThenAnnotation/*codeOffset=174, codeLength=70*/ {
-}
-/// Comment 2.
-@Object()
-class CommentAroundAnnotation/*codeOffset=261, codeLength=57*/ {
-}
+library
+  definingUnit
+    classes
+      class Raw @6
+        codeOffset: 0
+        codeLength: 12
+        constructors
+          synthetic @-1
+      class HasDocComment @50
+        documentationComment: /// Comment 1.\n/// Comment 2.
+        codeOffset: 14
+        codeLength: 52
+        constructors
+          synthetic @-1
+      class HasAnnotation @84
+        metadata
+          Annotation
+            arguments: ArgumentList
+              leftParenthesis: ( @75
+              rightParenthesis: ) @76
+            atSign.offset: 68
+            element: dart:core::@class::Object::@constructor::•
+            name: SimpleIdentifier
+              staticElement: dart:core::@class::Object
+              staticType: null
+              token: Object @69
+        codeOffset: 68
+        codeLength: 32
+        constructors
+          synthetic @-1
+      class AnnotationThenComment @148
+        documentationComment: /// Comment 1.\n/// Comment 2.
+        metadata
+          Annotation
+            arguments: ArgumentList
+              leftParenthesis: ( @109
+              rightParenthesis: ) @110
+            atSign.offset: 102
+            element: dart:core::@class::Object::@constructor::•
+            name: SimpleIdentifier
+              staticElement: dart:core::@class::Object
+              staticType: null
+              token: Object @103
+        codeOffset: 102
+        codeLength: 70
+        constructors
+          synthetic @-1
+      class CommentThenAnnotation @220
+        documentationComment: /// Comment 1.\n/// Comment 2.
+        metadata
+          Annotation
+            arguments: ArgumentList
+              leftParenthesis: ( @211
+              rightParenthesis: ) @212
+            atSign.offset: 204
+            element: dart:core::@class::Object::@constructor::•
+            name: SimpleIdentifier
+              staticElement: dart:core::@class::Object
+              staticType: null
+              token: Object @205
+        codeOffset: 174
+        codeLength: 70
+        constructors
+          synthetic @-1
+      class CommentAroundAnnotation @292
+        documentationComment: /// Comment 2.
+        metadata
+          Annotation
+            arguments: ArgumentList
+              leftParenthesis: ( @268
+              rightParenthesis: ) @269
+            atSign.offset: 261
+            element: dart:core::@class::Object::@constructor::•
+            name: SimpleIdentifier
+              staticElement: dart:core::@class::Object
+              staticType: null
+              token: Object @262
+        codeOffset: 261
+        codeLength: 57
+        constructors
+          synthetic @-1
 ''',
-        withCodeRanges: true,
-        withConstElements: false);
+        withCodeRanges: true);
   }
 
   test_codeRange_class_namedMixin() async {
@@ -2268,42 +4168,159 @@
     checkElementText(
         library,
         r'''
-class A/*codeOffset=0, codeLength=10*/ {
-}
-class B/*codeOffset=12, codeLength=10*/ {
-}
-class alias Raw/*codeOffset=24, codeLength=29*/ extends Object with A, B {
-  synthetic const Raw() : super();
-}
-/// Comment 1.
-/// Comment 2.
-class alias HasDocComment/*codeOffset=55, codeLength=69*/ extends Object with A, B {
-  synthetic const HasDocComment() : super();
-}
-@Object()
-class alias HasAnnotation/*codeOffset=126, codeLength=49*/ extends Object with A, B {
-  synthetic const HasAnnotation() : super();
-}
-/// Comment 1.
-/// Comment 2.
-@Object()
-class alias AnnotationThenComment/*codeOffset=177, codeLength=87*/ extends Object with A, B {
-  synthetic const AnnotationThenComment() : super();
-}
-/// Comment 1.
-/// Comment 2.
-@Object()
-class alias CommentThenAnnotation/*codeOffset=266, codeLength=87*/ extends Object with A, B {
-  synthetic const CommentThenAnnotation() : super();
-}
-/// Comment 2.
-@Object()
-class alias CommentAroundAnnotation/*codeOffset=370, codeLength=74*/ extends Object with A, B {
-  synthetic const CommentAroundAnnotation() : super();
-}
+library
+  definingUnit
+    classes
+      class A @6
+        codeOffset: 0
+        codeLength: 10
+        constructors
+          synthetic @-1
+      class B @18
+        codeOffset: 12
+        codeLength: 10
+        constructors
+          synthetic @-1
+      class alias Raw @30
+        codeOffset: 24
+        codeLength: 29
+        supertype: Object
+        mixins
+          A
+          B
+        constructors
+          synthetic const @-1
+            constantInitializers
+              SuperConstructorInvocation
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticElement: dart:core::@class::Object::@constructor::•
+      class alias HasDocComment @91
+        documentationComment: /// Comment 1.\n/// Comment 2.
+        codeOffset: 55
+        codeLength: 69
+        supertype: Object
+        mixins
+          A
+          B
+        constructors
+          synthetic const @-1
+            constantInitializers
+              SuperConstructorInvocation
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticElement: dart:core::@class::Object::@constructor::•
+      class alias HasAnnotation @142
+        metadata
+          Annotation
+            arguments: ArgumentList
+              leftParenthesis: ( @133
+              rightParenthesis: ) @134
+            atSign.offset: 126
+            element: dart:core::@class::Object::@constructor::•
+            name: SimpleIdentifier
+              staticElement: dart:core::@class::Object
+              staticType: null
+              token: Object @127
+        codeOffset: 126
+        codeLength: 49
+        supertype: Object
+        mixins
+          A
+          B
+        constructors
+          synthetic const @-1
+            constantInitializers
+              SuperConstructorInvocation
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticElement: dart:core::@class::Object::@constructor::•
+      class alias AnnotationThenComment @223
+        documentationComment: /// Comment 1.\n/// Comment 2.
+        metadata
+          Annotation
+            arguments: ArgumentList
+              leftParenthesis: ( @184
+              rightParenthesis: ) @185
+            atSign.offset: 177
+            element: dart:core::@class::Object::@constructor::•
+            name: SimpleIdentifier
+              staticElement: dart:core::@class::Object
+              staticType: null
+              token: Object @178
+        codeOffset: 177
+        codeLength: 87
+        supertype: Object
+        mixins
+          A
+          B
+        constructors
+          synthetic const @-1
+            constantInitializers
+              SuperConstructorInvocation
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticElement: dart:core::@class::Object::@constructor::•
+      class alias CommentThenAnnotation @312
+        documentationComment: /// Comment 1.\n/// Comment 2.
+        metadata
+          Annotation
+            arguments: ArgumentList
+              leftParenthesis: ( @303
+              rightParenthesis: ) @304
+            atSign.offset: 296
+            element: dart:core::@class::Object::@constructor::•
+            name: SimpleIdentifier
+              staticElement: dart:core::@class::Object
+              staticType: null
+              token: Object @297
+        codeOffset: 266
+        codeLength: 87
+        supertype: Object
+        mixins
+          A
+          B
+        constructors
+          synthetic const @-1
+            constantInitializers
+              SuperConstructorInvocation
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticElement: dart:core::@class::Object::@constructor::•
+      class alias CommentAroundAnnotation @401
+        documentationComment: /// Comment 2.
+        metadata
+          Annotation
+            arguments: ArgumentList
+              leftParenthesis: ( @377
+              rightParenthesis: ) @378
+            atSign.offset: 370
+            element: dart:core::@class::Object::@constructor::•
+            name: SimpleIdentifier
+              staticElement: dart:core::@class::Object
+              staticType: null
+              token: Object @371
+        codeOffset: 370
+        codeLength: 74
+        supertype: Object
+        mixins
+          A
+          B
+        constructors
+          synthetic const @-1
+            constantInitializers
+              SuperConstructorInvocation
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticElement: dart:core::@class::Object::@constructor::•
 ''',
-        withCodeRanges: true,
-        withConstElements: false);
+        withCodeRanges: true);
   }
 
   test_codeRange_constructor() async {
@@ -2339,29 +4356,96 @@
     checkElementText(
         library,
         r'''
-class C/*codeOffset=0, codeLength=362*/ {
-  C/*codeOffset=12, codeLength=4*/();
-  C.raw/*codeOffset=20, codeLength=10*/();
-  /// Comment 1.
-  /// Comment 2.
-  C.hasDocComment/*codeOffset=34, codeLength=54*/();
-  @Object()
-  C.hasAnnotation/*codeOffset=92, codeLength=32*/();
-  /// Comment 1.
-  /// Comment 2.
-  @Object()
-  C.annotationThenComment/*codeOffset=128, codeLength=74*/();
-  /// Comment 1.
-  /// Comment 2.
-  @Object()
-  C.commentThenAnnotation/*codeOffset=206, codeLength=74*/();
-  /// Comment 2.
-  @Object()
-  C.commentAroundAnnotation/*codeOffset=301, codeLength=59*/();
-}
+library
+  definingUnit
+    classes
+      class C @6
+        codeOffset: 0
+        codeLength: 362
+        constructors
+          @12
+            codeOffset: 12
+            codeLength: 4
+          raw @22
+            codeOffset: 20
+            codeLength: 10
+            periodOffset: 21
+            nameEnd: 25
+          hasDocComment @70
+            documentationComment: /// Comment 1.\n/// Comment 2.
+            codeOffset: 34
+            codeLength: 54
+            periodOffset: 69
+            nameEnd: 83
+          hasAnnotation @106
+            metadata
+              Annotation
+                arguments: ArgumentList
+                  leftParenthesis: ( @99
+                  rightParenthesis: ) @100
+                atSign.offset: 92
+                element: dart:core::@class::Object::@constructor::•
+                name: SimpleIdentifier
+                  staticElement: dart:core::@class::Object
+                  staticType: null
+                  token: Object @93
+            codeOffset: 92
+            codeLength: 32
+            periodOffset: 105
+            nameEnd: 119
+          annotationThenComment @176
+            documentationComment: /// Comment 1.\n/// Comment 2.
+            metadata
+              Annotation
+                arguments: ArgumentList
+                  leftParenthesis: ( @135
+                  rightParenthesis: ) @136
+                atSign.offset: 128
+                element: dart:core::@class::Object::@constructor::•
+                name: SimpleIdentifier
+                  staticElement: dart:core::@class::Object
+                  staticType: null
+                  token: Object @129
+            codeOffset: 128
+            codeLength: 74
+            periodOffset: 175
+            nameEnd: 197
+          commentThenAnnotation @254
+            documentationComment: /// Comment 1.\n/// Comment 2.
+            metadata
+              Annotation
+                arguments: ArgumentList
+                  leftParenthesis: ( @247
+                  rightParenthesis: ) @248
+                atSign.offset: 240
+                element: dart:core::@class::Object::@constructor::•
+                name: SimpleIdentifier
+                  staticElement: dart:core::@class::Object
+                  staticType: null
+                  token: Object @241
+            codeOffset: 206
+            codeLength: 74
+            periodOffset: 253
+            nameEnd: 275
+          commentAroundAnnotation @332
+            documentationComment: /// Comment 2.
+            metadata
+              Annotation
+                arguments: ArgumentList
+                  leftParenthesis: ( @308
+                  rightParenthesis: ) @309
+                atSign.offset: 301
+                element: dart:core::@class::Object::@constructor::•
+                name: SimpleIdentifier
+                  staticElement: dart:core::@class::Object
+                  staticType: null
+                  token: Object @302
+            codeOffset: 301
+            codeLength: 59
+            periodOffset: 331
+            nameEnd: 355
 ''',
-        withCodeRanges: true,
-        withConstElements: false);
+        withCodeRanges: true);
   }
 
   test_codeRange_constructor_factory() async {
@@ -2397,29 +4481,96 @@
     checkElementText(
         library,
         r'''
-class C/*codeOffset=0, codeLength=483*/ {
-  factory C/*codeOffset=12, codeLength=23*/();
-  factory C.raw/*codeOffset=39, codeLength=27*/();
-  /// Comment 1.
-  /// Comment 2.
-  factory C.hasDocComment/*codeOffset=70, codeLength=71*/();
-  @Object()
-  factory C.hasAnnotation/*codeOffset=145, codeLength=49*/();
-  /// Comment 1.
-  /// Comment 2.
-  @Object()
-  factory C.annotationThenComment/*codeOffset=198, codeLength=91*/();
-  /// Comment 1.
-  /// Comment 2.
-  @Object()
-  factory C.commentThenAnnotation/*codeOffset=293, codeLength=91*/();
-  /// Comment 2.
-  @Object()
-  factory C.commentAroundAnnotation/*codeOffset=405, codeLength=76*/();
-}
+library
+  definingUnit
+    classes
+      class C @6
+        codeOffset: 0
+        codeLength: 483
+        constructors
+          factory @20
+            codeOffset: 12
+            codeLength: 23
+          factory raw @49
+            codeOffset: 39
+            codeLength: 27
+            periodOffset: 48
+            nameEnd: 52
+          factory hasDocComment @114
+            documentationComment: /// Comment 1.\n/// Comment 2.
+            codeOffset: 70
+            codeLength: 71
+            periodOffset: 113
+            nameEnd: 127
+          factory hasAnnotation @167
+            metadata
+              Annotation
+                arguments: ArgumentList
+                  leftParenthesis: ( @152
+                  rightParenthesis: ) @153
+                atSign.offset: 145
+                element: dart:core::@class::Object::@constructor::•
+                name: SimpleIdentifier
+                  staticElement: dart:core::@class::Object
+                  staticType: null
+                  token: Object @146
+            codeOffset: 145
+            codeLength: 49
+            periodOffset: 166
+            nameEnd: 180
+          factory annotationThenComment @254
+            documentationComment: /// Comment 1.\n/// Comment 2.
+            metadata
+              Annotation
+                arguments: ArgumentList
+                  leftParenthesis: ( @205
+                  rightParenthesis: ) @206
+                atSign.offset: 198
+                element: dart:core::@class::Object::@constructor::•
+                name: SimpleIdentifier
+                  staticElement: dart:core::@class::Object
+                  staticType: null
+                  token: Object @199
+            codeOffset: 198
+            codeLength: 91
+            periodOffset: 253
+            nameEnd: 275
+          factory commentThenAnnotation @349
+            documentationComment: /// Comment 1.\n/// Comment 2.
+            metadata
+              Annotation
+                arguments: ArgumentList
+                  leftParenthesis: ( @334
+                  rightParenthesis: ) @335
+                atSign.offset: 327
+                element: dart:core::@class::Object::@constructor::•
+                name: SimpleIdentifier
+                  staticElement: dart:core::@class::Object
+                  staticType: null
+                  token: Object @328
+            codeOffset: 293
+            codeLength: 91
+            periodOffset: 348
+            nameEnd: 370
+          factory commentAroundAnnotation @444
+            documentationComment: /// Comment 2.
+            metadata
+              Annotation
+                arguments: ArgumentList
+                  leftParenthesis: ( @412
+                  rightParenthesis: ) @413
+                atSign.offset: 405
+                element: dart:core::@class::Object::@constructor::•
+                name: SimpleIdentifier
+                  staticElement: dart:core::@class::Object
+                  staticType: null
+                  token: Object @406
+            codeOffset: 405
+            codeLength: 76
+            periodOffset: 443
+            nameEnd: 467
 ''',
-        withCodeRanges: true,
-        withConstElements: false);
+        withCodeRanges: true);
   }
 
   test_codeRange_enum() async {
@@ -2431,17 +4582,45 @@
     checkElementText(
         library,
         r'''
-enum E/*codeOffset=0, codeLength=26*/ {
-  synthetic final int index/*codeOffset=null, codeLength=null*/;
-  synthetic static const List<E> values/*codeOffset=null, codeLength=null*/;
-  static const E aaa/*codeOffset=11, codeLength=3*/;
-  static const E bbb/*codeOffset=16, codeLength=3*/;
-  static const E ccc/*codeOffset=21, codeLength=3*/;
-  String toString/*codeOffset=null, codeLength=null*/() {}
-}
+library
+  definingUnit
+    enums
+      enum E @5
+        codeOffset: 0
+        codeLength: 26
+        fields
+          synthetic final index @-1
+            type: int
+          synthetic static const values @-1
+            type: List<E>
+          static const aaa @11
+            codeOffset: 11
+            codeLength: 3
+            type: E
+          static const bbb @16
+            codeOffset: 16
+            codeLength: 3
+            type: E
+          static const ccc @21
+            codeOffset: 21
+            codeLength: 3
+            type: E
+        accessors
+          synthetic get index @-1
+            returnType: int
+          synthetic static get values @-1
+            returnType: List<E>
+          synthetic static get aaa @-1
+            returnType: E
+          synthetic static get bbb @-1
+            returnType: E
+          synthetic static get ccc @-1
+            returnType: E
+        methods
+          toString @-1
+            returnType: String
 ''',
-        withCodeRanges: true,
-        withConstElements: false);
+        withCodeRanges: true);
   }
 
   test_codeRange_extensions() async {
@@ -2475,34 +4654,89 @@
     checkElementText(
         library,
         r'''
-class A/*codeOffset=0, codeLength=10*/ {
-}
-extension Raw/*codeOffset=12, codeLength=21*/ on A {
-}
-/// Comment 1.
-/// Comment 2.
-extension HasDocComment/*codeOffset=35, codeLength=61*/ on A {
-}
-@Object()
-extension HasAnnotation/*codeOffset=98, codeLength=41*/ on A {
-}
-/// Comment 1.
-/// Comment 2.
-@Object()
-extension AnnotationThenComment/*codeOffset=141, codeLength=79*/ on A {
-}
-/// Comment 1.
-/// Comment 2.
-@Object()
-extension CommentThenAnnotation/*codeOffset=222, codeLength=79*/ on A {
-}
-/// Comment 2.
-@Object()
-extension CommentAroundAnnotation/*codeOffset=318, codeLength=66*/ on A {
-}
+library
+  definingUnit
+    classes
+      class A @6
+        codeOffset: 0
+        codeLength: 10
+        constructors
+          synthetic @-1
+    extensions
+      Raw @22
+        codeOffset: 12
+        codeLength: 21
+        extendedType: A
+      HasDocComment @75
+        documentationComment: /// Comment 1.\n/// Comment 2.
+        codeOffset: 35
+        codeLength: 61
+        extendedType: A
+      HasAnnotation @118
+        metadata
+          Annotation
+            arguments: ArgumentList
+              leftParenthesis: ( @105
+              rightParenthesis: ) @106
+            atSign.offset: 98
+            element: dart:core::@class::Object::@constructor::•
+            name: SimpleIdentifier
+              staticElement: dart:core::@class::Object
+              staticType: null
+              token: Object @99
+        codeOffset: 98
+        codeLength: 41
+        extendedType: A
+      AnnotationThenComment @191
+        documentationComment: /// Comment 1.\n/// Comment 2.
+        metadata
+          Annotation
+            arguments: ArgumentList
+              leftParenthesis: ( @148
+              rightParenthesis: ) @149
+            atSign.offset: 141
+            element: dart:core::@class::Object::@constructor::•
+            name: SimpleIdentifier
+              staticElement: dart:core::@class::Object
+              staticType: null
+              token: Object @142
+        codeOffset: 141
+        codeLength: 79
+        extendedType: A
+      CommentThenAnnotation @272
+        documentationComment: /// Comment 1.\n/// Comment 2.
+        metadata
+          Annotation
+            arguments: ArgumentList
+              leftParenthesis: ( @259
+              rightParenthesis: ) @260
+            atSign.offset: 252
+            element: dart:core::@class::Object::@constructor::•
+            name: SimpleIdentifier
+              staticElement: dart:core::@class::Object
+              staticType: null
+              token: Object @253
+        codeOffset: 222
+        codeLength: 79
+        extendedType: A
+      CommentAroundAnnotation @353
+        documentationComment: /// Comment 2.
+        metadata
+          Annotation
+            arguments: ArgumentList
+              leftParenthesis: ( @325
+              rightParenthesis: ) @326
+            atSign.offset: 318
+            element: dart:core::@class::Object::@constructor::•
+            name: SimpleIdentifier
+              staticElement: dart:core::@class::Object
+              staticType: null
+              token: Object @319
+        codeOffset: 318
+        codeLength: 66
+        extendedType: A
 ''',
-        withCodeRanges: true,
-        withConstElements: false);
+        withCodeRanges: true);
   }
 
   test_codeRange_field() async {
@@ -2518,16 +4752,73 @@
     checkElementText(
         library,
         r'''
-class C/*codeOffset=0, codeLength=115*/ {
-  int withInit/*codeOffset=12, codeLength=16*/;
-  int withoutInit/*codeOffset=33, codeLength=15*/;
-  int multiWithInit/*codeOffset=53, codeLength=21*/;
-  int multiWithoutInit/*codeOffset=76, codeLength=16*/;
-  int multiWithInit2/*codeOffset=94, codeLength=18*/;
-}
+library
+  definingUnit
+    classes
+      class C @6
+        codeOffset: 0
+        codeLength: 115
+        fields
+          withInit @16
+            codeOffset: 12
+            codeLength: 16
+            type: int
+          withoutInit @37
+            codeOffset: 33
+            codeLength: 15
+            type: int
+          multiWithInit @57
+            codeOffset: 53
+            codeLength: 21
+            type: int
+          multiWithoutInit @76
+            codeOffset: 76
+            codeLength: 16
+            type: int
+          multiWithInit2 @94
+            codeOffset: 94
+            codeLength: 18
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get withInit @16
+            returnType: int
+          synthetic set withInit @16
+            parameters
+              requiredPositional _withInit @16
+                type: int
+            returnType: void
+          synthetic get withoutInit @37
+            returnType: int
+          synthetic set withoutInit @37
+            parameters
+              requiredPositional _withoutInit @37
+                type: int
+            returnType: void
+          synthetic get multiWithInit @57
+            returnType: int
+          synthetic set multiWithInit @57
+            parameters
+              requiredPositional _multiWithInit @57
+                type: int
+            returnType: void
+          synthetic get multiWithoutInit @76
+            returnType: int
+          synthetic set multiWithoutInit @76
+            parameters
+              requiredPositional _multiWithoutInit @76
+                type: int
+            returnType: void
+          synthetic get multiWithInit2 @94
+            returnType: int
+          synthetic set multiWithInit2 @94
+            parameters
+              requiredPositional _multiWithInit2 @94
+                type: int
+            returnType: void
 ''',
-        withCodeRanges: true,
-        withConstElements: false);
+        withCodeRanges: true);
   }
 
   test_codeRange_field_annotations() async {
@@ -2559,43 +4850,224 @@
     checkElementText(
         library,
         r'''
-class C/*codeOffset=0, codeLength=436*/ {
-  /// Comment 1.
-  /// Comment 2.
-  int hasDocComment/*codeOffset=12, codeLength=51*/;
-  /// Comment 1.
-  /// Comment 2.
-  int hasDocComment2/*codeOffset=65, codeLength=14*/;
-  @Object()
-  int hasAnnotation/*codeOffset=84, codeLength=29*/;
-  @Object()
-  int hasAnnotation2/*codeOffset=115, codeLength=14*/;
-  /// Comment 1.
-  /// Comment 2.
-  @Object()
-  int annotationThenComment/*codeOffset=134, codeLength=71*/;
-  /// Comment 1.
-  /// Comment 2.
-  @Object()
-  int annotationThenComment2/*codeOffset=207, codeLength=22*/;
-  /// Comment 1.
-  /// Comment 2.
-  @Object()
-  int commentThenAnnotation/*codeOffset=234, codeLength=71*/;
-  /// Comment 1.
-  /// Comment 2.
-  @Object()
-  int commentThenAnnotation2/*codeOffset=307, codeLength=22*/;
-  /// Comment 2.
-  @Object()
-  int commentAroundAnnotation/*codeOffset=351, codeLength=56*/;
-  /// Comment 2.
-  @Object()
-  int commentAroundAnnotation2/*codeOffset=409, codeLength=24*/;
-}
+library
+  definingUnit
+    classes
+      class C @6
+        codeOffset: 0
+        codeLength: 436
+        fields
+          hasDocComment @50
+            documentationComment: /// Comment 1.\n/// Comment 2.
+            codeOffset: 12
+            codeLength: 51
+            type: int
+          hasDocComment2 @65
+            documentationComment: /// Comment 1.\n/// Comment 2.
+            codeOffset: 65
+            codeLength: 14
+            type: int
+          hasAnnotation @100
+            metadata
+              Annotation
+                arguments: ArgumentList
+                  leftParenthesis: ( @91
+                  rightParenthesis: ) @92
+                atSign.offset: 84
+                element: dart:core::@class::Object::@constructor::•
+                name: SimpleIdentifier
+                  staticElement: dart:core::@class::Object
+                  staticType: null
+                  token: Object @85
+            codeOffset: 84
+            codeLength: 29
+            type: int
+          hasAnnotation2 @115
+            metadata
+              Annotation
+                arguments: ArgumentList
+                  leftParenthesis: ( @91
+                  rightParenthesis: ) @92
+                atSign.offset: 84
+                element: dart:core::@class::Object::@constructor::•
+                name: SimpleIdentifier
+                  staticElement: dart:core::@class::Object
+                  staticType: null
+                  token: Object @85
+            codeOffset: 115
+            codeLength: 14
+            type: int
+          annotationThenComment @184
+            documentationComment: /// Comment 1.\n/// Comment 2.
+            metadata
+              Annotation
+                arguments: ArgumentList
+                  leftParenthesis: ( @141
+                  rightParenthesis: ) @142
+                atSign.offset: 134
+                element: dart:core::@class::Object::@constructor::•
+                name: SimpleIdentifier
+                  staticElement: dart:core::@class::Object
+                  staticType: null
+                  token: Object @135
+            codeOffset: 134
+            codeLength: 71
+            type: int
+          annotationThenComment2 @207
+            documentationComment: /// Comment 1.\n/// Comment 2.
+            metadata
+              Annotation
+                arguments: ArgumentList
+                  leftParenthesis: ( @141
+                  rightParenthesis: ) @142
+                atSign.offset: 134
+                element: dart:core::@class::Object::@constructor::•
+                name: SimpleIdentifier
+                  staticElement: dart:core::@class::Object
+                  staticType: null
+                  token: Object @135
+            codeOffset: 207
+            codeLength: 22
+            type: int
+          commentThenAnnotation @284
+            documentationComment: /// Comment 1.\n/// Comment 2.
+            metadata
+              Annotation
+                arguments: ArgumentList
+                  leftParenthesis: ( @275
+                  rightParenthesis: ) @276
+                atSign.offset: 268
+                element: dart:core::@class::Object::@constructor::•
+                name: SimpleIdentifier
+                  staticElement: dart:core::@class::Object
+                  staticType: null
+                  token: Object @269
+            codeOffset: 234
+            codeLength: 71
+            type: int
+          commentThenAnnotation2 @307
+            documentationComment: /// Comment 1.\n/// Comment 2.
+            metadata
+              Annotation
+                arguments: ArgumentList
+                  leftParenthesis: ( @275
+                  rightParenthesis: ) @276
+                atSign.offset: 268
+                element: dart:core::@class::Object::@constructor::•
+                name: SimpleIdentifier
+                  staticElement: dart:core::@class::Object
+                  staticType: null
+                  token: Object @269
+            codeOffset: 307
+            codeLength: 22
+            type: int
+          commentAroundAnnotation @384
+            documentationComment: /// Comment 2.
+            metadata
+              Annotation
+                arguments: ArgumentList
+                  leftParenthesis: ( @358
+                  rightParenthesis: ) @359
+                atSign.offset: 351
+                element: dart:core::@class::Object::@constructor::•
+                name: SimpleIdentifier
+                  staticElement: dart:core::@class::Object
+                  staticType: null
+                  token: Object @352
+            codeOffset: 351
+            codeLength: 56
+            type: int
+          commentAroundAnnotation2 @409
+            documentationComment: /// Comment 2.
+            metadata
+              Annotation
+                arguments: ArgumentList
+                  leftParenthesis: ( @358
+                  rightParenthesis: ) @359
+                atSign.offset: 351
+                element: dart:core::@class::Object::@constructor::•
+                name: SimpleIdentifier
+                  staticElement: dart:core::@class::Object
+                  staticType: null
+                  token: Object @352
+            codeOffset: 409
+            codeLength: 24
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get hasDocComment @50
+            returnType: int
+          synthetic set hasDocComment @50
+            parameters
+              requiredPositional _hasDocComment @50
+                type: int
+            returnType: void
+          synthetic get hasDocComment2 @65
+            returnType: int
+          synthetic set hasDocComment2 @65
+            parameters
+              requiredPositional _hasDocComment2 @65
+                type: int
+            returnType: void
+          synthetic get hasAnnotation @100
+            returnType: int
+          synthetic set hasAnnotation @100
+            parameters
+              requiredPositional _hasAnnotation @100
+                type: int
+            returnType: void
+          synthetic get hasAnnotation2 @115
+            returnType: int
+          synthetic set hasAnnotation2 @115
+            parameters
+              requiredPositional _hasAnnotation2 @115
+                type: int
+            returnType: void
+          synthetic get annotationThenComment @184
+            returnType: int
+          synthetic set annotationThenComment @184
+            parameters
+              requiredPositional _annotationThenComment @184
+                type: int
+            returnType: void
+          synthetic get annotationThenComment2 @207
+            returnType: int
+          synthetic set annotationThenComment2 @207
+            parameters
+              requiredPositional _annotationThenComment2 @207
+                type: int
+            returnType: void
+          synthetic get commentThenAnnotation @284
+            returnType: int
+          synthetic set commentThenAnnotation @284
+            parameters
+              requiredPositional _commentThenAnnotation @284
+                type: int
+            returnType: void
+          synthetic get commentThenAnnotation2 @307
+            returnType: int
+          synthetic set commentThenAnnotation2 @307
+            parameters
+              requiredPositional _commentThenAnnotation2 @307
+                type: int
+            returnType: void
+          synthetic get commentAroundAnnotation @384
+            returnType: int
+          synthetic set commentAroundAnnotation @384
+            parameters
+              requiredPositional _commentAroundAnnotation @384
+                type: int
+            returnType: void
+          synthetic get commentAroundAnnotation2 @409
+            returnType: int
+          synthetic set commentAroundAnnotation2 @409
+            parameters
+              requiredPositional _commentAroundAnnotation2 @409
+                type: int
+            returnType: void
 ''',
-        withCodeRanges: true,
-        withConstElements: false);
+        withCodeRanges: true);
   }
 
   test_codeRange_function() async {
@@ -2627,26 +5099,83 @@
     checkElementText(
         library,
         r'''
-void raw/*codeOffset=0, codeLength=13*/() {}
-/// Comment 1.
-/// Comment 2.
-void hasDocComment/*codeOffset=15, codeLength=53*/() {}
-@Object()
-void hasAnnotation/*codeOffset=70, codeLength=33*/() {}
-/// Comment 1.
-/// Comment 2.
-@Object()
-void annotationThenComment/*codeOffset=105, codeLength=71*/() {}
-/// Comment 1.
-/// Comment 2.
-@Object()
-void commentThenAnnotation/*codeOffset=178, codeLength=71*/() {}
-/// Comment 2.
-@Object()
-void commentAroundAnnotation/*codeOffset=266, codeLength=58*/() {}
+library
+  definingUnit
+    functions
+      raw @5
+        codeOffset: 0
+        codeLength: 13
+        returnType: void
+      hasDocComment @50
+        documentationComment: /// Comment 1.\n/// Comment 2.
+        codeOffset: 15
+        codeLength: 53
+        returnType: void
+      hasAnnotation @85
+        metadata
+          Annotation
+            arguments: ArgumentList
+              leftParenthesis: ( @77
+              rightParenthesis: ) @78
+            atSign.offset: 70
+            element: dart:core::@class::Object::@constructor::•
+            name: SimpleIdentifier
+              staticElement: dart:core::@class::Object
+              staticType: null
+              token: Object @71
+        codeOffset: 70
+        codeLength: 33
+        returnType: void
+      annotationThenComment @150
+        documentationComment: /// Comment 1.\n/// Comment 2.
+        metadata
+          Annotation
+            arguments: ArgumentList
+              leftParenthesis: ( @112
+              rightParenthesis: ) @113
+            atSign.offset: 105
+            element: dart:core::@class::Object::@constructor::•
+            name: SimpleIdentifier
+              staticElement: dart:core::@class::Object
+              staticType: null
+              token: Object @106
+        codeOffset: 105
+        codeLength: 71
+        returnType: void
+      commentThenAnnotation @223
+        documentationComment: /// Comment 1.\n/// Comment 2.
+        metadata
+          Annotation
+            arguments: ArgumentList
+              leftParenthesis: ( @215
+              rightParenthesis: ) @216
+            atSign.offset: 208
+            element: dart:core::@class::Object::@constructor::•
+            name: SimpleIdentifier
+              staticElement: dart:core::@class::Object
+              staticType: null
+              token: Object @209
+        codeOffset: 178
+        codeLength: 71
+        returnType: void
+      commentAroundAnnotation @296
+        documentationComment: /// Comment 2.
+        metadata
+          Annotation
+            arguments: ArgumentList
+              leftParenthesis: ( @273
+              rightParenthesis: ) @274
+            atSign.offset: 266
+            element: dart:core::@class::Object::@constructor::•
+            name: SimpleIdentifier
+              staticElement: dart:core::@class::Object
+              staticType: null
+              token: Object @267
+        codeOffset: 266
+        codeLength: 58
+        returnType: void
 ''',
-        withCodeRanges: true,
-        withConstElements: false);
+        withCodeRanges: true);
   }
 
   test_codeRange_functionTypeAlias() async {
@@ -2678,26 +5207,95 @@
     checkElementText(
         library,
         r'''
-typedef Raw/*codeOffset=0, codeLength=14*/ = dynamic Function();
-/// Comment 1.
-/// Comment 2.
-typedef HasDocComment/*codeOffset=16, codeLength=54*/ = dynamic Function();
-@Object()
-typedef HasAnnotation/*codeOffset=72, codeLength=34*/ = dynamic Function();
-/// Comment 1.
-/// Comment 2.
-@Object()
-typedef AnnotationThenComment/*codeOffset=108, codeLength=72*/ = dynamic Function();
-/// Comment 1.
-/// Comment 2.
-@Object()
-typedef CommentThenAnnotation/*codeOffset=182, codeLength=72*/ = dynamic Function();
-/// Comment 2.
-@Object()
-typedef CommentAroundAnnotation/*codeOffset=271, codeLength=59*/ = dynamic Function();
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased Raw @8
+        codeOffset: 0
+        codeLength: 14
+        aliasedType: dynamic Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: dynamic
+      functionTypeAliasBased HasDocComment @54
+        documentationComment: /// Comment 1.\n/// Comment 2.
+        codeOffset: 16
+        codeLength: 54
+        aliasedType: dynamic Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: dynamic
+      functionTypeAliasBased HasAnnotation @90
+        metadata
+          Annotation
+            arguments: ArgumentList
+              leftParenthesis: ( @0
+              rightParenthesis: ) @0
+            atSign.offset: 0
+            element: dart:core::@class::Object::@constructor::•
+            name: SimpleIdentifier
+              staticElement: dart:core::@class::Object
+              staticType: null
+              token: Object @-1
+        codeOffset: 72
+        codeLength: 34
+        aliasedType: dynamic Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: dynamic
+      functionTypeAliasBased AnnotationThenComment @156
+        documentationComment: /// Comment 1.\n/// Comment 2.
+        metadata
+          Annotation
+            arguments: ArgumentList
+              leftParenthesis: ( @0
+              rightParenthesis: ) @0
+            atSign.offset: 0
+            element: dart:core::@class::Object::@constructor::•
+            name: SimpleIdentifier
+              staticElement: dart:core::@class::Object
+              staticType: null
+              token: Object @-1
+        codeOffset: 108
+        codeLength: 72
+        aliasedType: dynamic Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: dynamic
+      functionTypeAliasBased CommentThenAnnotation @230
+        documentationComment: /// Comment 1.\n/// Comment 2.
+        metadata
+          Annotation
+            arguments: ArgumentList
+              leftParenthesis: ( @0
+              rightParenthesis: ) @0
+            atSign.offset: 0
+            element: dart:core::@class::Object::@constructor::•
+            name: SimpleIdentifier
+              staticElement: dart:core::@class::Object
+              staticType: null
+              token: Object @-1
+        codeOffset: 182
+        codeLength: 72
+        aliasedType: dynamic Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: dynamic
+      functionTypeAliasBased CommentAroundAnnotation @304
+        documentationComment: /// Comment 2.
+        metadata
+          Annotation
+            arguments: ArgumentList
+              leftParenthesis: ( @0
+              rightParenthesis: ) @0
+            atSign.offset: 0
+            element: dart:core::@class::Object::@constructor::•
+            name: SimpleIdentifier
+              staticElement: dart:core::@class::Object
+              staticType: null
+              token: Object @-1
+        codeOffset: 271
+        codeLength: 59
+        aliasedType: dynamic Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: dynamic
 ''',
-        withCodeRanges: true,
-        withConstElements: false);
+        withCodeRanges: true);
   }
 
   test_codeRange_genericTypeAlias() async {
@@ -2729,26 +5327,95 @@
     checkElementText(
         library,
         r'''
-typedef Raw/*codeOffset=0, codeLength=25*/ = dynamic Function();
-/// Comment 1.
-/// Comment 2.
-typedef HasDocComment/*codeOffset=27, codeLength=65*/ = dynamic Function();
-@Object()
-typedef HasAnnotation/*codeOffset=94, codeLength=45*/ = dynamic Function();
-/// Comment 1.
-/// Comment 2.
-@Object()
-typedef AnnotationThenComment/*codeOffset=141, codeLength=83*/ = dynamic Function();
-/// Comment 1.
-/// Comment 2.
-@Object()
-typedef CommentThenAnnotation/*codeOffset=226, codeLength=83*/ = dynamic Function();
-/// Comment 2.
-@Object()
-typedef CommentAroundAnnotation/*codeOffset=326, codeLength=70*/ = dynamic Function();
+library
+  definingUnit
+    typeAliases
+      Raw @8
+        codeOffset: 0
+        codeLength: 25
+        aliasedType: dynamic Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: dynamic
+      HasDocComment @65
+        documentationComment: /// Comment 1.\n/// Comment 2.
+        codeOffset: 27
+        codeLength: 65
+        aliasedType: dynamic Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: dynamic
+      HasAnnotation @112
+        metadata
+          Annotation
+            arguments: ArgumentList
+              leftParenthesis: ( @0
+              rightParenthesis: ) @0
+            atSign.offset: 0
+            element: dart:core::@class::Object::@constructor::•
+            name: SimpleIdentifier
+              staticElement: dart:core::@class::Object
+              staticType: null
+              token: Object @-1
+        codeOffset: 94
+        codeLength: 45
+        aliasedType: dynamic Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: dynamic
+      AnnotationThenComment @189
+        documentationComment: /// Comment 1.\n/// Comment 2.
+        metadata
+          Annotation
+            arguments: ArgumentList
+              leftParenthesis: ( @0
+              rightParenthesis: ) @0
+            atSign.offset: 0
+            element: dart:core::@class::Object::@constructor::•
+            name: SimpleIdentifier
+              staticElement: dart:core::@class::Object
+              staticType: null
+              token: Object @-1
+        codeOffset: 141
+        codeLength: 83
+        aliasedType: dynamic Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: dynamic
+      CommentThenAnnotation @274
+        documentationComment: /// Comment 1.\n/// Comment 2.
+        metadata
+          Annotation
+            arguments: ArgumentList
+              leftParenthesis: ( @0
+              rightParenthesis: ) @0
+            atSign.offset: 0
+            element: dart:core::@class::Object::@constructor::•
+            name: SimpleIdentifier
+              staticElement: dart:core::@class::Object
+              staticType: null
+              token: Object @-1
+        codeOffset: 226
+        codeLength: 83
+        aliasedType: dynamic Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: dynamic
+      CommentAroundAnnotation @359
+        documentationComment: /// Comment 2.
+        metadata
+          Annotation
+            arguments: ArgumentList
+              leftParenthesis: ( @0
+              rightParenthesis: ) @0
+            atSign.offset: 0
+            element: dart:core::@class::Object::@constructor::•
+            name: SimpleIdentifier
+              staticElement: dart:core::@class::Object
+              staticType: null
+              token: Object @-1
+        codeOffset: 326
+        codeLength: 70
+        aliasedType: dynamic Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: dynamic
 ''',
-        withCodeRanges: true,
-        withConstElements: false);
+        withCodeRanges: true);
   }
 
   test_codeRange_method() async {
@@ -2782,56 +5449,159 @@
     checkElementText(
         library,
         r'''
-class C/*codeOffset=0, codeLength=372*/ {
-  void raw/*codeOffset=12, codeLength=13*/() {}
-  /// Comment 1.
-  /// Comment 2.
-  void hasDocComment/*codeOffset=29, codeLength=57*/() {}
-  @Object()
-  void hasAnnotation/*codeOffset=90, codeLength=35*/() {}
-  /// Comment 1.
-  /// Comment 2.
-  @Object()
-  void annotationThenComment/*codeOffset=129, codeLength=77*/() {}
-  /// Comment 1.
-  /// Comment 2.
-  @Object()
-  void commentThenAnnotation/*codeOffset=210, codeLength=77*/() {}
-  /// Comment 2.
-  @Object()
-  void commentAroundAnnotation/*codeOffset=308, codeLength=62*/() {}
-}
+library
+  definingUnit
+    classes
+      class C @6
+        codeOffset: 0
+        codeLength: 372
+        constructors
+          synthetic @-1
+        methods
+          raw @17
+            codeOffset: 12
+            codeLength: 13
+            returnType: void
+          hasDocComment @68
+            documentationComment: /// Comment 1.\n/// Comment 2.
+            codeOffset: 29
+            codeLength: 57
+            returnType: void
+          hasAnnotation @107
+            metadata
+              Annotation
+                arguments: ArgumentList
+                  leftParenthesis: ( @97
+                  rightParenthesis: ) @98
+                atSign.offset: 90
+                element: dart:core::@class::Object::@constructor::•
+                name: SimpleIdentifier
+                  staticElement: dart:core::@class::Object
+                  staticType: null
+                  token: Object @91
+            codeOffset: 90
+            codeLength: 35
+            returnType: void
+          annotationThenComment @180
+            documentationComment: /// Comment 1.\n/// Comment 2.
+            metadata
+              Annotation
+                arguments: ArgumentList
+                  leftParenthesis: ( @136
+                  rightParenthesis: ) @137
+                atSign.offset: 129
+                element: dart:core::@class::Object::@constructor::•
+                name: SimpleIdentifier
+                  staticElement: dart:core::@class::Object
+                  staticType: null
+                  token: Object @130
+            codeOffset: 129
+            codeLength: 77
+            returnType: void
+          commentThenAnnotation @261
+            documentationComment: /// Comment 1.\n/// Comment 2.
+            metadata
+              Annotation
+                arguments: ArgumentList
+                  leftParenthesis: ( @251
+                  rightParenthesis: ) @252
+                atSign.offset: 244
+                element: dart:core::@class::Object::@constructor::•
+                name: SimpleIdentifier
+                  staticElement: dart:core::@class::Object
+                  staticType: null
+                  token: Object @245
+            codeOffset: 210
+            codeLength: 77
+            returnType: void
+          commentAroundAnnotation @342
+            documentationComment: /// Comment 2.
+            metadata
+              Annotation
+                arguments: ArgumentList
+                  leftParenthesis: ( @315
+                  rightParenthesis: ) @316
+                atSign.offset: 308
+                element: dart:core::@class::Object::@constructor::•
+                name: SimpleIdentifier
+                  staticElement: dart:core::@class::Object
+                  staticType: null
+                  token: Object @309
+            codeOffset: 308
+            codeLength: 62
+            returnType: void
 ''',
-        withCodeRanges: true,
-        withConstElements: false);
+        withCodeRanges: true);
   }
 
   test_codeRange_parameter() async {
     var library = await checkLibrary('''
 main({int a = 1, int b, int c = 2}) {}
 ''');
-    checkElementText(
-        library,
-        'dynamic main/*codeOffset=0, codeLength=38*/('
-        '{int a/*codeOffset=6, codeLength=9*/: 1}, '
-        '{int b/*codeOffset=17, codeLength=5*/}, '
-        '{int c/*codeOffset=24, codeLength=9*/: 2}) {}\n',
-        withCodeRanges: true,
-        withConstElements: false);
+    checkElementText(library, r'''
+library
+  definingUnit
+    functions
+      main @0
+        parameters
+          optionalNamed a @10
+            type: int
+            constantInitializer
+              IntegerLiteral
+                literal: 1 @0
+                staticType: int
+          optionalNamed b @21
+            type: int
+          optionalNamed c @28
+            type: int
+            constantInitializer
+              IntegerLiteral
+                literal: 2 @0
+                staticType: int
+        returnType: dynamic
+''');
   }
 
   test_codeRange_parameter_annotations() async {
     var library = await checkLibrary('''
 main(@Object() int a, int b, @Object() int c) {}
 ''');
-    checkElementText(
-        library,
-        'dynamic main/*codeOffset=0, codeLength=48*/('
-        '@Object() int a/*codeOffset=5, codeLength=15*/, '
-        'int b/*codeOffset=22, codeLength=5*/, '
-        '@Object() int c/*codeOffset=29, codeLength=15*/) {}\n',
-        withCodeRanges: true,
-        withConstElements: false);
+    checkElementText(library, r'''
+library
+  definingUnit
+    functions
+      main @0
+        parameters
+          requiredPositional a @19
+            type: int
+            metadata
+              Annotation
+                arguments: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                atSign.offset: 0
+                element: dart:core::@class::Object::@constructor::•
+                name: SimpleIdentifier
+                  staticElement: dart:core::@class::Object
+                  staticType: null
+                  token: Object @-1
+          requiredPositional b @26
+            type: int
+          requiredPositional c @43
+            type: int
+            metadata
+              Annotation
+                arguments: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                atSign.offset: 0
+                element: dart:core::@class::Object::@constructor::•
+                name: SimpleIdentifier
+                  staticElement: dart:core::@class::Object
+                  staticType: null
+                  token: Object @-1
+        returnType: dynamic
+''');
   }
 
   test_codeRange_topLevelVariable() async {
@@ -2845,14 +5615,67 @@
     checkElementText(
         library,
         r'''
-int withInit/*codeOffset=0, codeLength=24*/;
-int withoutInit/*codeOffset=27, codeLength=15*/;
-int multiWithInit/*codeOffset=45, codeLength=21*/;
-int multiWithoutInit/*codeOffset=68, codeLength=16*/;
-int multiWithInit2/*codeOffset=86, codeLength=18*/;
+library
+  definingUnit
+    topLevelVariables
+      static withInit @4
+        codeOffset: 0
+        codeLength: 24
+        type: int
+      static withoutInit @31
+        codeOffset: 27
+        codeLength: 15
+        type: int
+      static multiWithInit @49
+        codeOffset: 45
+        codeLength: 21
+        type: int
+      static multiWithoutInit @68
+        codeOffset: 68
+        codeLength: 16
+        type: int
+      static multiWithInit2 @86
+        codeOffset: 86
+        codeLength: 18
+        type: int
+    accessors
+      synthetic static get withInit @4
+        returnType: int
+      synthetic static set withInit @4
+        parameters
+          requiredPositional _withInit @4
+            type: int
+        returnType: void
+      synthetic static get withoutInit @31
+        returnType: int
+      synthetic static set withoutInit @31
+        parameters
+          requiredPositional _withoutInit @31
+            type: int
+        returnType: void
+      synthetic static get multiWithInit @49
+        returnType: int
+      synthetic static set multiWithInit @49
+        parameters
+          requiredPositional _multiWithInit @49
+            type: int
+        returnType: void
+      synthetic static get multiWithoutInit @68
+        returnType: int
+      synthetic static set multiWithoutInit @68
+        parameters
+          requiredPositional _multiWithoutInit @68
+            type: int
+        returnType: void
+      synthetic static get multiWithInit2 @86
+        returnType: int
+      synthetic static set multiWithInit2 @86
+        parameters
+          requiredPositional _multiWithInit2 @86
+            type: int
+        returnType: void
 ''',
-        withCodeRanges: true,
-        withConstElements: false);
+        withCodeRanges: true);
   }
 
   test_codeRange_topLevelVariable_annotations() async {
@@ -2882,41 +5705,218 @@
     checkElementText(
         library,
         r'''
-/// Comment 1.
-/// Comment 2.
-int hasDocComment/*codeOffset=0, codeLength=47*/;
-/// Comment 1.
-/// Comment 2.
-int hasDocComment2/*codeOffset=49, codeLength=14*/;
-@Object()
-int hasAnnotation/*codeOffset=66, codeLength=27*/;
-@Object()
-int hasAnnotation2/*codeOffset=95, codeLength=14*/;
-/// Comment 1.
-/// Comment 2.
-@Object()
-int annotationThenComment/*codeOffset=112, codeLength=65*/;
-/// Comment 1.
-/// Comment 2.
-@Object()
-int annotationThenComment2/*codeOffset=179, codeLength=22*/;
-/// Comment 1.
-/// Comment 2.
-@Object()
-int commentThenAnnotation/*codeOffset=204, codeLength=65*/;
-/// Comment 1.
-/// Comment 2.
-@Object()
-int commentThenAnnotation2/*codeOffset=271, codeLength=22*/;
-/// Comment 2.
-@Object()
-int commentAroundAnnotation/*codeOffset=311, codeLength=52*/;
-/// Comment 2.
-@Object()
-int commentAroundAnnotation2/*codeOffset=365, codeLength=24*/;
+library
+  definingUnit
+    topLevelVariables
+      static hasDocComment @34
+        documentationComment: /// Comment 1.\n/// Comment 2.
+        codeOffset: 0
+        codeLength: 47
+        type: int
+      static hasDocComment2 @49
+        documentationComment: /// Comment 1.\n/// Comment 2.
+        codeOffset: 49
+        codeLength: 14
+        type: int
+      static hasAnnotation @80
+        metadata
+          Annotation
+            arguments: ArgumentList
+              leftParenthesis: ( @73
+              rightParenthesis: ) @74
+            atSign.offset: 66
+            element: dart:core::@class::Object::@constructor::•
+            name: SimpleIdentifier
+              staticElement: dart:core::@class::Object
+              staticType: null
+              token: Object @67
+        codeOffset: 66
+        codeLength: 27
+        type: int
+      static hasAnnotation2 @95
+        metadata
+          Annotation
+            arguments: ArgumentList
+              leftParenthesis: ( @73
+              rightParenthesis: ) @74
+            atSign.offset: 66
+            element: dart:core::@class::Object::@constructor::•
+            name: SimpleIdentifier
+              staticElement: dart:core::@class::Object
+              staticType: null
+              token: Object @67
+        codeOffset: 95
+        codeLength: 14
+        type: int
+      static annotationThenComment @156
+        documentationComment: /// Comment 1.\n/// Comment 2.
+        metadata
+          Annotation
+            arguments: ArgumentList
+              leftParenthesis: ( @119
+              rightParenthesis: ) @120
+            atSign.offset: 112
+            element: dart:core::@class::Object::@constructor::•
+            name: SimpleIdentifier
+              staticElement: dart:core::@class::Object
+              staticType: null
+              token: Object @113
+        codeOffset: 112
+        codeLength: 65
+        type: int
+      static annotationThenComment2 @179
+        documentationComment: /// Comment 1.\n/// Comment 2.
+        metadata
+          Annotation
+            arguments: ArgumentList
+              leftParenthesis: ( @119
+              rightParenthesis: ) @120
+            atSign.offset: 112
+            element: dart:core::@class::Object::@constructor::•
+            name: SimpleIdentifier
+              staticElement: dart:core::@class::Object
+              staticType: null
+              token: Object @113
+        codeOffset: 179
+        codeLength: 22
+        type: int
+      static commentThenAnnotation @248
+        documentationComment: /// Comment 1.\n/// Comment 2.
+        metadata
+          Annotation
+            arguments: ArgumentList
+              leftParenthesis: ( @241
+              rightParenthesis: ) @242
+            atSign.offset: 234
+            element: dart:core::@class::Object::@constructor::•
+            name: SimpleIdentifier
+              staticElement: dart:core::@class::Object
+              staticType: null
+              token: Object @235
+        codeOffset: 204
+        codeLength: 65
+        type: int
+      static commentThenAnnotation2 @271
+        documentationComment: /// Comment 1.\n/// Comment 2.
+        metadata
+          Annotation
+            arguments: ArgumentList
+              leftParenthesis: ( @241
+              rightParenthesis: ) @242
+            atSign.offset: 234
+            element: dart:core::@class::Object::@constructor::•
+            name: SimpleIdentifier
+              staticElement: dart:core::@class::Object
+              staticType: null
+              token: Object @235
+        codeOffset: 271
+        codeLength: 22
+        type: int
+      static commentAroundAnnotation @340
+        documentationComment: /// Comment 2.
+        metadata
+          Annotation
+            arguments: ArgumentList
+              leftParenthesis: ( @318
+              rightParenthesis: ) @319
+            atSign.offset: 311
+            element: dart:core::@class::Object::@constructor::•
+            name: SimpleIdentifier
+              staticElement: dart:core::@class::Object
+              staticType: null
+              token: Object @312
+        codeOffset: 311
+        codeLength: 52
+        type: int
+      static commentAroundAnnotation2 @365
+        documentationComment: /// Comment 2.
+        metadata
+          Annotation
+            arguments: ArgumentList
+              leftParenthesis: ( @318
+              rightParenthesis: ) @319
+            atSign.offset: 311
+            element: dart:core::@class::Object::@constructor::•
+            name: SimpleIdentifier
+              staticElement: dart:core::@class::Object
+              staticType: null
+              token: Object @312
+        codeOffset: 365
+        codeLength: 24
+        type: int
+    accessors
+      synthetic static get hasDocComment @34
+        returnType: int
+      synthetic static set hasDocComment @34
+        parameters
+          requiredPositional _hasDocComment @34
+            type: int
+        returnType: void
+      synthetic static get hasDocComment2 @49
+        returnType: int
+      synthetic static set hasDocComment2 @49
+        parameters
+          requiredPositional _hasDocComment2 @49
+            type: int
+        returnType: void
+      synthetic static get hasAnnotation @80
+        returnType: int
+      synthetic static set hasAnnotation @80
+        parameters
+          requiredPositional _hasAnnotation @80
+            type: int
+        returnType: void
+      synthetic static get hasAnnotation2 @95
+        returnType: int
+      synthetic static set hasAnnotation2 @95
+        parameters
+          requiredPositional _hasAnnotation2 @95
+            type: int
+        returnType: void
+      synthetic static get annotationThenComment @156
+        returnType: int
+      synthetic static set annotationThenComment @156
+        parameters
+          requiredPositional _annotationThenComment @156
+            type: int
+        returnType: void
+      synthetic static get annotationThenComment2 @179
+        returnType: int
+      synthetic static set annotationThenComment2 @179
+        parameters
+          requiredPositional _annotationThenComment2 @179
+            type: int
+        returnType: void
+      synthetic static get commentThenAnnotation @248
+        returnType: int
+      synthetic static set commentThenAnnotation @248
+        parameters
+          requiredPositional _commentThenAnnotation @248
+            type: int
+        returnType: void
+      synthetic static get commentThenAnnotation2 @271
+        returnType: int
+      synthetic static set commentThenAnnotation2 @271
+        parameters
+          requiredPositional _commentThenAnnotation2 @271
+            type: int
+        returnType: void
+      synthetic static get commentAroundAnnotation @340
+        returnType: int
+      synthetic static set commentAroundAnnotation @340
+        parameters
+          requiredPositional _commentAroundAnnotation @340
+            type: int
+        returnType: void
+      synthetic static get commentAroundAnnotation2 @365
+        returnType: int
+      synthetic static set commentAroundAnnotation2 @365
+        parameters
+          requiredPositional _commentAroundAnnotation2 @365
+            type: int
+        returnType: void
 ''',
-        withCodeRanges: true,
-        withConstElements: false);
+        withCodeRanges: true);
   }
 
   test_codeRange_type_parameter() async {
@@ -2927,12 +5927,31 @@
     checkElementText(
         library,
         r'''
-class A/*codeOffset=0, codeLength=13*/<T/*codeOffset=8, codeLength=1*/> {
-}
-void f/*codeOffset=14, codeLength=24*/<U/*codeOffset=21, codeLength=13*/ extends num>() {}
+library
+  definingUnit
+    classes
+      class A @6
+        codeOffset: 0
+        codeLength: 13
+        typeParameters
+          covariant T @8
+            codeOffset: 8
+            codeLength: 1
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+    functions
+      f @19
+        codeOffset: 14
+        codeLength: 24
+        typeParameters
+          covariant U @21
+            codeOffset: 21
+            codeLength: 13
+            bound: num
+        returnType: void
 ''',
-        withCodeRanges: true,
-        withConstElements: false);
+        withCodeRanges: true);
   }
 
   test_compilationUnit_nnbd_disabled_via_dart_directive() async {
@@ -2958,11 +5977,37 @@
 const num a = 0;
 const b = a as int;
 ''');
-    checkElementText(library, '''
-const num a = 0;
-const int b =
-        a/*location: test.dart;a?*/ as
-        int/*location: dart:core;int*/;
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const a @10
+        type: num
+        constantInitializer
+          IntegerLiteral
+            literal: 0 @14
+            staticType: int
+      static const b @23
+        type: int
+        constantInitializer
+          AsExpression
+            asOperator: as @0
+            expression: SimpleIdentifier
+              staticElement: self::@getter::a
+              staticType: num
+              token: a @27
+            staticType: int
+            type: TypeName
+              name: SimpleIdentifier
+                staticElement: dart:core::@class::int
+                staticType: null
+                token: int @32
+              type: int
+    accessors
+      synthetic static get a @10
+        returnType: num
+      synthetic static get b @23
+        returnType: int
 ''');
   }
 
@@ -2971,72 +6016,85 @@
 const a = 0;
 const b = (a += 1);
 ''');
-    checkElementText(
-      library,
-      r'''
-const int a;
-  constantInitializer
-    IntegerLiteral
-      literal: 0
-      staticType: int
-const int b;
-  constantInitializer
-    ParenthesizedExpression
-      expression: AssignmentExpression
-        leftHandSide: SimpleIdentifier
-          staticElement: <null>
-          staticType: null
-          token: a
-        operator: +=
-        readElement: self::@getter::a
-        readType: int
-        rightHandSide: IntegerLiteral
-          literal: 1
-          staticType: int
-        staticElement: dart:core::@class::num::@method::+
-        staticType: int
-        writeElement: self::@getter::a
-        writeType: dynamic
-      staticType: int
-''',
-      withResolvedAst: true,
-    );
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const a @6
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 0 @10
+            staticType: int
+      static const b @19
+        type: int
+        constantInitializer
+          ParenthesizedExpression
+            expression: AssignmentExpression
+              leftHandSide: SimpleIdentifier
+                staticElement: <null>
+                staticType: null
+                token: a @24
+              operator: += @0
+              readElement: self::@getter::a
+              readType: int
+              rightHandSide: IntegerLiteral
+                literal: 1 @29
+                staticType: int
+              staticElement: dart:core::@class::num::@method::+
+              staticType: int
+              writeElement: self::@getter::a
+              writeType: dynamic
+            leftParenthesis: ( @23
+            rightParenthesis: ) @30
+            staticType: int
+    accessors
+      synthetic static get a @6
+        returnType: int
+      synthetic static get b @19
+        returnType: int
+''');
   }
 
   test_const_cascadeExpression() async {
     var library = await checkLibrary(r'''
 const a = 0..isEven..abs();
 ''');
-    checkElementText(
-      library,
-      r'''
-const int a;
-  constantInitializer
-    CascadeExpression
-      cascadeSections
-        PropertyAccess
-          operator: ..
-          propertyName: SimpleIdentifier
-            staticElement: dart:core::@class::int::@getter::isEven
-            staticType: bool
-            token: isEven
-          staticType: bool
-        MethodInvocation
-          argumentList: ArgumentList
-          methodName: SimpleIdentifier
-            staticElement: dart:core::@class::int::@method::abs
-            staticType: int Function()
-            token: abs
-          operator: ..
-          staticInvokeType: int Function()
-          staticType: int
-      staticType: int
-      target: IntegerLiteral
-        literal: 0
-        staticType: int
-''',
-      withResolvedAst: true,
-    );
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const a @6
+        type: int
+        constantInitializer
+          CascadeExpression
+            cascadeSections
+              PropertyAccess
+                operator: .. @0
+                propertyName: SimpleIdentifier
+                  staticElement: dart:core::@class::int::@getter::isEven
+                  staticType: bool
+                  token: isEven @13
+                staticType: bool
+              MethodInvocation
+                argumentList: ArgumentList
+                  leftParenthesis: ( @24
+                  rightParenthesis: ) @25
+                methodName: SimpleIdentifier
+                  staticElement: dart:core::@class::int::@method::abs
+                  staticType: int Function()
+                  token: abs @21
+                operator: .. @0
+                staticInvokeType: int Function()
+                staticType: int
+            staticType: int
+            target: IntegerLiteral
+              literal: 0 @10
+              staticType: int
+    accessors
+      synthetic static get a @6
+        returnType: int
+''');
   }
 
   test_const_classField() async {
@@ -3047,15 +6105,56 @@
 }
 ''');
     checkElementText(library, r'''
-class C {
-  static const int f1 = 1;
-  static const int f2 =
-        C/*location: test.dart;C*/.
-        f1/*location: test.dart;C;f1?*/;
-  static const int f3 =
-        C/*location: test.dart;C*/.
-        f2/*location: test.dart;C;f2?*/;
-}
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          static const f1 @29
+            type: int
+            constantInitializer
+              IntegerLiteral
+                literal: 1 @34
+                staticType: int
+          static const f2 @56
+            type: int
+            constantInitializer
+              PrefixedIdentifier
+                identifier: SimpleIdentifier
+                  staticElement: self::@class::C::@getter::f1
+                  staticType: int
+                  token: f1 @63
+                period: . @0
+                prefix: SimpleIdentifier
+                  staticElement: self::@class::C
+                  staticType: null
+                  token: C @61
+                staticElement: self::@class::C::@getter::f1
+                staticType: int
+          static const f3 @67
+            type: int
+            constantInitializer
+              PrefixedIdentifier
+                identifier: SimpleIdentifier
+                  staticElement: self::@class::C::@getter::f2
+                  staticType: int
+                  token: f2 @74
+                period: . @0
+                prefix: SimpleIdentifier
+                  staticElement: self::@class::C
+                  staticType: null
+                  token: C @72
+                staticElement: self::@class::C::@getter::f2
+                staticType: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic static get f1 @29
+            returnType: int
+          synthetic static get f2 @56
+            returnType: int
+          synthetic static get f3 @67
+            returnType: int
 ''');
   }
 
@@ -3069,17 +6168,89 @@
 const Object x = const C(0);
 const Object y = const C.named(0);
 ''');
-    checkElementText(library, '''
-class C<T> {
-  final T t;
-  const C(final T this.t);
-  const C.named(final T this.t);
-}
-const Object x = const
-        C/*location: test.dart;C*/(0);
-const Object y = const
-        C/*location: test.dart;C*/.
-        named/*location: test.dart;C;named*/(0);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        fields
+          final t @23
+            type: T
+        constructors
+          const @34
+            parameters
+              requiredPositional final this.t @41
+                type: T
+          const named @55
+            periodOffset: 54
+            nameEnd: 60
+            parameters
+              requiredPositional final this.t @66
+                type: T
+        accessors
+          synthetic get t @23
+            returnType: T
+    topLevelVariables
+      static const x @85
+        type: Object
+        constantInitializer
+          InstanceCreationExpression
+            argumentList: ArgumentList
+              arguments
+                IntegerLiteral
+                  literal: 0 @97
+                  staticType: int
+              leftParenthesis: ( @96
+              rightParenthesis: ) @98
+            constructorName: ConstructorName
+              staticElement: ConstructorMember
+                base: self::@class::C::@constructor::•
+                substitution: {T: int}
+              type: TypeName
+                name: SimpleIdentifier
+                  staticElement: self::@class::C
+                  staticType: null
+                  token: C @95
+                type: C<int>
+            keyword: const @89
+            staticType: C<int>
+      static const y @114
+        type: Object
+        constantInitializer
+          InstanceCreationExpression
+            argumentList: ArgumentList
+              arguments
+                IntegerLiteral
+                  literal: 0 @132
+                  staticType: int
+              leftParenthesis: ( @131
+              rightParenthesis: ) @133
+            constructorName: ConstructorName
+              name: SimpleIdentifier
+                staticElement: ConstructorMember
+                  base: self::@class::C::@constructor::named
+                  substitution: {T: dynamic}
+                staticType: null
+                token: named @126
+              staticElement: ConstructorMember
+                base: self::@class::C::@constructor::named
+                substitution: {T: int}
+              type: TypeName
+                name: SimpleIdentifier
+                  staticElement: self::@class::C
+                  staticType: null
+                  token: C @124
+                type: C<int>
+            keyword: const @118
+            staticType: C<int>
+    accessors
+      synthetic static get x @85
+        returnType: Object
+      synthetic static get y @114
+        returnType: Object
 ''');
     var x = library.definingCompilationUnit.topLevelVariables[0]
         as TopLevelVariableElementImpl;
@@ -3104,10 +6275,22 @@
 }
 ''');
     checkElementText(library, r'''
-class C {
-  final int f = 42;
-  const C();
-}
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          final f @22
+            type: int
+            constantInitializer
+              IntegerLiteral
+                literal: 42 @26
+                staticType: int
+        constructors
+          const @38
+        accessors
+          synthetic get f @22
+            returnType: int
 ''');
   }
 
@@ -3117,40 +6300,53 @@
 const b = 0;
 const c = a[b];
 ''');
-    checkElementText(
-      library,
-      r'''
-const List<int> a;
-  constantInitializer
-    ListLiteral
-      elements
-        IntegerLiteral
-          literal: 0
-          staticType: int
-      staticType: List<int>
-const int b;
-  constantInitializer
-    IntegerLiteral
-      literal: 0
-      staticType: int
-const int c;
-  constantInitializer
-    IndexExpression
-      index: SimpleIdentifier
-        staticElement: self::@getter::b
-        staticType: int
-        token: b
-      staticElement: MethodMember
-        base: dart:core::@class::List::@method::[]
-        substitution: {E: int}
-      staticType: int
-      target: SimpleIdentifier
-        staticElement: self::@getter::a
-        staticType: List<int>
-        token: a
-''',
-      withResolvedAst: true,
-    );
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const a @6
+        type: List<int>
+        constantInitializer
+          ListLiteral
+            elements
+              IntegerLiteral
+                literal: 0 @11
+                staticType: int
+            leftBracket: [ @0
+            rightBracket: ] @0
+            staticType: List<int>
+      static const b @21
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 0 @25
+            staticType: int
+      static const c @34
+        type: int
+        constantInitializer
+          IndexExpression
+            index: SimpleIdentifier
+              staticElement: self::@getter::b
+              staticType: int
+              token: b @40
+            leftBracket: [ @39
+            rightBracket: ] @41
+            staticElement: MethodMember
+              base: dart:core::@class::List::@method::[]
+              substitution: {E: int}
+            staticType: int
+            target: SimpleIdentifier
+              staticElement: self::@getter::a
+              staticType: List<int>
+              token: a @38
+    accessors
+      synthetic static get a @6
+        returnType: List<int>
+      synthetic static get b @21
+        returnType: int
+      synthetic static get c @34
+        returnType: int
+''');
   }
 
   test_const_inference_downward_list() async {
@@ -3172,24 +6368,83 @@
   P2<int>(),
 ];
 ''');
-    checkElementText(
-        library,
-        '''
-class P<T> {
-  const P();
-}
-class P1<T> extends P<T> {
-  const P1();
-}
-class P2<T> extends P<T> {
-  const P2();
-}
-const List<P<dynamic>> values = /*typeArgs=P<dynamic>*/[/*typeArgs=dynamic*/
-        P1/*location: test.dart;P1*/(),
-        P2/*location: test.dart;P2*/<
-        int/*location: dart:core;int*/>()];
-''',
-        withTypes: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class P @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        constructors
+          const @21
+      class P1 @35
+        typeParameters
+          covariant T @38
+            defaultType: dynamic
+        supertype: P<T>
+        constructors
+          const @64
+      class P2 @79
+        typeParameters
+          covariant T @82
+            defaultType: dynamic
+        supertype: P<T>
+        constructors
+          const @108
+    topLevelVariables
+      static const values @131
+        type: List<P<dynamic>>
+        constantInitializer
+          ListLiteral
+            elements
+              InstanceCreationExpression
+                argumentList: ArgumentList
+                  leftParenthesis: ( @146
+                  rightParenthesis: ) @147
+                constructorName: ConstructorName
+                  staticElement: ConstructorMember
+                    base: self::@class::P1::@constructor::•
+                    substitution: {T: dynamic}
+                  type: TypeName
+                    name: SimpleIdentifier
+                      staticElement: self::@class::P1
+                      staticType: null
+                      token: P1 @144
+                    type: P1<dynamic>
+                staticType: P1<dynamic>
+              InstanceCreationExpression
+                argumentList: ArgumentList
+                  leftParenthesis: ( @159
+                  rightParenthesis: ) @160
+                constructorName: ConstructorName
+                  staticElement: ConstructorMember
+                    base: self::@class::P2::@constructor::•
+                    substitution: {T: int}
+                  type: TypeName
+                    name: SimpleIdentifier
+                      staticElement: self::@class::P2
+                      staticType: null
+                      token: P2 @152
+                    type: P2<int>
+                    typeArguments: TypeArgumentList
+                      arguments
+                        TypeName
+                          name: SimpleIdentifier
+                            staticElement: dart:core::@class::int
+                            staticType: null
+                            token: int @155
+                          type: int
+                      leftBracket: < @0
+                      rightBracket: > @0
+                staticType: P2<int>
+            leftBracket: [ @0
+            rightBracket: ] @0
+            staticType: List<P<dynamic>>
+    accessors
+      synthetic static get values @131
+        returnType: List<P<dynamic>>
+''');
   }
 
   test_const_invalid_field_const() async {
@@ -3200,11 +6455,40 @@
 int foo() => 42;
 ''', allowErrors: true);
     checkElementText(library, r'''
-class C {
-  static const int f = 1 +
-        foo/*location: test.dart;foo*/();
-}
-int foo() {}
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          static const f @25
+            type: int
+            constantInitializer
+              BinaryExpression
+                leftOperand: IntegerLiteral
+                  literal: 1 @29
+                  staticType: int
+                operator: + @0
+                rightOperand: MethodInvocation
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @36
+                    rightParenthesis: ) @37
+                  methodName: SimpleIdentifier
+                    staticElement: self::@function::foo
+                    staticType: int Function()
+                    token: foo @33
+                  staticInvokeType: int Function()
+                  staticType: int
+                staticElement: dart:core::@class::num::@method::+
+                staticInvokeType: null
+                staticType: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic static get f @25
+            returnType: int
+    functions
+      foo @46
+        returnType: int
 ''');
   }
 
@@ -3216,10 +6500,21 @@
 int foo() => 42;
 ''', allowErrors: true);
     checkElementText(library, r'''
-class C {
-  final int f;
-}
-int foo() {}
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          final f @18
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get f @18
+            returnType: int
+    functions
+      foo @39
+        returnType: int
 ''');
   }
 
@@ -3239,9 +6534,36 @@
 int foo() => 42;
 ''', allowErrors: true);
     checkElementText(library, r'''
-const int v = 1 +
-        foo/*location: test.dart;foo*/();
-int foo() {}
+library
+  definingUnit
+    topLevelVariables
+      static const v @6
+        type: int
+        constantInitializer
+          BinaryExpression
+            leftOperand: IntegerLiteral
+              literal: 1 @10
+              staticType: int
+            operator: + @0
+            rightOperand: MethodInvocation
+              argumentList: ArgumentList
+                leftParenthesis: ( @17
+                rightParenthesis: ) @18
+              methodName: SimpleIdentifier
+                staticElement: self::@function::foo
+                staticType: int Function()
+                token: foo @14
+              staticInvokeType: int Function()
+              staticType: int
+            staticElement: dart:core::@class::num::@method::+
+            staticInvokeType: null
+            staticType: int
+    accessors
+      synthetic static get v @6
+        returnType: int
+    functions
+      foo @25
+        returnType: int
 ''');
   }
 
@@ -3251,9 +6573,35 @@
 const bool b = a + 5;
 ''', allowErrors: true);
     checkElementText(library, r'''
-const int a = 0;
-const bool b =
-        a/*location: test.dart;a?*/ + 5;
+library
+  definingUnit
+    topLevelVariables
+      static const a @10
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 0 @14
+            staticType: int
+      static const b @28
+        type: bool
+        constantInitializer
+          BinaryExpression
+            leftOperand: SimpleIdentifier
+              staticElement: self::@getter::a
+              staticType: int
+              token: a @32
+            operator: + @0
+            rightOperand: IntegerLiteral
+              literal: 5 @36
+              staticType: int
+            staticElement: dart:core::@class::num::@method::+
+            staticInvokeType: null
+            staticType: int
+    accessors
+      synthetic static get a @10
+        returnType: int
+      synthetic static get b @28
+        returnType: bool
 ''');
   }
 
@@ -3265,14 +6613,75 @@
 const V = const C<int, String>.named(1, '222');
 ''');
     checkElementText(library, r'''
-class C<K, V> {
-  const C.named(K k, V v);
-}
-const C<int, String> V = const
-        C/*location: test.dart;C*/<
-        int/*location: dart:core;int*/,
-        String/*location: dart:core;String*/>.
-        named/*location: test.dart;C;named*/(1, '222');
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          covariant K @8
+            defaultType: dynamic
+          covariant V @11
+            defaultType: dynamic
+        constructors
+          const named @26
+            periodOffset: 25
+            nameEnd: 31
+            parameters
+              requiredPositional k @34
+                type: K
+              requiredPositional v @39
+                type: V
+    topLevelVariables
+      static const V @51
+        type: C<int, String>
+        constantInitializer
+          InstanceCreationExpression
+            argumentList: ArgumentList
+              arguments
+                IntegerLiteral
+                  literal: 1 @82
+                  staticType: int
+                SimpleStringLiteral
+                  literal: '222' @85
+              leftParenthesis: ( @81
+              rightParenthesis: ) @90
+            constructorName: ConstructorName
+              name: SimpleIdentifier
+                staticElement: ConstructorMember
+                  base: self::@class::C::@constructor::named
+                  substitution: {K: int, V: String}
+                staticType: null
+                token: named @76
+              staticElement: ConstructorMember
+                base: self::@class::C::@constructor::named
+                substitution: {K: int, V: String}
+              type: TypeName
+                name: SimpleIdentifier
+                  staticElement: self::@class::C
+                  staticType: null
+                  token: C @61
+                type: C<int, String>
+                typeArguments: TypeArgumentList
+                  arguments
+                    TypeName
+                      name: SimpleIdentifier
+                        staticElement: dart:core::@class::int
+                        staticType: null
+                        token: int @63
+                      type: int
+                    TypeName
+                      name: SimpleIdentifier
+                        staticElement: dart:core::@class::String
+                        staticType: null
+                        token: String @68
+                      type: String
+                  leftBracket: < @0
+                  rightBracket: > @0
+            keyword: const @55
+            staticType: C<int, String>
+    accessors
+      synthetic static get V @51
+        returnType: C<int, String>
 ''');
   }
 
@@ -3287,12 +6696,61 @@
 const V = const C<int, String>.named(1, '222');
 ''');
     checkElementText(library, r'''
-import 'a.dart';
-const C<int, String> V = const
-        C/*location: a.dart;C*/<
-        int/*location: dart:core;int*/,
-        String/*location: dart:core;String*/>.
-        named/*location: a.dart;C;named*/(1, '222');
+library
+  imports
+    a.dart
+  definingUnit
+    topLevelVariables
+      static const V @23
+        type: C<int, String>
+        constantInitializer
+          InstanceCreationExpression
+            argumentList: ArgumentList
+              arguments
+                IntegerLiteral
+                  literal: 1 @54
+                  staticType: int
+                SimpleStringLiteral
+                  literal: '222' @57
+              leftParenthesis: ( @53
+              rightParenthesis: ) @62
+            constructorName: ConstructorName
+              name: SimpleIdentifier
+                staticElement: ConstructorMember
+                  base: a.dart::@class::C::@constructor::named
+                  substitution: {K: int, V: String}
+                staticType: null
+                token: named @48
+              staticElement: ConstructorMember
+                base: a.dart::@class::C::@constructor::named
+                substitution: {K: int, V: String}
+              type: TypeName
+                name: SimpleIdentifier
+                  staticElement: a.dart::@class::C
+                  staticType: null
+                  token: C @33
+                type: C<int, String>
+                typeArguments: TypeArgumentList
+                  arguments
+                    TypeName
+                      name: SimpleIdentifier
+                        staticElement: dart:core::@class::int
+                        staticType: null
+                        token: int @35
+                      type: int
+                    TypeName
+                      name: SimpleIdentifier
+                        staticElement: dart:core::@class::String
+                        staticType: null
+                        token: String @40
+                      type: String
+                  leftBracket: < @0
+                  rightBracket: > @0
+            keyword: const @27
+            staticType: C<int, String>
+    accessors
+      synthetic static get V @23
+        returnType: C<int, String>
 ''');
   }
 
@@ -3307,13 +6765,69 @@
 const V = const p.C<int, String>.named(1, '222');
 ''');
     checkElementText(library, r'''
-import 'a.dart' as p;
-const C<int, String> V = const
-        p/*location: test.dart;p*/.
-        C/*location: a.dart;C*/<
-        int/*location: dart:core;int*/,
-        String/*location: dart:core;String*/>.
-        named/*location: a.dart;C;named*/(1, '222');
+library
+  imports
+    a.dart as p @19
+  definingUnit
+    topLevelVariables
+      static const V @28
+        type: C<int, String>
+        constantInitializer
+          InstanceCreationExpression
+            argumentList: ArgumentList
+              arguments
+                IntegerLiteral
+                  literal: 1 @61
+                  staticType: int
+                SimpleStringLiteral
+                  literal: '222' @64
+              leftParenthesis: ( @60
+              rightParenthesis: ) @69
+            constructorName: ConstructorName
+              name: SimpleIdentifier
+                staticElement: ConstructorMember
+                  base: a.dart::@class::C::@constructor::named
+                  substitution: {K: int, V: String}
+                staticType: null
+                token: named @55
+              staticElement: ConstructorMember
+                base: a.dart::@class::C::@constructor::named
+                substitution: {K: int, V: String}
+              type: TypeName
+                name: PrefixedIdentifier
+                  identifier: SimpleIdentifier
+                    staticElement: a.dart::@class::C
+                    staticType: null
+                    token: C @40
+                  period: . @0
+                  prefix: SimpleIdentifier
+                    staticElement: self::@prefix::p
+                    staticType: null
+                    token: p @38
+                  staticElement: a.dart::@class::C
+                  staticType: null
+                type: C<int, String>
+                typeArguments: TypeArgumentList
+                  arguments
+                    TypeName
+                      name: SimpleIdentifier
+                        staticElement: dart:core::@class::int
+                        staticType: null
+                        token: int @42
+                      type: int
+                    TypeName
+                      name: SimpleIdentifier
+                        staticElement: dart:core::@class::String
+                        staticType: null
+                        token: String @47
+                      type: String
+                  leftBracket: < @0
+                  rightBracket: > @0
+            keyword: const @32
+            staticType: C<int, String>
+    accessors
+      synthetic static get V @28
+        returnType: C<int, String>
 ''');
   }
 
@@ -3325,11 +6839,40 @@
 const V = const C();
 ''');
     checkElementText(library, r'''
-class C<K, V> {
-  const C();
-}
-const C<dynamic, dynamic> V = const
-        C/*location: test.dart;C*/();
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          covariant K @8
+            defaultType: dynamic
+          covariant V @11
+            defaultType: dynamic
+        constructors
+          const @24
+    topLevelVariables
+      static const V @37
+        type: C<dynamic, dynamic>
+        constantInitializer
+          InstanceCreationExpression
+            argumentList: ArgumentList
+              leftParenthesis: ( @48
+              rightParenthesis: ) @49
+            constructorName: ConstructorName
+              staticElement: ConstructorMember
+                base: self::@class::C::@constructor::•
+                substitution: {K: dynamic, V: dynamic}
+              type: TypeName
+                name: SimpleIdentifier
+                  staticElement: self::@class::C
+                  staticType: null
+                  token: C @47
+                type: C<dynamic, dynamic>
+            keyword: const @41
+            staticType: C<dynamic, dynamic>
+    accessors
+      synthetic static get V @37
+        returnType: C<dynamic, dynamic>
 ''');
   }
 
@@ -3341,13 +6884,56 @@
 const V = const C<int, String>();
 ''');
     checkElementText(library, r'''
-class C<K, V> {
-  const C();
-}
-const C<int, String> V = const
-        C/*location: test.dart;C*/<
-        int/*location: dart:core;int*/,
-        String/*location: dart:core;String*/>();
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          covariant K @8
+            defaultType: dynamic
+          covariant V @11
+            defaultType: dynamic
+        constructors
+          const @24
+    topLevelVariables
+      static const V @37
+        type: C<int, String>
+        constantInitializer
+          InstanceCreationExpression
+            argumentList: ArgumentList
+              leftParenthesis: ( @61
+              rightParenthesis: ) @62
+            constructorName: ConstructorName
+              staticElement: ConstructorMember
+                base: self::@class::C::@constructor::•
+                substitution: {K: int, V: String}
+              type: TypeName
+                name: SimpleIdentifier
+                  staticElement: self::@class::C
+                  staticType: null
+                  token: C @47
+                type: C<int, String>
+                typeArguments: TypeArgumentList
+                  arguments
+                    TypeName
+                      name: SimpleIdentifier
+                        staticElement: dart:core::@class::int
+                        staticType: null
+                        token: int @49
+                      type: int
+                    TypeName
+                      name: SimpleIdentifier
+                        staticElement: dart:core::@class::String
+                        staticType: null
+                        token: String @54
+                      type: String
+                  leftBracket: < @0
+                  rightBracket: > @0
+            keyword: const @41
+            staticType: C<int, String>
+    accessors
+      synthetic static get V @37
+        returnType: C<int, String>
 ''');
   }
 
@@ -3362,11 +6948,49 @@
 const V = const C<int, String>();
 ''');
     checkElementText(library, r'''
-import 'a.dart';
-const C<int, String> V = const
-        C/*location: a.dart;C*/<
-        int/*location: dart:core;int*/,
-        String/*location: dart:core;String*/>();
+library
+  imports
+    a.dart
+  definingUnit
+    topLevelVariables
+      static const V @23
+        type: C<int, String>
+        constantInitializer
+          InstanceCreationExpression
+            argumentList: ArgumentList
+              leftParenthesis: ( @47
+              rightParenthesis: ) @48
+            constructorName: ConstructorName
+              staticElement: ConstructorMember
+                base: a.dart::@class::C::@constructor::•
+                substitution: {K: int, V: String}
+              type: TypeName
+                name: SimpleIdentifier
+                  staticElement: a.dart::@class::C
+                  staticType: null
+                  token: C @33
+                type: C<int, String>
+                typeArguments: TypeArgumentList
+                  arguments
+                    TypeName
+                      name: SimpleIdentifier
+                        staticElement: dart:core::@class::int
+                        staticType: null
+                        token: int @35
+                      type: int
+                    TypeName
+                      name: SimpleIdentifier
+                        staticElement: dart:core::@class::String
+                        staticType: null
+                        token: String @40
+                      type: String
+                  leftBracket: < @0
+                  rightBracket: > @0
+            keyword: const @27
+            staticType: C<int, String>
+    accessors
+      synthetic static get V @23
+        returnType: C<int, String>
 ''');
   }
 
@@ -3381,12 +7005,57 @@
 const V = const p.C<int, String>();
 ''');
     checkElementText(library, r'''
-import 'a.dart' as p;
-const C<int, String> V = const
-        p/*location: test.dart;p*/.
-        C/*location: a.dart;C*/<
-        int/*location: dart:core;int*/,
-        String/*location: dart:core;String*/>();
+library
+  imports
+    a.dart as p @19
+  definingUnit
+    topLevelVariables
+      static const V @28
+        type: C<int, String>
+        constantInitializer
+          InstanceCreationExpression
+            argumentList: ArgumentList
+              leftParenthesis: ( @54
+              rightParenthesis: ) @55
+            constructorName: ConstructorName
+              staticElement: ConstructorMember
+                base: a.dart::@class::C::@constructor::•
+                substitution: {K: int, V: String}
+              type: TypeName
+                name: PrefixedIdentifier
+                  identifier: SimpleIdentifier
+                    staticElement: a.dart::@class::C
+                    staticType: null
+                    token: C @40
+                  period: . @0
+                  prefix: SimpleIdentifier
+                    staticElement: self::@prefix::p
+                    staticType: null
+                    token: p @38
+                  staticElement: a.dart::@class::C
+                  staticType: null
+                type: C<int, String>
+                typeArguments: TypeArgumentList
+                  arguments
+                    TypeName
+                      name: SimpleIdentifier
+                        staticElement: dart:core::@class::int
+                        staticType: null
+                        token: int @42
+                      type: int
+                    TypeName
+                      name: SimpleIdentifier
+                        staticElement: dart:core::@class::String
+                        staticType: null
+                        token: String @47
+                      type: String
+                  leftBracket: < @0
+                  rightBracket: > @0
+            keyword: const @32
+            staticType: C<int, String>
+    accessors
+      synthetic static get V @28
+        returnType: C<int, String>
 ''');
   }
 
@@ -3398,14 +7067,77 @@
 const V = const C.named(true, 1, 2, d: 'ccc', e: 3.4);
 ''');
     checkElementText(library, r'''
-class C {
-  const C.named(bool a, int b, int c, {String d}, {double e});
-}
-const C V = const
-        C/*location: test.dart;C*/.
-        named/*location: test.dart;C;named*/(true, 1, 2,
-        d/*location: test.dart;C;named;d*/: 'ccc',
-        e/*location: test.dart;C;named;e*/: 3.4);
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          const named @20
+            periodOffset: 19
+            nameEnd: 25
+            parameters
+              requiredPositional a @31
+                type: bool
+              requiredPositional b @38
+                type: int
+              requiredPositional c @45
+                type: int
+              optionalNamed d @56
+                type: String
+              optionalNamed e @66
+                type: double
+    topLevelVariables
+      static const V @79
+        type: C
+        constantInitializer
+          InstanceCreationExpression
+            argumentList: ArgumentList
+              arguments
+                BooleanLiteral
+                  literal: true @97
+                  staticType: bool
+                IntegerLiteral
+                  literal: 1 @103
+                  staticType: int
+                IntegerLiteral
+                  literal: 2 @106
+                  staticType: int
+                NamedExpression
+                  name: Label
+                    label: SimpleIdentifier
+                      staticElement: self::@class::C::@constructor::named::@parameter::d
+                      staticType: null
+                      token: d @109
+                  expression: SimpleStringLiteral
+                    literal: 'ccc' @112
+                NamedExpression
+                  name: Label
+                    label: SimpleIdentifier
+                      staticElement: self::@class::C::@constructor::named::@parameter::e
+                      staticType: null
+                      token: e @119
+                  expression: DoubleLiteral
+                    literal: 3.4 @122
+                    staticType: double
+              leftParenthesis: ( @96
+              rightParenthesis: ) @125
+            constructorName: ConstructorName
+              name: SimpleIdentifier
+                staticElement: self::@class::C::@constructor::named
+                staticType: null
+                token: named @91
+              staticElement: self::@class::C::@constructor::named
+              type: TypeName
+                name: SimpleIdentifier
+                  staticElement: self::@class::C
+                  staticType: null
+                  token: C @89
+                type: C
+            keyword: const @83
+            staticType: C
+    accessors
+      synthetic static get V @79
+        returnType: C
 ''');
   }
 
@@ -3420,10 +7152,35 @@
 const V = const C.named();
 ''');
     checkElementText(library, r'''
-import 'a.dart';
-const C V = const
-        C/*location: a.dart;C*/.
-        named/*location: a.dart;C;named*/();
+library
+  imports
+    a.dart
+  definingUnit
+    topLevelVariables
+      static const V @23
+        type: C
+        constantInitializer
+          InstanceCreationExpression
+            argumentList: ArgumentList
+              leftParenthesis: ( @40
+              rightParenthesis: ) @41
+            constructorName: ConstructorName
+              name: SimpleIdentifier
+                staticElement: a.dart::@class::C::@constructor::named
+                staticType: null
+                token: named @35
+              staticElement: a.dart::@class::C::@constructor::named
+              type: TypeName
+                name: SimpleIdentifier
+                  staticElement: a.dart::@class::C
+                  staticType: null
+                  token: C @33
+                type: C
+            keyword: const @27
+            staticType: C
+    accessors
+      synthetic static get V @23
+        returnType: C
 ''');
   }
 
@@ -3438,11 +7195,43 @@
 const V = const p.C.named();
 ''');
     checkElementText(library, r'''
-import 'a.dart' as p;
-const C V = const
-        p/*location: test.dart;p*/.
-        C/*location: a.dart;C*/.
-        named/*location: a.dart;C;named*/();
+library
+  imports
+    a.dart as p @19
+  definingUnit
+    topLevelVariables
+      static const V @28
+        type: C
+        constantInitializer
+          InstanceCreationExpression
+            argumentList: ArgumentList
+              leftParenthesis: ( @47
+              rightParenthesis: ) @48
+            constructorName: ConstructorName
+              name: SimpleIdentifier
+                staticElement: a.dart::@class::C::@constructor::named
+                staticType: null
+                token: named @42
+              staticElement: a.dart::@class::C::@constructor::named
+              type: TypeName
+                name: PrefixedIdentifier
+                  identifier: SimpleIdentifier
+                    staticElement: a.dart::@class::C
+                    staticType: null
+                    token: C @40
+                  period: . @0
+                  prefix: SimpleIdentifier
+                    staticElement: self::@prefix::p
+                    staticType: null
+                    token: p @38
+                  staticElement: a.dart::@class::C
+                  staticType: null
+                type: C
+            keyword: const @32
+            staticType: C
+    accessors
+      synthetic static get V @28
+        returnType: C
 ''');
   }
 
@@ -3452,11 +7241,37 @@
 const V = const C.named();
 ''', allowErrors: true);
     checkElementText(library, r'''
-class C {
-}
-const C V = const
-        C/*location: test.dart;C*/.
-        named/*location: null*/();
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          synthetic @-1
+    topLevelVariables
+      static const V @17
+        type: C
+        constantInitializer
+          InstanceCreationExpression
+            argumentList: ArgumentList
+              leftParenthesis: ( @34
+              rightParenthesis: ) @35
+            constructorName: ConstructorName
+              name: SimpleIdentifier
+                staticElement: <null>
+                staticType: null
+                token: named @29
+              staticElement: <null>
+              type: TypeName
+                name: SimpleIdentifier
+                  staticElement: self::@class::C
+                  staticType: null
+                  token: C @27
+                type: C
+            keyword: const @21
+            staticType: C
+    accessors
+      synthetic static get V @17
+        returnType: C
 ''');
   }
 
@@ -3465,9 +7280,37 @@
 const V = const C.named();
 ''', allowErrors: true);
     checkElementText(library, r'''
-const dynamic V = const
-        C/*location: null*/.
-        named/*location: null*/();
+library
+  definingUnit
+    topLevelVariables
+      static const V @6
+        type: dynamic
+        constantInitializer
+          InstanceCreationExpression
+            argumentList: ArgumentList
+              leftParenthesis: ( @23
+              rightParenthesis: ) @24
+            constructorName: ConstructorName
+              staticElement: <null>
+              type: TypeName
+                name: PrefixedIdentifier
+                  identifier: SimpleIdentifier
+                    staticElement: <null>
+                    staticType: null
+                    token: named @18
+                  period: . @0
+                  prefix: SimpleIdentifier
+                    staticElement: <null>
+                    staticType: null
+                    token: C @16
+                  staticElement: <null>
+                  staticType: null
+                type: dynamic
+            keyword: const @10
+            staticType: dynamic
+    accessors
+      synthetic static get V @6
+        returnType: dynamic
 ''');
   }
 
@@ -3481,11 +7324,43 @@
 const V = const p.C.named();
 ''', allowErrors: true);
     checkElementText(library, r'''
-import 'a.dart' as p;
-const C V = const
-        p/*location: test.dart;p*/.
-        C/*location: a.dart;C*/.
-        named/*location: null*/();
+library
+  imports
+    a.dart as p @19
+  definingUnit
+    topLevelVariables
+      static const V @28
+        type: C
+        constantInitializer
+          InstanceCreationExpression
+            argumentList: ArgumentList
+              leftParenthesis: ( @47
+              rightParenthesis: ) @48
+            constructorName: ConstructorName
+              name: SimpleIdentifier
+                staticElement: <null>
+                staticType: null
+                token: named @42
+              staticElement: <null>
+              type: TypeName
+                name: PrefixedIdentifier
+                  identifier: SimpleIdentifier
+                    staticElement: a.dart::@class::C
+                    staticType: null
+                    token: C @40
+                  period: . @0
+                  prefix: SimpleIdentifier
+                    staticElement: self::@prefix::p
+                    staticType: null
+                    token: p @38
+                  staticElement: a.dart::@class::C
+                  staticType: null
+                type: C
+            keyword: const @32
+            staticType: C
+    accessors
+      synthetic static get V @28
+        returnType: C
 ''');
   }
 
@@ -3496,11 +7371,43 @@
 const V = const p.C.named();
 ''', allowErrors: true);
     checkElementText(library, r'''
-import 'a.dart' as p;
-const dynamic V = const
-        p/*location: test.dart;p*/.
-        C/*location: null*/.
-        named/*location: null*/();
+library
+  imports
+    a.dart as p @19
+  definingUnit
+    topLevelVariables
+      static const V @28
+        type: dynamic
+        constantInitializer
+          InstanceCreationExpression
+            argumentList: ArgumentList
+              leftParenthesis: ( @47
+              rightParenthesis: ) @48
+            constructorName: ConstructorName
+              name: SimpleIdentifier
+                staticElement: <null>
+                staticType: null
+                token: named @42
+              staticElement: <null>
+              type: TypeName
+                name: PrefixedIdentifier
+                  identifier: SimpleIdentifier
+                    staticElement: <null>
+                    staticType: null
+                    token: C @40
+                  period: . @0
+                  prefix: SimpleIdentifier
+                    staticElement: self::@prefix::p
+                    staticType: null
+                    token: p @38
+                  staticElement: <null>
+                  staticType: null
+                type: dynamic
+            keyword: const @32
+            staticType: dynamic
+    accessors
+      synthetic static get V @28
+        returnType: dynamic
 ''');
   }
 
@@ -3509,10 +7416,41 @@
 const V = const p.C.named();
 ''', allowErrors: true);
     checkElementText(library, r'''
-const dynamic V = const
-        p/*location: null*/.
-        C/*location: null*/.
-        named/*location: null*/();
+library
+  definingUnit
+    topLevelVariables
+      static const V @6
+        type: dynamic
+        constantInitializer
+          InstanceCreationExpression
+            argumentList: ArgumentList
+              leftParenthesis: ( @25
+              rightParenthesis: ) @26
+            constructorName: ConstructorName
+              name: SimpleIdentifier
+                staticElement: <null>
+                staticType: null
+                token: named @20
+              staticElement: <null>
+              type: TypeName
+                name: PrefixedIdentifier
+                  identifier: SimpleIdentifier
+                    staticElement: <null>
+                    staticType: null
+                    token: C @18
+                  period: . @0
+                  prefix: SimpleIdentifier
+                    staticElement: <null>
+                    staticType: null
+                    token: p @16
+                  staticElement: <null>
+                  staticType: null
+                type: dynamic
+            keyword: const @10
+            staticType: dynamic
+    accessors
+      synthetic static get V @6
+        returnType: dynamic
 ''');
   }
 
@@ -3522,11 +7460,40 @@
 const V = const C.named();
 ''', allowErrors: true);
     checkElementText(library, r'''
-class C<T> {
-}
-const C<dynamic> V = const
-        C/*location: test.dart;C*/.
-        named/*location: null*/();
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+    topLevelVariables
+      static const V @20
+        type: C<dynamic>
+        constantInitializer
+          InstanceCreationExpression
+            argumentList: ArgumentList
+              leftParenthesis: ( @37
+              rightParenthesis: ) @38
+            constructorName: ConstructorName
+              name: SimpleIdentifier
+                staticElement: <null>
+                staticType: null
+                token: named @32
+              staticElement: <null>
+              type: TypeName
+                name: SimpleIdentifier
+                  staticElement: self::@class::C
+                  staticType: null
+                  token: C @30
+                type: C<dynamic>
+            keyword: const @24
+            staticType: C<dynamic>
+    accessors
+      synthetic static get V @20
+        returnType: C<dynamic>
 ''');
   }
 
@@ -3538,11 +7505,33 @@
 const V = const C();
 ''');
     checkElementText(library, r'''
-class C {
-  const C();
-}
-const C V = const
-        C/*location: test.dart;C*/();
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          const @18
+    topLevelVariables
+      static const V @31
+        type: C
+        constantInitializer
+          InstanceCreationExpression
+            argumentList: ArgumentList
+              leftParenthesis: ( @42
+              rightParenthesis: ) @43
+            constructorName: ConstructorName
+              staticElement: self::@class::C::@constructor::•
+              type: TypeName
+                name: SimpleIdentifier
+                  staticElement: self::@class::C
+                  staticType: null
+                  token: C @41
+                type: C
+            keyword: const @35
+            staticType: C
+    accessors
+      synthetic static get V @31
+        returnType: C
 ''');
   }
 
@@ -3557,9 +7546,31 @@
 const V = const C();
 ''');
     checkElementText(library, r'''
-import 'a.dart';
-const C V = const
-        C/*location: a.dart;C*/();
+library
+  imports
+    a.dart
+  definingUnit
+    topLevelVariables
+      static const V @23
+        type: C
+        constantInitializer
+          InstanceCreationExpression
+            argumentList: ArgumentList
+              leftParenthesis: ( @34
+              rightParenthesis: ) @35
+            constructorName: ConstructorName
+              staticElement: a.dart::@class::C::@constructor::•
+              type: TypeName
+                name: SimpleIdentifier
+                  staticElement: a.dart::@class::C
+                  staticType: null
+                  token: C @33
+                type: C
+            keyword: const @27
+            staticType: C
+    accessors
+      synthetic static get V @23
+        returnType: C
 ''');
   }
 
@@ -3574,10 +7585,39 @@
 const V = const p.C();
 ''');
     checkElementText(library, r'''
-import 'a.dart' as p;
-const C V = const
-        p/*location: test.dart;p*/.
-        C/*location: a.dart;C*/();
+library
+  imports
+    a.dart as p @19
+  definingUnit
+    topLevelVariables
+      static const V @28
+        type: C
+        constantInitializer
+          InstanceCreationExpression
+            argumentList: ArgumentList
+              leftParenthesis: ( @41
+              rightParenthesis: ) @42
+            constructorName: ConstructorName
+              staticElement: a.dart::@class::C::@constructor::•
+              type: TypeName
+                name: PrefixedIdentifier
+                  identifier: SimpleIdentifier
+                    staticElement: a.dart::@class::C
+                    staticType: null
+                    token: C @40
+                  period: . @0
+                  prefix: SimpleIdentifier
+                    staticElement: self::@prefix::p
+                    staticType: null
+                    token: p @38
+                  staticElement: a.dart::@class::C
+                  staticType: null
+                type: C
+            keyword: const @32
+            staticType: C
+    accessors
+      synthetic static get V @28
+        returnType: C
 ''');
   }
 
@@ -3586,8 +7626,29 @@
 const V = const C();
 ''', allowErrors: true);
     checkElementText(library, r'''
-const dynamic V = const
-        C/*location: null*/();
+library
+  definingUnit
+    topLevelVariables
+      static const V @6
+        type: dynamic
+        constantInitializer
+          InstanceCreationExpression
+            argumentList: ArgumentList
+              leftParenthesis: ( @17
+              rightParenthesis: ) @18
+            constructorName: ConstructorName
+              staticElement: <null>
+              type: TypeName
+                name: SimpleIdentifier
+                  staticElement: <null>
+                  staticType: null
+                  token: C @16
+                type: dynamic
+            keyword: const @10
+            staticType: dynamic
+    accessors
+      synthetic static get V @6
+        returnType: dynamic
 ''');
   }
 
@@ -3598,10 +7659,39 @@
 const V = const p.C();
 ''', allowErrors: true);
     checkElementText(library, r'''
-import 'a.dart' as p;
-const dynamic V = const
-        p/*location: test.dart;p*/.
-        C/*location: null*/();
+library
+  imports
+    a.dart as p @19
+  definingUnit
+    topLevelVariables
+      static const V @28
+        type: dynamic
+        constantInitializer
+          InstanceCreationExpression
+            argumentList: ArgumentList
+              leftParenthesis: ( @41
+              rightParenthesis: ) @42
+            constructorName: ConstructorName
+              staticElement: <null>
+              type: TypeName
+                name: PrefixedIdentifier
+                  identifier: SimpleIdentifier
+                    staticElement: <null>
+                    staticType: null
+                    token: C @40
+                  period: . @0
+                  prefix: SimpleIdentifier
+                    staticElement: self::@prefix::p
+                    staticType: null
+                    token: p @38
+                  staticElement: <null>
+                  staticType: null
+                type: dynamic
+            keyword: const @32
+            staticType: dynamic
+    accessors
+      synthetic static get V @28
+        returnType: dynamic
 ''');
   }
 
@@ -3610,9 +7700,37 @@
 const V = const p.C();
 ''', allowErrors: true);
     checkElementText(library, r'''
-const dynamic V = const
-        p/*location: null*/.
-        C/*location: null*/();
+library
+  definingUnit
+    topLevelVariables
+      static const V @6
+        type: dynamic
+        constantInitializer
+          InstanceCreationExpression
+            argumentList: ArgumentList
+              leftParenthesis: ( @19
+              rightParenthesis: ) @20
+            constructorName: ConstructorName
+              staticElement: <null>
+              type: TypeName
+                name: PrefixedIdentifier
+                  identifier: SimpleIdentifier
+                    staticElement: <null>
+                    staticType: null
+                    token: C @18
+                  period: . @0
+                  prefix: SimpleIdentifier
+                    staticElement: <null>
+                    staticType: null
+                    token: p @16
+                  staticElement: <null>
+                  staticType: null
+                type: dynamic
+            keyword: const @10
+            staticType: dynamic
+    accessors
+      synthetic static get V @6
+        returnType: dynamic
 ''');
   }
 
@@ -3621,11 +7739,37 @@
 const a = 0;
 const b = a is int;
 ''');
-    checkElementText(library, '''
-const int a = 0;
-const bool b =
-        a/*location: test.dart;a?*/ is
-        int/*location: dart:core;int*/;
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const a @6
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 0 @10
+            staticType: int
+      static const b @19
+        type: bool
+        constantInitializer
+          IsExpression
+            expression: SimpleIdentifier
+              staticElement: self::@getter::a
+              staticType: int
+              token: a @23
+            isOperator: is @0
+            staticType: bool
+            type: TypeName
+              name: SimpleIdentifier
+                staticElement: dart:core::@class::int
+                staticType: null
+                token: int @28
+              type: int
+    accessors
+      synthetic static get a @6
+        returnType: int
+      synthetic static get b @19
+        returnType: bool
 ''');
   }
 
@@ -3637,13 +7781,47 @@
 const int v = C.F.length;
 ''');
     checkElementText(library, r'''
-class C {
-  static const String F = '';
-}
-const int v =
-        C/*location: test.dart;C*/.
-        F/*location: test.dart;C;F?*/.
-        length/*location: dart:core;String;length?*/;
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          static const F @32
+            type: String
+            constantInitializer
+              SimpleStringLiteral
+                literal: '' @36
+        constructors
+          synthetic @-1
+        accessors
+          synthetic static get F @32
+            returnType: String
+    topLevelVariables
+      static const v @52
+        type: int
+        constantInitializer
+          PropertyAccess
+            operator: . @0
+            propertyName: SimpleIdentifier
+              staticElement: dart:core::@class::String::@getter::length
+              staticType: int
+              token: length @60
+            staticType: int
+            target: PrefixedIdentifier
+              identifier: SimpleIdentifier
+                staticElement: self::@class::C::@getter::F
+                staticType: String
+                token: F @58
+              period: . @0
+              prefix: SimpleIdentifier
+                staticElement: self::@class::C
+                staticType: null
+                token: C @56
+              staticElement: self::@class::C::@getter::F
+              staticType: String
+    accessors
+      synthetic static get v @52
+        returnType: int
 ''');
   }
 
@@ -3658,11 +7836,36 @@
 const int v = C.F.length;
 ''');
     checkElementText(library, r'''
-import 'a.dart';
-const int v =
-        C/*location: a.dart;C*/.
-        F/*location: a.dart;C;F?*/.
-        length/*location: dart:core;String;length?*/;
+library
+  imports
+    a.dart
+  definingUnit
+    topLevelVariables
+      static const v @27
+        type: int
+        constantInitializer
+          PropertyAccess
+            operator: . @0
+            propertyName: SimpleIdentifier
+              staticElement: dart:core::@class::String::@getter::length
+              staticType: int
+              token: length @35
+            staticType: int
+            target: PrefixedIdentifier
+              identifier: SimpleIdentifier
+                staticElement: a.dart::@class::C::@getter::F
+                staticType: String
+                token: F @33
+              period: . @0
+              prefix: SimpleIdentifier
+                staticElement: a.dart::@class::C
+                staticType: null
+                token: C @31
+              staticElement: a.dart::@class::C::@getter::F
+              staticType: String
+    accessors
+      synthetic static get v @27
+        returnType: int
 ''');
   }
 
@@ -3677,12 +7880,43 @@
 const int v = p.C.F.length;
 ''');
     checkElementText(library, r'''
-import 'a.dart' as p;
-const int v =
-        p/*location: test.dart;p*/.
-        C/*location: a.dart;C*/.
-        F/*location: a.dart;C;F?*/.
-        length/*location: dart:core;String;length?*/;
+library
+  imports
+    a.dart as p @19
+  definingUnit
+    topLevelVariables
+      static const v @32
+        type: int
+        constantInitializer
+          PropertyAccess
+            operator: . @0
+            propertyName: SimpleIdentifier
+              staticElement: dart:core::@class::String::@getter::length
+              staticType: int
+              token: length @42
+            staticType: int
+            target: PropertyAccess
+              operator: . @0
+              propertyName: SimpleIdentifier
+                staticElement: a.dart::@class::C::@getter::F
+                staticType: String
+                token: F @40
+              staticType: String
+              target: PrefixedIdentifier
+                identifier: SimpleIdentifier
+                  staticElement: a.dart::@class::C
+                  staticType: null
+                  token: C @38
+                period: . @0
+                prefix: SimpleIdentifier
+                  staticElement: self::@prefix::p
+                  staticType: null
+                  token: p @36
+                staticElement: a.dart::@class::C
+                staticType: null
+    accessors
+      synthetic static get v @32
+        returnType: int
 ''');
   }
 
@@ -3691,8 +7925,24 @@
 const v = 'abc'.length;
 ''');
     checkElementText(library, r'''
-const int v = 'abc'.
-        length/*location: dart:core;String;length?*/;
+library
+  definingUnit
+    topLevelVariables
+      static const v @6
+        type: int
+        constantInitializer
+          PropertyAccess
+            operator: . @0
+            propertyName: SimpleIdentifier
+              staticElement: dart:core::@class::String::@getter::length
+              staticType: int
+              token: length @16
+            staticType: int
+            target: SimpleStringLiteral
+              literal: 'abc' @10
+    accessors
+      synthetic static get v @6
+        returnType: int
 ''');
   }
 
@@ -3702,10 +7952,34 @@
 const v = S.length;
 ''');
     checkElementText(library, r'''
-const String S = 'abc';
-const int v =
-        S/*location: test.dart;S?*/.
-        length/*location: dart:core;String;length?*/;
+library
+  definingUnit
+    topLevelVariables
+      static const S @13
+        type: String
+        constantInitializer
+          SimpleStringLiteral
+            literal: 'abc' @17
+      static const v @30
+        type: int
+        constantInitializer
+          PrefixedIdentifier
+            identifier: SimpleIdentifier
+              staticElement: dart:core::@class::String::@getter::length
+              staticType: int
+              token: length @36
+            period: . @0
+            prefix: SimpleIdentifier
+              staticElement: self::@getter::S
+              staticType: String
+              token: S @34
+            staticElement: dart:core::@class::String::@getter::length
+            staticType: int
+    accessors
+      synthetic static get S @13
+        returnType: String
+      synthetic static get v @30
+        returnType: int
 ''');
   }
 
@@ -3718,10 +7992,29 @@
 const v = S.length;
 ''');
     checkElementText(library, r'''
-import 'a.dart';
-const int v =
-        S/*location: a.dart;S?*/.
-        length/*location: dart:core;String;length?*/;
+library
+  imports
+    a.dart
+  definingUnit
+    topLevelVariables
+      static const v @23
+        type: int
+        constantInitializer
+          PrefixedIdentifier
+            identifier: SimpleIdentifier
+              staticElement: dart:core::@class::String::@getter::length
+              staticType: int
+              token: length @29
+            period: . @0
+            prefix: SimpleIdentifier
+              staticElement: a.dart::@getter::S
+              staticType: String
+              token: S @27
+            staticElement: dart:core::@class::String::@getter::length
+            staticType: int
+    accessors
+      synthetic static get v @23
+        returnType: int
 ''');
   }
 
@@ -3734,11 +8027,36 @@
 const v = p.S.length;
 ''');
     checkElementText(library, r'''
-import 'a.dart' as p;
-const int v =
-        p/*location: test.dart;p*/.
-        S/*location: a.dart;S?*/.
-        length/*location: dart:core;String;length?*/;
+library
+  imports
+    a.dart as p @19
+  definingUnit
+    topLevelVariables
+      static const v @28
+        type: int
+        constantInitializer
+          PropertyAccess
+            operator: . @0
+            propertyName: SimpleIdentifier
+              staticElement: dart:core::@class::String::@getter::length
+              staticType: int
+              token: length @36
+            staticType: int
+            target: PrefixedIdentifier
+              identifier: SimpleIdentifier
+                staticElement: a.dart::@getter::S
+                staticType: String
+                token: S @34
+              period: . @0
+              prefix: SimpleIdentifier
+                staticElement: self::@prefix::p
+                staticType: null
+                token: p @32
+              staticElement: a.dart::@getter::S
+              staticType: String
+    accessors
+      synthetic static get v @28
+        returnType: int
 ''');
   }
 
@@ -3750,12 +8068,34 @@
 const v = C.length;
 ''');
     checkElementText(library, r'''
-class C {
-  static int length() {}
-}
-const int Function() v =
-        C/*location: test.dart;C*/.
-        length/*location: test.dart;C;length*/;
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          synthetic @-1
+        methods
+          static length @23
+            returnType: int
+    topLevelVariables
+      static const v @47
+        type: int Function()
+        constantInitializer
+          PrefixedIdentifier
+            identifier: SimpleIdentifier
+              staticElement: self::@class::C::@method::length
+              staticType: int Function()
+              token: length @53
+            period: . @0
+            prefix: SimpleIdentifier
+              staticElement: self::@class::C
+              staticType: null
+              token: C @51
+            staticElement: self::@class::C::@method::length
+            staticType: int Function()
+    accessors
+      synthetic static get v @47
+        returnType: int Function()
 ''');
   }
 
@@ -3763,26 +8103,83 @@
     var library = await checkLibrary('''
 const Object x = const <int>[if (true) 1];
 ''');
-    checkElementText(
-        library,
-        '''
-const Object x = const <
-        int/*location: dart:core;int*/>[if (true) 1];
-''',
-        withTypes: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const x @13
+        type: Object
+        constantInitializer
+          ListLiteral
+            constKeyword: const @0
+            elements
+              IfElement
+                condition: BooleanLiteral
+                  literal: true @33
+                  staticType: bool
+                thenStatement: IntegerLiteral
+                  literal: 1 @39
+                  staticType: int
+            leftBracket: [ @0
+            rightBracket: ] @0
+            staticType: List<int>
+            typeArguments: TypeArgumentList
+              arguments
+                TypeName
+                  name: SimpleIdentifier
+                    staticElement: dart:core::@class::int
+                    staticType: null
+                    token: int @24
+                  type: int
+              leftBracket: < @0
+              rightBracket: > @0
+    accessors
+      synthetic static get x @13
+        returnType: Object
+''');
   }
 
   test_const_list_if_else() async {
     var library = await checkLibrary('''
 const Object x = const <int>[if (true) 1 else 2];
 ''');
-    checkElementText(
-        library,
-        '''
-const Object x = const <
-        int/*location: dart:core;int*/>[if (true) 1 else 2];
-''',
-        withTypes: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const x @13
+        type: Object
+        constantInitializer
+          ListLiteral
+            constKeyword: const @0
+            elements
+              IfElement
+                condition: BooleanLiteral
+                  literal: true @33
+                  staticType: bool
+                elseStatement: IntegerLiteral
+                  literal: 2 @46
+                  staticType: int
+                thenStatement: IntegerLiteral
+                  literal: 1 @39
+                  staticType: int
+            leftBracket: [ @0
+            rightBracket: ] @0
+            staticType: List<int>
+            typeArguments: TypeArgumentList
+              arguments
+                TypeName
+                  name: SimpleIdentifier
+                    staticElement: dart:core::@class::int
+                    staticType: null
+                    token: int @24
+                  type: int
+              leftBracket: < @0
+              rightBracket: > @0
+    accessors
+      synthetic static get x @13
+        returnType: Object
+''');
   }
 
   test_const_list_inferredType() async {
@@ -3792,54 +8189,181 @@
     var library = await checkLibrary('''
 const Object x = const [1];
 ''');
-    checkElementText(
-        library,
-        '''
-const Object x = const /*typeArgs=int*/[1];
-''',
-        withTypes: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const x @13
+        type: Object
+        constantInitializer
+          ListLiteral
+            constKeyword: const @0
+            elements
+              IntegerLiteral
+                literal: 1 @24
+                staticType: int
+            leftBracket: [ @0
+            rightBracket: ] @0
+            staticType: List<int>
+    accessors
+      synthetic static get x @13
+        returnType: Object
+''');
   }
 
   test_const_list_spread() async {
     var library = await checkLibrary('''
 const Object x = const <int>[...<int>[1]];
 ''');
-    checkElementText(
-        library,
-        '''
-const Object x = const <
-        int/*location: dart:core;int*/>[...<
-        int/*location: dart:core;int*/>[1]];
-''',
-        withTypes: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const x @13
+        type: Object
+        constantInitializer
+          ListLiteral
+            constKeyword: const @0
+            elements
+              SpreadElement
+                expressions: ListLiteral
+                  elements
+                    IntegerLiteral
+                      literal: 1 @38
+                      staticType: int
+                  leftBracket: [ @0
+                  rightBracket: ] @0
+                  staticType: List<int>
+                  typeArguments: TypeArgumentList
+                    arguments
+                      TypeName
+                        name: SimpleIdentifier
+                          staticElement: dart:core::@class::int
+                          staticType: null
+                          token: int @33
+                        type: int
+                    leftBracket: < @0
+                    rightBracket: > @0
+                spreadOperator: ... @0
+            leftBracket: [ @0
+            rightBracket: ] @0
+            staticType: List<int>
+            typeArguments: TypeArgumentList
+              arguments
+                TypeName
+                  name: SimpleIdentifier
+                    staticElement: dart:core::@class::int
+                    staticType: null
+                    token: int @24
+                  type: int
+              leftBracket: < @0
+              rightBracket: > @0
+    accessors
+      synthetic static get x @13
+        returnType: Object
+''');
   }
 
   test_const_list_spread_null_aware() async {
     var library = await checkLibrary('''
 const Object x = const <int>[...?<int>[1]];
 ''');
-    checkElementText(
-        library,
-        '''
-const Object x = const <
-        int/*location: dart:core;int*/>[...?<
-        int/*location: dart:core;int*/>[1]];
-''',
-        withTypes: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const x @13
+        type: Object
+        constantInitializer
+          ListLiteral
+            constKeyword: const @0
+            elements
+              SpreadElement
+                expressions: ListLiteral
+                  elements
+                    IntegerLiteral
+                      literal: 1 @39
+                      staticType: int
+                  leftBracket: [ @0
+                  rightBracket: ] @0
+                  staticType: List<int>
+                  typeArguments: TypeArgumentList
+                    arguments
+                      TypeName
+                        name: SimpleIdentifier
+                          staticElement: dart:core::@class::int
+                          staticType: null
+                          token: int @34
+                        type: int
+                    leftBracket: < @0
+                    rightBracket: > @0
+                spreadOperator: ...? @0
+            leftBracket: [ @0
+            rightBracket: ] @0
+            staticType: List<int>
+            typeArguments: TypeArgumentList
+              arguments
+                TypeName
+                  name: SimpleIdentifier
+                    staticElement: dart:core::@class::int
+                    staticType: null
+                    token: int @24
+                  type: int
+              leftBracket: < @0
+              rightBracket: > @0
+    accessors
+      synthetic static get x @13
+        returnType: Object
+''');
   }
 
   test_const_map_if() async {
     var library = await checkLibrary('''
 const Object x = const <int, int>{if (true) 1: 2};
 ''');
-    checkElementText(
-        library,
-        '''
-const Object x = const <
-        int/*location: dart:core;int*/,
-        int/*location: dart:core;int*/>{if (true) 1: 2}/*isMap*/;
-''',
-        withTypes: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const x @13
+        type: Object
+        constantInitializer
+          SetOrMapLiteral
+            constKeyword: const @0
+            elements
+              IfElement
+                condition: BooleanLiteral
+                  literal: true @38
+                  staticType: bool
+                thenStatement: SetOrMapLiteral
+                  key: IntegerLiteral
+                    literal: 1 @44
+                    staticType: int
+                  value: IntegerLiteral
+                    literal: 2 @47
+                    staticType: int
+            isMap: true
+            staticType: Map<int, int>
+            typeArguments: TypeArgumentList
+              arguments
+                TypeName
+                  name: SimpleIdentifier
+                    staticElement: dart:core::@class::int
+                    staticType: null
+                    token: int @24
+                  type: int
+                TypeName
+                  name: SimpleIdentifier
+                    staticElement: dart:core::@class::int
+                    staticType: null
+                    token: int @29
+                  type: int
+              leftBracket: < @0
+              rightBracket: > @0
+    accessors
+      synthetic static get x @13
+        returnType: Object
+''');
   }
 
   @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/44522')
@@ -3847,14 +8371,11 @@
     var library = await checkLibrary('''
 const Object x = const <int, int>{if (true) 1: 2 else 3: 4];
 ''');
-    checkElementText(
-        library,
-        '''
+    checkElementText(library, r'''
 const Object x = const <
         int/*location: dart:core;int*/,
         int/*location: dart:core;int*/>{if (true) 1: 2 else 3: 4}/*isMap*/;
-''',
-        withTypes: true);
+''');
   }
 
   test_const_map_inferredType() async {
@@ -3864,86 +8385,216 @@
     var library = await checkLibrary('''
 const Object x = const {1: 1.0};
 ''');
-    checkElementText(
-        library,
-        '''
-const Object x = const /*typeArgs=int,double*/{1: 1.0}/*isMap*/;
-''',
-        withTypes: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const x @13
+        type: Object
+        constantInitializer
+          SetOrMapLiteral
+            constKeyword: const @0
+            elements
+              SetOrMapLiteral
+                key: IntegerLiteral
+                  literal: 1 @24
+                  staticType: int
+                value: DoubleLiteral
+                  literal: 1.0 @27
+                  staticType: double
+            isMap: true
+            staticType: Map<int, double>
+    accessors
+      synthetic static get x @13
+        returnType: Object
+''');
   }
 
   test_const_map_spread() async {
     var library = await checkLibrary('''
 const Object x = const <int, int>{...<int, int>{1: 2}};
 ''');
-    checkElementText(
-        library,
-        '''
-const Object x = const <
-        int/*location: dart:core;int*/,
-        int/*location: dart:core;int*/>{...<
-        int/*location: dart:core;int*/,
-        int/*location: dart:core;int*/>{1: 2}/*isMap*/}/*isMap*/;
-''',
-        withTypes: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const x @13
+        type: Object
+        constantInitializer
+          SetOrMapLiteral
+            constKeyword: const @0
+            elements
+              SpreadElement
+                expressions: SetOrMapLiteral
+                  elements
+                    SetOrMapLiteral
+                      key: IntegerLiteral
+                        literal: 1 @48
+                        staticType: int
+                      value: IntegerLiteral
+                        literal: 2 @51
+                        staticType: int
+                  isMap: true
+                  staticType: Map<int, int>
+                  typeArguments: TypeArgumentList
+                    arguments
+                      TypeName
+                        name: SimpleIdentifier
+                          staticElement: dart:core::@class::int
+                          staticType: null
+                          token: int @38
+                        type: int
+                      TypeName
+                        name: SimpleIdentifier
+                          staticElement: dart:core::@class::int
+                          staticType: null
+                          token: int @43
+                        type: int
+                    leftBracket: < @0
+                    rightBracket: > @0
+                spreadOperator: ... @0
+            isMap: true
+            staticType: Map<int, int>
+            typeArguments: TypeArgumentList
+              arguments
+                TypeName
+                  name: SimpleIdentifier
+                    staticElement: dart:core::@class::int
+                    staticType: null
+                    token: int @24
+                  type: int
+                TypeName
+                  name: SimpleIdentifier
+                    staticElement: dart:core::@class::int
+                    staticType: null
+                    token: int @29
+                  type: int
+              leftBracket: < @0
+              rightBracket: > @0
+    accessors
+      synthetic static get x @13
+        returnType: Object
+''');
   }
 
   test_const_map_spread_null_aware() async {
     var library = await checkLibrary('''
 const Object x = const <int, int>{...?<int, int>{1: 2}};
 ''');
-    checkElementText(
-        library,
-        '''
-const Object x = const <
-        int/*location: dart:core;int*/,
-        int/*location: dart:core;int*/>{...?<
-        int/*location: dart:core;int*/,
-        int/*location: dart:core;int*/>{1: 2}/*isMap*/}/*isMap*/;
-''',
-        withTypes: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const x @13
+        type: Object
+        constantInitializer
+          SetOrMapLiteral
+            constKeyword: const @0
+            elements
+              SpreadElement
+                expressions: SetOrMapLiteral
+                  elements
+                    SetOrMapLiteral
+                      key: IntegerLiteral
+                        literal: 1 @49
+                        staticType: int
+                      value: IntegerLiteral
+                        literal: 2 @52
+                        staticType: int
+                  isMap: true
+                  staticType: Map<int, int>
+                  typeArguments: TypeArgumentList
+                    arguments
+                      TypeName
+                        name: SimpleIdentifier
+                          staticElement: dart:core::@class::int
+                          staticType: null
+                          token: int @39
+                        type: int
+                      TypeName
+                        name: SimpleIdentifier
+                          staticElement: dart:core::@class::int
+                          staticType: null
+                          token: int @44
+                        type: int
+                    leftBracket: < @0
+                    rightBracket: > @0
+                spreadOperator: ...? @0
+            isMap: true
+            staticType: Map<int, int>
+            typeArguments: TypeArgumentList
+              arguments
+                TypeName
+                  name: SimpleIdentifier
+                    staticElement: dart:core::@class::int
+                    staticType: null
+                    token: int @24
+                  type: int
+                TypeName
+                  name: SimpleIdentifier
+                    staticElement: dart:core::@class::int
+                    staticType: null
+                    token: int @29
+                  type: int
+              leftBracket: < @0
+              rightBracket: > @0
+    accessors
+      synthetic static get x @13
+        returnType: Object
+''');
   }
 
+  /// TODO(scheglov) review location
   test_const_methodInvocation() async {
     var library = await checkLibrary(r'''
 T f<T>(T a) => a;
 const b = f<int>(0);
 ''');
-    checkElementText(
-      library,
-      r'''
-const int b;
-  constantInitializer
-    MethodInvocation
-      argumentList: ArgumentList
-        arguments
-          IntegerLiteral
-            literal: 0
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const b @24
+        type: int
+        constantInitializer
+          MethodInvocation
+            argumentList: ArgumentList
+              arguments
+                IntegerLiteral
+                  literal: 0 @35
+                  staticType: int
+              leftParenthesis: ( @34
+              rightParenthesis: ) @36
+            methodName: SimpleIdentifier
+              staticElement: self::@function::f
+              staticType: T Function<T>(T)
+              token: f @28
+            staticInvokeType: int Function(int)
             staticType: int
-      methodName: SimpleIdentifier
-        staticElement: self::@function::f
-        staticType: T Function<T>(T)
-        token: f
-      staticInvokeType: int Function(int)
-      staticType: int
-      typeArgumentTypes
-        int
-      typeArguments: TypeArgumentList
-        arguments
-          TypeName
-            name: SimpleIdentifier
-              staticElement: dart:core::@class::int
-              staticType: null
-              token: int
-            type: int
-T f(T a) {}
-  typeParameters
-    T
-      bound: null
-      defaultType: null
-''',
-      withResolvedAst: true,
-    );
+            typeArgumentTypes
+              int
+            typeArguments: TypeArgumentList
+              arguments
+                TypeName
+                  name: SimpleIdentifier
+                    staticElement: dart:core::@class::int
+                    staticType: null
+                    token: int @30
+                  type: int
+              leftBracket: < @0
+              rightBracket: > @0
+    accessors
+      synthetic static get b @24
+        returnType: int
+    functions
+      f @2
+        typeParameters
+          covariant T @4
+        parameters
+          requiredPositional a @9
+            type: T
+        returnType: T
+''');
   }
 
   test_const_parameterDefaultValue_initializingFormal_functionTyped() async {
@@ -3955,12 +8606,29 @@
 int foo() => 42;
 ''');
     checkElementText(library, r'''
-class C {
-  final dynamic x;
-  const C({final dynamic this.x:
-        foo/*location: test.dart;foo*/});
-}
-int foo() {}
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          final x @18
+            type: dynamic
+        constructors
+          const @29
+            parameters
+              optionalNamed final this.x @37
+                type: dynamic
+                constantInitializer
+                  SimpleIdentifier
+                    staticElement: self::@function::foo
+                    staticType: int Function()
+                    token: foo @-1
+        accessors
+          synthetic get x @18
+            returnType: dynamic
+    functions
+      foo @53
+        returnType: int
 ''');
   }
 
@@ -3972,10 +8640,33 @@
 }
 ''');
     checkElementText(library, r'''
-class C {
-  final dynamic x;
-  const C({final dynamic this.x: 1 + 2});
-}
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          final x @18
+            type: dynamic
+        constructors
+          const @29
+            parameters
+              optionalNamed final this.x @37
+                type: dynamic
+                constantInitializer
+                  BinaryExpression
+                    leftOperand: IntegerLiteral
+                      literal: 1 @0
+                      staticType: int
+                    operator: + @0
+                    rightOperand: IntegerLiteral
+                      literal: 2 @0
+                      staticType: int
+                    staticElement: dart:core::@class::num::@method::+
+                    staticInvokeType: null
+                    staticType: int
+        accessors
+          synthetic get x @18
+            returnType: dynamic
 ''');
   }
 
@@ -3987,10 +8678,33 @@
 }
 ''');
     checkElementText(library, r'''
-class C {
-  final dynamic x;
-  const C([final dynamic this.x = 1 + 2]);
-}
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          final x @18
+            type: dynamic
+        constructors
+          const @29
+            parameters
+              optionalPositional final this.x @37
+                type: dynamic
+                constantInitializer
+                  BinaryExpression
+                    leftOperand: IntegerLiteral
+                      literal: 1 @0
+                      staticType: int
+                    operator: + @0
+                    rightOperand: IntegerLiteral
+                      literal: 2 @0
+                      staticType: int
+                    staticElement: dart:core::@class::num::@method::+
+                    staticInvokeType: null
+                    staticType: int
+        accessors
+          synthetic get x @18
+            returnType: dynamic
 ''');
   }
 
@@ -4006,14 +8720,92 @@
 }
 ''');
     checkElementText(library, r'''
-class C {
-  const C.positional([dynamic p = 1 + 2]);
-  const C.named({dynamic p: 1 + 2});
-  void methodPositional([dynamic p = 1 + 2]) {}
-  void methodPositionalWithoutDefault([dynamic p]) {}
-  void methodNamed({dynamic p: 1 + 2}) {}
-  void methodNamedWithoutDefault({dynamic p}) {}
-}
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          const positional @20
+            periodOffset: 19
+            nameEnd: 30
+            parameters
+              optionalPositional p @32
+                type: dynamic
+                constantInitializer
+                  BinaryExpression
+                    leftOperand: IntegerLiteral
+                      literal: 1 @0
+                      staticType: int
+                    operator: + @0
+                    rightOperand: IntegerLiteral
+                      literal: 2 @0
+                      staticType: int
+                    staticElement: dart:core::@class::num::@method::+
+                    staticInvokeType: null
+                    staticType: int
+          const named @55
+            periodOffset: 54
+            nameEnd: 60
+            parameters
+              optionalNamed p @62
+                type: dynamic
+                constantInitializer
+                  BinaryExpression
+                    leftOperand: IntegerLiteral
+                      literal: 1 @0
+                      staticType: int
+                    operator: + @0
+                    rightOperand: IntegerLiteral
+                      literal: 2 @0
+                      staticType: int
+                    staticElement: dart:core::@class::num::@method::+
+                    staticInvokeType: null
+                    staticType: int
+        methods
+          methodPositional @81
+            parameters
+              optionalPositional p @99
+                type: dynamic
+                constantInitializer
+                  BinaryExpression
+                    leftOperand: IntegerLiteral
+                      literal: 1 @0
+                      staticType: int
+                    operator: + @0
+                    rightOperand: IntegerLiteral
+                      literal: 2 @0
+                      staticType: int
+                    staticElement: dart:core::@class::num::@method::+
+                    staticInvokeType: null
+                    staticType: int
+            returnType: void
+          methodPositionalWithoutDefault @121
+            parameters
+              optionalPositional p @153
+                type: dynamic
+            returnType: void
+          methodNamed @167
+            parameters
+              optionalNamed p @180
+                type: dynamic
+                constantInitializer
+                  BinaryExpression
+                    leftOperand: IntegerLiteral
+                      literal: 1 @0
+                      staticType: int
+                    operator: + @0
+                    rightOperand: IntegerLiteral
+                      literal: 2 @0
+                      staticType: int
+                    staticElement: dart:core::@class::num::@method::+
+                    staticInvokeType: null
+                    staticType: int
+            returnType: void
+          methodNamedWithoutDefault @201
+            parameters
+              optionalNamed p @228
+                type: dynamic
+            returnType: void
 ''');
   }
 
@@ -4022,31 +8814,37 @@
 const a = 0;
 const b = a++;
 ''');
-    checkElementText(
-      library,
-      r'''
-const int a;
-  constantInitializer
-    IntegerLiteral
-      literal: 0
-      staticType: int
-const int b;
-  constantInitializer
-    PostfixExpression
-      operand: SimpleIdentifier
-        staticElement: <null>
-        staticType: null
-        token: a
-      operator: ++
-      readElement: self::@getter::a
-      readType: int
-      staticElement: dart:core::@class::num::@method::+
-      staticType: int
-      writeElement: self::@getter::a
-      writeType: dynamic
-''',
-      withResolvedAst: true,
-    );
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const a @6
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 0 @10
+            staticType: int
+      static const b @19
+        type: int
+        constantInitializer
+          PostfixExpression
+            operand: SimpleIdentifier
+              staticElement: <null>
+              staticType: null
+              token: a @23
+            operator: ++ @0
+            readElement: self::@getter::a
+            readType: int
+            staticElement: dart:core::@class::num::@method::+
+            staticType: int
+            writeElement: self::@getter::a
+            writeType: dynamic
+    accessors
+      synthetic static get a @6
+        returnType: int
+      synthetic static get b @19
+        returnType: int
+''');
   }
 
   test_const_postfixExpression_nullCheck() async {
@@ -4054,27 +8852,33 @@
 const int? a = 0;
 const b = a!;
 ''');
-    checkElementText(
-      library,
-      r'''
-const int? a;
-  constantInitializer
-    IntegerLiteral
-      literal: 0
-      staticType: int
-const int b;
-  constantInitializer
-    PostfixExpression
-      operand: SimpleIdentifier
-        staticElement: self::@getter::a
-        staticType: int?
-        token: a
-      operator: !
-      staticElement: <null>
-      staticType: int
-''',
-      withResolvedAst: true,
-    );
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const a @11
+        type: int?
+        constantInitializer
+          IntegerLiteral
+            literal: 0 @15
+            staticType: int
+      static const b @24
+        type: int
+        constantInitializer
+          PostfixExpression
+            operand: SimpleIdentifier
+              staticElement: self::@getter::a
+              staticType: int?
+              token: a @28
+            operator: ! @0
+            staticElement: <null>
+            staticType: int
+    accessors
+      synthetic static get a @11
+        returnType: int?
+      synthetic static get b @24
+        returnType: int
+''');
   }
 
   test_const_prefixExpression_class_unaryMinus() async {
@@ -4082,27 +8886,33 @@
 const a = 0;
 const b = -a;
 ''');
-    checkElementText(
-      library,
-      r'''
-const int a;
-  constantInitializer
-    IntegerLiteral
-      literal: 0
-      staticType: int
-const int b;
-  constantInitializer
-    PrefixExpression
-      operand: SimpleIdentifier
-        staticElement: self::@getter::a
-        staticType: int
-        token: a
-      operator: -
-      staticElement: dart:core::@class::int::@method::unary-
-      staticType: int
-''',
-      withResolvedAst: true,
-    );
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const a @6
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 0 @10
+            staticType: int
+      static const b @19
+        type: int
+        constantInitializer
+          PrefixExpression
+            operand: SimpleIdentifier
+              staticElement: self::@getter::a
+              staticType: int
+              token: a @24
+            operator: - @23
+            staticElement: dart:core::@class::int::@method::unary-
+            staticType: int
+    accessors
+      synthetic static get a @6
+        returnType: int
+      synthetic static get b @19
+        returnType: int
+''');
   }
 
   test_const_prefixExpression_extension_unaryMinus() async {
@@ -4117,23 +8927,27 @@
 import 'a.dart';
 const b = -a;
 ''');
-    checkElementText(
-      library,
-      r'''
-import 'package:test/a.dart';
-const int b;
-  constantInitializer
-    PrefixExpression
-      operand: SimpleIdentifier
-        staticElement: package:test/a.dart::@getter::a
-        staticType: Object
-        token: a
-      operator: -
-      staticElement: package:test/a.dart::@extension::E::@method::unary-
-      staticType: int
-''',
-      withResolvedAst: true,
-    );
+    checkElementText(library, r'''
+library
+  imports
+    package:test/a.dart
+  definingUnit
+    topLevelVariables
+      static const b @23
+        type: int
+        constantInitializer
+          PrefixExpression
+            operand: SimpleIdentifier
+              staticElement: package:test/a.dart::@getter::a
+              staticType: Object
+              token: a @28
+            operator: - @27
+            staticElement: package:test/a.dart::@extension::E::@method::unary-
+            staticType: int
+    accessors
+      synthetic static get b @23
+        returnType: int
+''');
   }
 
   test_const_prefixExpression_increment() async {
@@ -4141,31 +8955,37 @@
 const a = 0;
 const b = ++a;
 ''');
-    checkElementText(
-      library,
-      r'''
-const int a;
-  constantInitializer
-    IntegerLiteral
-      literal: 0
-      staticType: int
-const int b;
-  constantInitializer
-    PrefixExpression
-      operand: SimpleIdentifier
-        staticElement: <null>
-        staticType: null
-        token: a
-      operator: ++
-      readElement: self::@getter::a
-      readType: int
-      staticElement: dart:core::@class::num::@method::+
-      staticType: int
-      writeElement: self::@getter::a
-      writeType: dynamic
-''',
-      withResolvedAst: true,
-    );
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const a @6
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 0 @10
+            staticType: int
+      static const b @19
+        type: int
+        constantInitializer
+          PrefixExpression
+            operand: SimpleIdentifier
+              staticElement: <null>
+              staticType: null
+              token: a @25
+            operator: ++ @23
+            readElement: self::@getter::a
+            readType: int
+            staticElement: dart:core::@class::num::@method::+
+            staticType: int
+            writeElement: self::@getter::a
+            writeType: dynamic
+    accessors
+      synthetic static get a @6
+        returnType: int
+      synthetic static get b @19
+        returnType: int
+''');
   }
 
   test_const_reference_staticField() async {
@@ -4176,12 +8996,41 @@
 const V = C.F;
 ''');
     checkElementText(library, r'''
-class C {
-  static const int F = 42;
-}
-const int V =
-        C/*location: test.dart;C*/.
-        F/*location: test.dart;C;F?*/;
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          static const F @29
+            type: int
+            constantInitializer
+              IntegerLiteral
+                literal: 42 @33
+                staticType: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic static get F @29
+            returnType: int
+    topLevelVariables
+      static const V @45
+        type: int
+        constantInitializer
+          PrefixedIdentifier
+            identifier: SimpleIdentifier
+              staticElement: self::@class::C::@getter::F
+              staticType: int
+              token: F @51
+            period: . @0
+            prefix: SimpleIdentifier
+              staticElement: self::@class::C
+              staticType: null
+              token: C @49
+            staticElement: self::@class::C::@getter::F
+            staticType: int
+    accessors
+      synthetic static get V @45
+        returnType: int
 ''');
   }
 
@@ -4196,10 +9045,29 @@
 const V = C.F;
 ''');
     checkElementText(library, r'''
-import 'a.dart';
-const int V =
-        C/*location: a.dart;C*/.
-        F/*location: a.dart;C;F?*/;
+library
+  imports
+    a.dart
+  definingUnit
+    topLevelVariables
+      static const V @23
+        type: int
+        constantInitializer
+          PrefixedIdentifier
+            identifier: SimpleIdentifier
+              staticElement: a.dart::@class::C::@getter::F
+              staticType: int
+              token: F @29
+            period: . @0
+            prefix: SimpleIdentifier
+              staticElement: a.dart::@class::C
+              staticType: null
+              token: C @27
+            staticElement: a.dart::@class::C::@getter::F
+            staticType: int
+    accessors
+      synthetic static get V @23
+        returnType: int
 ''');
   }
 
@@ -4214,11 +9082,36 @@
 const V = p.C.F;
 ''');
     checkElementText(library, r'''
-import 'a.dart' as p;
-const int V =
-        p/*location: test.dart;p*/.
-        C/*location: a.dart;C*/.
-        F/*location: a.dart;C;F?*/;
+library
+  imports
+    a.dart as p @19
+  definingUnit
+    topLevelVariables
+      static const V @28
+        type: int
+        constantInitializer
+          PropertyAccess
+            operator: . @0
+            propertyName: SimpleIdentifier
+              staticElement: a.dart::@class::C::@getter::F
+              staticType: int
+              token: F @36
+            staticType: int
+            target: PrefixedIdentifier
+              identifier: SimpleIdentifier
+                staticElement: a.dart::@class::C
+                staticType: null
+                token: C @34
+              period: . @0
+              prefix: SimpleIdentifier
+                staticElement: self::@prefix::p
+                staticType: null
+                token: p @32
+              staticElement: a.dart::@class::C
+              staticType: null
+    accessors
+      synthetic static get V @28
+        returnType: int
 ''');
   }
 
@@ -4230,12 +9123,39 @@
 const V = C.m;
 ''');
     checkElementText(library, r'''
-class C {
-  static int m(int a, String b) {}
-}
-const int Function(int, String) V =
-        C/*location: test.dart;C*/.
-        m/*location: test.dart;C;m*/;
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          synthetic @-1
+        methods
+          static m @23
+            parameters
+              requiredPositional a @29
+                type: int
+              requiredPositional b @39
+                type: String
+            returnType: int
+    topLevelVariables
+      static const V @57
+        type: int Function(int, String)
+        constantInitializer
+          PrefixedIdentifier
+            identifier: SimpleIdentifier
+              staticElement: self::@class::C::@method::m
+              staticType: int Function(int, String)
+              token: m @63
+            period: . @0
+            prefix: SimpleIdentifier
+              staticElement: self::@class::C
+              staticType: null
+              token: C @61
+            staticElement: self::@class::C::@method::m
+            staticType: int Function(int, String)
+    accessors
+      synthetic static get V @57
+        returnType: int Function(int, String)
 ''');
   }
 
@@ -4250,10 +9170,29 @@
 const V = C.m;
 ''');
     checkElementText(library, r'''
-import 'a.dart';
-const int Function(int, String) V =
-        C/*location: a.dart;C*/.
-        m/*location: a.dart;C;m*/;
+library
+  imports
+    a.dart
+  definingUnit
+    topLevelVariables
+      static const V @23
+        type: int Function(int, String)
+        constantInitializer
+          PrefixedIdentifier
+            identifier: SimpleIdentifier
+              staticElement: a.dart::@class::C::@method::m
+              staticType: int Function(int, String)
+              token: m @29
+            period: . @0
+            prefix: SimpleIdentifier
+              staticElement: a.dart::@class::C
+              staticType: null
+              token: C @27
+            staticElement: a.dart::@class::C::@method::m
+            staticType: int Function(int, String)
+    accessors
+      synthetic static get V @23
+        returnType: int Function(int, String)
 ''');
   }
 
@@ -4268,11 +9207,36 @@
 const V = p.C.m;
 ''');
     checkElementText(library, r'''
-import 'a.dart' as p;
-const int Function(int, String) V =
-        p/*location: test.dart;p*/.
-        C/*location: a.dart;C*/.
-        m/*location: a.dart;C;m*/;
+library
+  imports
+    a.dart as p @19
+  definingUnit
+    topLevelVariables
+      static const V @28
+        type: int Function(int, String)
+        constantInitializer
+          PropertyAccess
+            operator: . @0
+            propertyName: SimpleIdentifier
+              staticElement: a.dart::@class::C::@method::m
+              staticType: int Function(int, String)
+              token: m @36
+            staticType: int Function(int, String)
+            target: PrefixedIdentifier
+              identifier: SimpleIdentifier
+                staticElement: a.dart::@class::C
+                staticType: null
+                token: C @34
+              period: . @0
+              prefix: SimpleIdentifier
+                staticElement: self::@prefix::p
+                staticType: null
+                token: p @32
+              staticElement: a.dart::@class::C
+              staticType: null
+    accessors
+      synthetic static get V @28
+        returnType: int Function(int, String)
 ''');
   }
 
@@ -4285,14 +9249,37 @@
 const x = E.f;
 ''');
     checkElementText(library, r'''
-class A {
-}
-extension E on A {
-  static void f() {}
-}
-const void Function() x =
-        E/*location: test.dart;E*/.
-        f/*location: test.dart;E;f*/;
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          synthetic @-1
+    extensions
+      E @21
+        extendedType: A
+        methods
+          static f @44
+            returnType: void
+    topLevelVariables
+      static const x @59
+        type: void Function()
+        constantInitializer
+          PrefixedIdentifier
+            identifier: SimpleIdentifier
+              staticElement: self::@extension::E::@method::f
+              staticType: void Function()
+              token: f @65
+            period: . @0
+            prefix: SimpleIdentifier
+              staticElement: self::@extension::E
+              staticType: null
+              token: E @63
+            staticElement: self::@extension::E::@method::f
+            staticType: void Function()
+    accessors
+      synthetic static get x @59
+        returnType: void Function()
 ''');
   }
 
@@ -4302,9 +9289,22 @@
 const V = foo;
 ''');
     checkElementText(library, r'''
-const dynamic Function() V =
-        foo/*location: test.dart;foo*/;
-dynamic foo() {}
+library
+  definingUnit
+    topLevelVariables
+      static const V @15
+        type: dynamic Function()
+        constantInitializer
+          SimpleIdentifier
+            staticElement: self::@function::foo
+            staticType: dynamic Function()
+            token: foo @19
+    accessors
+      synthetic static get V @15
+        returnType: dynamic Function()
+    functions
+      foo @0
+        returnType: dynamic
 ''');
   }
 
@@ -4314,9 +9314,28 @@
 const V = foo;
 ''');
     checkElementText(library, r'''
-const R Function<P, R>(P) V =
-        foo/*location: test.dart;foo*/;
-R foo<P, R>(P p) {}
+library
+  definingUnit
+    topLevelVariables
+      static const V @26
+        type: R Function<P, R>(P)
+        constantInitializer
+          SimpleIdentifier
+            staticElement: self::@function::foo
+            staticType: R Function<P, R>(P)
+            token: foo @30
+    accessors
+      synthetic static get V @26
+        returnType: R Function<P, R>(P)
+    functions
+      foo @2
+        typeParameters
+          covariant P @6
+          covariant R @9
+        parameters
+          requiredPositional p @14
+            type: P
+        returnType: R
 ''');
   }
 
@@ -4329,9 +9348,21 @@
 const V = foo;
 ''');
     checkElementText(library, r'''
-import 'a.dart';
-const dynamic Function() V =
-        foo/*location: a.dart;foo*/;
+library
+  imports
+    a.dart
+  definingUnit
+    topLevelVariables
+      static const V @23
+        type: dynamic Function()
+        constantInitializer
+          SimpleIdentifier
+            staticElement: a.dart::@function::foo
+            staticType: dynamic Function()
+            token: foo @27
+    accessors
+      synthetic static get V @23
+        returnType: dynamic Function()
 ''');
   }
 
@@ -4344,10 +9375,29 @@
 const V = p.foo;
 ''');
     checkElementText(library, r'''
-import 'a.dart' as p;
-const dynamic Function() V =
-        p/*location: test.dart;p*/.
-        foo/*location: a.dart;foo*/;
+library
+  imports
+    a.dart as p @19
+  definingUnit
+    topLevelVariables
+      static const V @28
+        type: dynamic Function()
+        constantInitializer
+          PrefixedIdentifier
+            identifier: SimpleIdentifier
+              staticElement: a.dart::@function::foo
+              staticType: dynamic Function()
+              token: foo @34
+            period: . @0
+            prefix: SimpleIdentifier
+              staticElement: self::@prefix::p
+              staticType: null
+              token: p @32
+            staticElement: a.dart::@function::foo
+            staticType: dynamic Function()
+    accessors
+      synthetic static get V @28
+        returnType: dynamic Function()
 ''');
   }
 
@@ -4357,9 +9407,35 @@
 const B = A + 2;
 ''');
     checkElementText(library, r'''
-const int A = 1;
-const int B =
-        A/*location: test.dart;A?*/ + 2;
+library
+  definingUnit
+    topLevelVariables
+      static const A @6
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 1 @10
+            staticType: int
+      static const B @19
+        type: int
+        constantInitializer
+          BinaryExpression
+            leftOperand: SimpleIdentifier
+              staticElement: self::@getter::A
+              staticType: int
+              token: A @23
+            operator: + @0
+            rightOperand: IntegerLiteral
+              literal: 2 @27
+              staticType: int
+            staticElement: dart:core::@class::num::@method::+
+            staticInvokeType: null
+            staticType: int
+    accessors
+      synthetic static get A @6
+        returnType: int
+      synthetic static get B @19
+        returnType: int
 ''');
   }
 
@@ -4372,9 +9448,29 @@
 const B = A + 2;
 ''');
     checkElementText(library, r'''
-import 'a.dart';
-const int B =
-        A/*location: a.dart;A?*/ + 2;
+library
+  imports
+    a.dart
+  definingUnit
+    topLevelVariables
+      static const B @23
+        type: int
+        constantInitializer
+          BinaryExpression
+            leftOperand: SimpleIdentifier
+              staticElement: a.dart::@getter::A
+              staticType: int
+              token: A @27
+            operator: + @0
+            rightOperand: IntegerLiteral
+              literal: 2 @31
+              staticType: int
+            staticElement: dart:core::@class::num::@method::+
+            staticInvokeType: null
+            staticType: int
+    accessors
+      synthetic static get B @23
+        returnType: int
 ''');
   }
 
@@ -4387,10 +9483,37 @@
 const B = p.A + 2;
 ''');
     checkElementText(library, r'''
-import 'a.dart' as p;
-const int B =
-        p/*location: test.dart;p*/.
-        A/*location: a.dart;A?*/ + 2;
+library
+  imports
+    a.dart as p @19
+  definingUnit
+    topLevelVariables
+      static const B @28
+        type: int
+        constantInitializer
+          BinaryExpression
+            leftOperand: PrefixedIdentifier
+              identifier: SimpleIdentifier
+                staticElement: a.dart::@getter::A
+                staticType: int
+                token: A @34
+              period: . @0
+              prefix: SimpleIdentifier
+                staticElement: self::@prefix::p
+                staticType: null
+                token: p @32
+              staticElement: a.dart::@getter::A
+              staticType: int
+            operator: + @0
+            rightOperand: IntegerLiteral
+              literal: 2 @38
+              staticType: int
+            staticElement: dart:core::@class::num::@method::+
+            staticInvokeType: null
+            staticType: int
+    accessors
+      synthetic static get B @28
+        returnType: int
 ''');
   }
 
@@ -4409,33 +9532,120 @@
 const vFunctionTypeAlias = F;
 ''');
     checkElementText(library, r'''
-typedef F = dynamic Function(int a, String b);
-enum E {
-  synthetic final int index;
-  synthetic static const List<E> values;
-  static const E a;
-  static const E b;
-  static const E c;
-  String toString() {}
-}
-class C {
-}
-class D<T> {
-}
-const Type vDynamic =
-        dynamic/*location: dynamic*/;
-const Type vNull =
-        Null/*location: dart:core;Null*/;
-const Type vObject =
-        Object/*location: dart:core;Object*/;
-const Type vClass =
-        C/*location: test.dart;C*/;
-const Type vGenericClass =
-        D/*location: test.dart;D*/;
-const Type vEnum =
-        E/*location: test.dart;E*/;
-const Type vFunctionTypeAlias =
-        F/*location: test.dart;F*/;
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          synthetic @-1
+      class D @17
+        typeParameters
+          covariant T @19
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+    enums
+      enum E @30
+        fields
+          synthetic final index @-1
+            type: int
+          synthetic static const values @-1
+            type: List<E>
+          static const a @33
+            type: E
+          static const b @36
+            type: E
+          static const c @39
+            type: E
+        accessors
+          synthetic get index @-1
+            returnType: int
+          synthetic static get values @-1
+            returnType: List<E>
+          synthetic static get a @-1
+            returnType: E
+          synthetic static get b @-1
+            returnType: E
+          synthetic static get c @-1
+            returnType: E
+        methods
+          toString @-1
+            returnType: String
+    typeAliases
+      functionTypeAliasBased F @50
+        aliasedType: dynamic Function(int, String)
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional a @-1
+              type: int
+            requiredPositional b @-1
+              type: String
+          returnType: dynamic
+    topLevelVariables
+      static const vDynamic @76
+        type: Type
+        constantInitializer
+          SimpleIdentifier
+            staticElement: dynamic@-1
+            staticType: Type
+            token: dynamic @87
+      static const vNull @102
+        type: Type
+        constantInitializer
+          SimpleIdentifier
+            staticElement: dart:core::@class::Null
+            staticType: Type
+            token: Null @110
+      static const vObject @122
+        type: Type
+        constantInitializer
+          SimpleIdentifier
+            staticElement: dart:core::@class::Object
+            staticType: Type
+            token: Object @132
+      static const vClass @146
+        type: Type
+        constantInitializer
+          SimpleIdentifier
+            staticElement: self::@class::C
+            staticType: Type
+            token: C @155
+      static const vGenericClass @164
+        type: Type
+        constantInitializer
+          SimpleIdentifier
+            staticElement: self::@class::D
+            staticType: Type
+            token: D @180
+      static const vEnum @189
+        type: Type
+        constantInitializer
+          SimpleIdentifier
+            staticElement: self::@enum::E
+            staticType: Type
+            token: E @197
+      static const vFunctionTypeAlias @206
+        type: Type
+        constantInitializer
+          SimpleIdentifier
+            staticElement: self::@typeAlias::F
+            staticType: Type
+            token: F @227
+    accessors
+      synthetic static get vDynamic @76
+        returnType: Type
+      synthetic static get vNull @102
+        returnType: Type
+      synthetic static get vObject @122
+        returnType: Type
+      synthetic static get vClass @146
+        returnType: Type
+      synthetic static get vGenericClass @164
+        returnType: Type
+      synthetic static get vEnum @189
+        returnType: Type
+      synthetic static get vFunctionTypeAlias @206
+        returnType: Type
 ''');
   }
 
@@ -4447,10 +9657,23 @@
 }
 ''');
     checkElementText(library, r'''
-typedef F = dynamic Function();
-class C {
-  final List<dynamic Function()> f;
-}
+library
+  definingUnit
+    classes
+      class C @19
+        fields
+          final f @31
+            type: List<dynamic Function()>
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get f @31
+            returnType: List<dynamic Function()>
+    typeAliases
+      functionTypeAliasBased F @8
+        aliasedType: dynamic Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: dynamic
 ''');
   }
 
@@ -4467,13 +9690,39 @@
 const vFunctionTypeAlias = F;
 ''');
     checkElementText(library, r'''
-import 'a.dart';
-const Type vClass =
-        C/*location: a.dart;C*/;
-const Type vEnum =
-        E/*location: a.dart;E*/;
-const Type vFunctionTypeAlias =
-        F/*location: a.dart;F*/;
+library
+  imports
+    a.dart
+  definingUnit
+    topLevelVariables
+      static const vClass @23
+        type: Type
+        constantInitializer
+          SimpleIdentifier
+            staticElement: a.dart::@class::C
+            staticType: Type
+            token: C @32
+      static const vEnum @41
+        type: Type
+        constantInitializer
+          SimpleIdentifier
+            staticElement: a.dart::@enum::E
+            staticType: Type
+            token: E @49
+      static const vFunctionTypeAlias @58
+        type: Type
+        constantInitializer
+          SimpleIdentifier
+            staticElement: a.dart::@typeAlias::F
+            staticType: Type
+            token: F @79
+    accessors
+      synthetic static get vClass @23
+        returnType: Type
+      synthetic static get vEnum @41
+        returnType: Type
+      synthetic static get vFunctionTypeAlias @58
+        returnType: Type
 ''');
   }
 
@@ -4490,16 +9739,63 @@
 const vFunctionTypeAlias = p.F;
 ''');
     checkElementText(library, r'''
-import 'a.dart' as p;
-const Type vClass =
-        p/*location: test.dart;p*/.
-        C/*location: a.dart;C*/;
-const Type vEnum =
-        p/*location: test.dart;p*/.
-        E/*location: a.dart;E*/;
-const Type vFunctionTypeAlias =
-        p/*location: test.dart;p*/.
-        F/*location: a.dart;F*/;
+library
+  imports
+    a.dart as p @19
+  definingUnit
+    topLevelVariables
+      static const vClass @28
+        type: Type
+        constantInitializer
+          PrefixedIdentifier
+            identifier: SimpleIdentifier
+              staticElement: a.dart::@class::C
+              staticType: Type
+              token: C @39
+            period: . @0
+            prefix: SimpleIdentifier
+              staticElement: self::@prefix::p
+              staticType: null
+              token: p @37
+            staticElement: a.dart::@class::C
+            staticType: Type
+      static const vEnum @48
+        type: Type
+        constantInitializer
+          PrefixedIdentifier
+            identifier: SimpleIdentifier
+              staticElement: a.dart::@enum::E
+              staticType: Type
+              token: E @58
+            period: . @0
+            prefix: SimpleIdentifier
+              staticElement: self::@prefix::p
+              staticType: null
+              token: p @56
+            staticElement: a.dart::@enum::E
+            staticType: Type
+      static const vFunctionTypeAlias @67
+        type: Type
+        constantInitializer
+          PrefixedIdentifier
+            identifier: SimpleIdentifier
+              staticElement: a.dart::@typeAlias::F
+              staticType: Type
+              token: F @90
+            period: . @0
+            prefix: SimpleIdentifier
+              staticElement: self::@prefix::p
+              staticType: null
+              token: p @88
+            staticElement: a.dart::@typeAlias::F
+            staticType: Type
+    accessors
+      synthetic static get vClass @28
+        returnType: Type
+      synthetic static get vEnum @48
+        returnType: Type
+      synthetic static get vFunctionTypeAlias @67
+        returnType: Type
 ''');
   }
 
@@ -4510,9 +9806,21 @@
 }
 ''');
     checkElementText(library, r'''
-class C<T> {
-  final List<T> f;
-}
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        fields
+          final f @21
+            type: List<T>
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get f @21
+            returnType: List<T>
 ''');
   }
 
@@ -4521,8 +9829,19 @@
 const V = foo;
 ''', allowErrors: true);
     checkElementText(library, r'''
-const dynamic V =
-        foo/*location: null*/;
+library
+  definingUnit
+    topLevelVariables
+      static const V @6
+        type: dynamic
+        constantInitializer
+          SimpleIdentifier
+            staticElement: <null>
+            staticType: dynamic
+            token: foo @10
+    accessors
+      synthetic static get V @6
+        returnType: dynamic
 ''');
   }
 
@@ -4532,11 +9851,31 @@
 const V = C.foo;
 ''', allowErrors: true);
     checkElementText(library, r'''
-class C {
-}
-const dynamic V =
-        C/*location: test.dart;C*/.
-        foo/*location: null*/;
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          synthetic @-1
+    topLevelVariables
+      static const V @17
+        type: dynamic
+        constantInitializer
+          PrefixedIdentifier
+            identifier: SimpleIdentifier
+              staticElement: <null>
+              staticType: dynamic
+              token: foo @23
+            period: . @0
+            prefix: SimpleIdentifier
+              staticElement: self::@class::C
+              staticType: null
+              token: C @21
+            staticElement: <null>
+            staticType: dynamic
+    accessors
+      synthetic static get V @17
+        returnType: dynamic
 ''');
   }
 
@@ -4549,11 +9888,36 @@
 const V = p.C.foo;
 ''', allowErrors: true);
     checkElementText(library, r'''
-import 'foo.dart' as p;
-const dynamic V =
-        p/*location: test.dart;p*/.
-        C/*location: foo.dart;C*/.
-        foo/*location: null*/;
+library
+  imports
+    foo.dart as p @21
+  definingUnit
+    topLevelVariables
+      static const V @30
+        type: dynamic
+        constantInitializer
+          PropertyAccess
+            operator: . @0
+            propertyName: SimpleIdentifier
+              staticElement: <null>
+              staticType: dynamic
+              token: foo @38
+            staticType: dynamic
+            target: PrefixedIdentifier
+              identifier: SimpleIdentifier
+                staticElement: foo.dart::@class::C
+                staticType: null
+                token: C @36
+              period: . @0
+              prefix: SimpleIdentifier
+                staticElement: self::@prefix::p
+                staticType: null
+                token: p @34
+              staticElement: foo.dart::@class::C
+              staticType: null
+    accessors
+      synthetic static get V @30
+        returnType: dynamic
 ''');
   }
 
@@ -4561,13 +9925,39 @@
     var library = await checkLibrary('''
 const Object x = const <int>{if (true) 1};
 ''');
-    checkElementText(
-        library,
-        '''
-const Object x = const <
-        int/*location: dart:core;int*/>{if (true) 1}/*isSet*/;
-''',
-        withTypes: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const x @13
+        type: Object
+        constantInitializer
+          SetOrMapLiteral
+            constKeyword: const @0
+            elements
+              IfElement
+                condition: BooleanLiteral
+                  literal: true @33
+                  staticType: bool
+                thenStatement: IntegerLiteral
+                  literal: 1 @39
+                  staticType: int
+            isMap: false
+            staticType: Set<int>
+            typeArguments: TypeArgumentList
+              arguments
+                TypeName
+                  name: SimpleIdentifier
+                    staticElement: dart:core::@class::int
+                    staticType: null
+                    token: int @24
+                  type: int
+              leftBracket: < @0
+              rightBracket: > @0
+    accessors
+      synthetic static get x @13
+        returnType: Object
+''');
   }
 
   @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/44522')
@@ -4575,13 +9965,10 @@
     var library = await checkLibrary('''
 const Object x = const <int>{if (true) 1 else 2];
 ''');
-    checkElementText(
-        library,
-        '''
+    checkElementText(library, r'''
 const Object x = const <
         int/*location: dart:core;int*/>{if (true) 1 else 2}/*isSet*/;
-''',
-        withTypes: true);
+''');
   }
 
   test_const_set_inferredType() async {
@@ -4591,40 +9978,127 @@
     var library = await checkLibrary('''
 const Object x = const {1};
 ''');
-    checkElementText(
-        library,
-        '''
-const Object x = const /*typeArgs=int*/{1}/*isSet*/;
-''',
-        withTypes: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const x @13
+        type: Object
+        constantInitializer
+          SetOrMapLiteral
+            constKeyword: const @0
+            elements
+              IntegerLiteral
+                literal: 1 @24
+                staticType: int
+            isMap: false
+            staticType: Set<int>
+    accessors
+      synthetic static get x @13
+        returnType: Object
+''');
   }
 
   test_const_set_spread() async {
     var library = await checkLibrary('''
 const Object x = const <int>{...<int>{1}};
 ''');
-    checkElementText(
-        library,
-        '''
-const Object x = const <
-        int/*location: dart:core;int*/>{...<
-        int/*location: dart:core;int*/>{1}/*isSet*/}/*isSet*/;
-''',
-        withTypes: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const x @13
+        type: Object
+        constantInitializer
+          SetOrMapLiteral
+            constKeyword: const @0
+            elements
+              SpreadElement
+                expressions: SetOrMapLiteral
+                  elements
+                    IntegerLiteral
+                      literal: 1 @38
+                      staticType: int
+                  isMap: false
+                  staticType: Set<int>
+                  typeArguments: TypeArgumentList
+                    arguments
+                      TypeName
+                        name: SimpleIdentifier
+                          staticElement: dart:core::@class::int
+                          staticType: null
+                          token: int @33
+                        type: int
+                    leftBracket: < @0
+                    rightBracket: > @0
+                spreadOperator: ... @0
+            isMap: false
+            staticType: Set<int>
+            typeArguments: TypeArgumentList
+              arguments
+                TypeName
+                  name: SimpleIdentifier
+                    staticElement: dart:core::@class::int
+                    staticType: null
+                    token: int @24
+                  type: int
+              leftBracket: < @0
+              rightBracket: > @0
+    accessors
+      synthetic static get x @13
+        returnType: Object
+''');
   }
 
   test_const_set_spread_null_aware() async {
     var library = await checkLibrary('''
 const Object x = const <int>{...?<int>{1}};
 ''');
-    checkElementText(
-        library,
-        '''
-const Object x = const <
-        int/*location: dart:core;int*/>{...?<
-        int/*location: dart:core;int*/>{1}/*isSet*/}/*isSet*/;
-''',
-        withTypes: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const x @13
+        type: Object
+        constantInitializer
+          SetOrMapLiteral
+            constKeyword: const @0
+            elements
+              SpreadElement
+                expressions: SetOrMapLiteral
+                  elements
+                    IntegerLiteral
+                      literal: 1 @39
+                      staticType: int
+                  isMap: false
+                  staticType: Set<int>
+                  typeArguments: TypeArgumentList
+                    arguments
+                      TypeName
+                        name: SimpleIdentifier
+                          staticElement: dart:core::@class::int
+                          staticType: null
+                          token: int @34
+                        type: int
+                    leftBracket: < @0
+                    rightBracket: > @0
+                spreadOperator: ...? @0
+            isMap: false
+            staticType: Set<int>
+            typeArguments: TypeArgumentList
+              arguments
+                TypeName
+                  name: SimpleIdentifier
+                    staticElement: dart:core::@class::int
+                    staticType: null
+                    token: int @24
+                  type: int
+              leftBracket: < @0
+              rightBracket: > @0
+    accessors
+      synthetic static get x @13
+        returnType: Object
+''');
   }
 
   test_const_topLevel_binary() async {
@@ -4649,24 +10123,298 @@
 const vLessEqual = 1 <= 2;
 ''');
     checkElementText(library, r'''
-const bool vEqual = 1 == 2;
-const bool vAnd = true && false;
-const bool vOr = false || true;
-const int vBitXor = 1 ^ 2;
-const int vBitAnd = 1 & 2;
-const int vBitOr = 1 | 2;
-const int vBitShiftLeft = 1 << 2;
-const int vBitShiftRight = 1 >> 2;
-const int vAdd = 1 + 2;
-const int vSubtract = 1 - 2;
-const int vMiltiply = 1 * 2;
-const double vDivide = 1 / 2;
-const int vFloorDivide = 1 ~/ 2;
-const int vModulo = 1 % 2;
-const bool vGreater = 1 > 2;
-const bool vGreaterEqual = 1 >= 2;
-const bool vLess = 1 < 2;
-const bool vLessEqual = 1 <= 2;
+library
+  definingUnit
+    topLevelVariables
+      static const vEqual @6
+        type: bool
+        constantInitializer
+          BinaryExpression
+            leftOperand: IntegerLiteral
+              literal: 1 @15
+              staticType: int
+            operator: == @0
+            rightOperand: IntegerLiteral
+              literal: 2 @20
+              staticType: int
+            staticElement: dart:core::@class::num::@method::==
+            staticInvokeType: null
+            staticType: bool
+      static const vAnd @29
+        type: bool
+        constantInitializer
+          BinaryExpression
+            leftOperand: BooleanLiteral
+              literal: true @36
+              staticType: bool
+            operator: && @0
+            rightOperand: BooleanLiteral
+              literal: false @44
+              staticType: bool
+            staticElement: <null>
+            staticInvokeType: null
+            staticType: bool
+      static const vOr @57
+        type: bool
+        constantInitializer
+          BinaryExpression
+            leftOperand: BooleanLiteral
+              literal: false @63
+              staticType: bool
+            operator: || @0
+            rightOperand: BooleanLiteral
+              literal: true @72
+              staticType: bool
+            staticElement: <null>
+            staticInvokeType: null
+            staticType: bool
+      static const vBitXor @84
+        type: int
+        constantInitializer
+          BinaryExpression
+            leftOperand: IntegerLiteral
+              literal: 1 @94
+              staticType: int
+            operator: ^ @0
+            rightOperand: IntegerLiteral
+              literal: 2 @98
+              staticType: int
+            staticElement: dart:core::@class::int::@method::^
+            staticInvokeType: null
+            staticType: int
+      static const vBitAnd @107
+        type: int
+        constantInitializer
+          BinaryExpression
+            leftOperand: IntegerLiteral
+              literal: 1 @117
+              staticType: int
+            operator: & @0
+            rightOperand: IntegerLiteral
+              literal: 2 @121
+              staticType: int
+            staticElement: dart:core::@class::int::@method::&
+            staticInvokeType: null
+            staticType: int
+      static const vBitOr @130
+        type: int
+        constantInitializer
+          BinaryExpression
+            leftOperand: IntegerLiteral
+              literal: 1 @139
+              staticType: int
+            operator: | @0
+            rightOperand: IntegerLiteral
+              literal: 2 @143
+              staticType: int
+            staticElement: dart:core::@class::int::@method::|
+            staticInvokeType: null
+            staticType: int
+      static const vBitShiftLeft @152
+        type: int
+        constantInitializer
+          BinaryExpression
+            leftOperand: IntegerLiteral
+              literal: 1 @168
+              staticType: int
+            operator: << @0
+            rightOperand: IntegerLiteral
+              literal: 2 @173
+              staticType: int
+            staticElement: dart:core::@class::int::@method::<<
+            staticInvokeType: null
+            staticType: int
+      static const vBitShiftRight @182
+        type: int
+        constantInitializer
+          BinaryExpression
+            leftOperand: IntegerLiteral
+              literal: 1 @199
+              staticType: int
+            operator: >> @0
+            rightOperand: IntegerLiteral
+              literal: 2 @204
+              staticType: int
+            staticElement: dart:core::@class::int::@method::>>
+            staticInvokeType: null
+            staticType: int
+      static const vAdd @213
+        type: int
+        constantInitializer
+          BinaryExpression
+            leftOperand: IntegerLiteral
+              literal: 1 @220
+              staticType: int
+            operator: + @0
+            rightOperand: IntegerLiteral
+              literal: 2 @224
+              staticType: int
+            staticElement: dart:core::@class::num::@method::+
+            staticInvokeType: null
+            staticType: int
+      static const vSubtract @233
+        type: int
+        constantInitializer
+          BinaryExpression
+            leftOperand: IntegerLiteral
+              literal: 1 @245
+              staticType: int
+            operator: - @0
+            rightOperand: IntegerLiteral
+              literal: 2 @249
+              staticType: int
+            staticElement: dart:core::@class::num::@method::-
+            staticInvokeType: null
+            staticType: int
+      static const vMiltiply @258
+        type: int
+        constantInitializer
+          BinaryExpression
+            leftOperand: IntegerLiteral
+              literal: 1 @270
+              staticType: int
+            operator: * @0
+            rightOperand: IntegerLiteral
+              literal: 2 @274
+              staticType: int
+            staticElement: dart:core::@class::num::@method::*
+            staticInvokeType: null
+            staticType: int
+      static const vDivide @283
+        type: double
+        constantInitializer
+          BinaryExpression
+            leftOperand: IntegerLiteral
+              literal: 1 @293
+              staticType: int
+            operator: / @0
+            rightOperand: IntegerLiteral
+              literal: 2 @297
+              staticType: int
+            staticElement: dart:core::@class::num::@method::/
+            staticInvokeType: null
+            staticType: double
+      static const vFloorDivide @306
+        type: int
+        constantInitializer
+          BinaryExpression
+            leftOperand: IntegerLiteral
+              literal: 1 @321
+              staticType: int
+            operator: ~/ @0
+            rightOperand: IntegerLiteral
+              literal: 2 @326
+              staticType: int
+            staticElement: dart:core::@class::num::@method::~/
+            staticInvokeType: null
+            staticType: int
+      static const vModulo @335
+        type: int
+        constantInitializer
+          BinaryExpression
+            leftOperand: IntegerLiteral
+              literal: 1 @345
+              staticType: int
+            operator: % @0
+            rightOperand: IntegerLiteral
+              literal: 2 @349
+              staticType: int
+            staticElement: dart:core::@class::num::@method::%
+            staticInvokeType: null
+            staticType: int
+      static const vGreater @358
+        type: bool
+        constantInitializer
+          BinaryExpression
+            leftOperand: IntegerLiteral
+              literal: 1 @369
+              staticType: int
+            operator: > @0
+            rightOperand: IntegerLiteral
+              literal: 2 @373
+              staticType: int
+            staticElement: dart:core::@class::num::@method::>
+            staticInvokeType: null
+            staticType: bool
+      static const vGreaterEqual @382
+        type: bool
+        constantInitializer
+          BinaryExpression
+            leftOperand: IntegerLiteral
+              literal: 1 @398
+              staticType: int
+            operator: >= @0
+            rightOperand: IntegerLiteral
+              literal: 2 @403
+              staticType: int
+            staticElement: dart:core::@class::num::@method::>=
+            staticInvokeType: null
+            staticType: bool
+      static const vLess @412
+        type: bool
+        constantInitializer
+          BinaryExpression
+            leftOperand: IntegerLiteral
+              literal: 1 @420
+              staticType: int
+            operator: < @0
+            rightOperand: IntegerLiteral
+              literal: 2 @424
+              staticType: int
+            staticElement: dart:core::@class::num::@method::<
+            staticInvokeType: null
+            staticType: bool
+      static const vLessEqual @433
+        type: bool
+        constantInitializer
+          BinaryExpression
+            leftOperand: IntegerLiteral
+              literal: 1 @446
+              staticType: int
+            operator: <= @0
+            rightOperand: IntegerLiteral
+              literal: 2 @451
+              staticType: int
+            staticElement: dart:core::@class::num::@method::<=
+            staticInvokeType: null
+            staticType: bool
+    accessors
+      synthetic static get vEqual @6
+        returnType: bool
+      synthetic static get vAnd @29
+        returnType: bool
+      synthetic static get vOr @57
+        returnType: bool
+      synthetic static get vBitXor @84
+        returnType: int
+      synthetic static get vBitAnd @107
+        returnType: int
+      synthetic static get vBitOr @130
+        returnType: int
+      synthetic static get vBitShiftLeft @152
+        returnType: int
+      synthetic static get vBitShiftRight @182
+        returnType: int
+      synthetic static get vAdd @213
+        returnType: int
+      synthetic static get vSubtract @233
+        returnType: int
+      synthetic static get vMiltiply @258
+        returnType: int
+      synthetic static get vDivide @283
+        returnType: double
+      synthetic static get vFloorDivide @306
+        returnType: int
+      synthetic static get vModulo @335
+        returnType: int
+      synthetic static get vGreater @358
+        returnType: bool
+      synthetic static get vGreaterEqual @382
+        returnType: bool
+      synthetic static get vLess @412
+        returnType: bool
+      synthetic static get vLessEqual @433
+        returnType: bool
 ''');
   }
 
@@ -4675,7 +10423,40 @@
 const vConditional = (1 == 2) ? 11 : 22;
 ''');
     checkElementText(library, r'''
-const int vConditional = (1 == 2) ? 11 : 22;
+library
+  definingUnit
+    topLevelVariables
+      static const vConditional @6
+        type: int
+        constantInitializer
+          ConditionalExpression
+            colon: : @0
+            condition: ParenthesizedExpression
+              expression: BinaryExpression
+                leftOperand: IntegerLiteral
+                  literal: 1 @22
+                  staticType: int
+                operator: == @0
+                rightOperand: IntegerLiteral
+                  literal: 2 @27
+                  staticType: int
+                staticElement: dart:core::@class::num::@method::==
+                staticInvokeType: null
+                staticType: bool
+              leftParenthesis: ( @21
+              rightParenthesis: ) @28
+              staticType: bool
+            elseExpression: IntegerLiteral
+              literal: 22 @37
+              staticType: int
+            question: ? @0
+            staticType: int
+            thenExpression: IntegerLiteral
+              literal: 11 @32
+              staticType: int
+    accessors
+      synthetic static get vConditional @6
+        returnType: int
 ''');
   }
 
@@ -4684,7 +10465,40 @@
 const vIdentical = (1 == 2) ? 11 : 22;
 ''');
     checkElementText(library, r'''
-const int vIdentical = (1 == 2) ? 11 : 22;
+library
+  definingUnit
+    topLevelVariables
+      static const vIdentical @6
+        type: int
+        constantInitializer
+          ConditionalExpression
+            colon: : @0
+            condition: ParenthesizedExpression
+              expression: BinaryExpression
+                leftOperand: IntegerLiteral
+                  literal: 1 @20
+                  staticType: int
+                operator: == @0
+                rightOperand: IntegerLiteral
+                  literal: 2 @25
+                  staticType: int
+                staticElement: dart:core::@class::num::@method::==
+                staticInvokeType: null
+                staticType: bool
+              leftParenthesis: ( @19
+              rightParenthesis: ) @26
+              staticType: bool
+            elseExpression: IntegerLiteral
+              literal: 22 @35
+              staticType: int
+            question: ? @0
+            staticType: int
+            thenExpression: IntegerLiteral
+              literal: 11 @30
+              staticType: int
+    accessors
+      synthetic static get vIdentical @6
+        returnType: int
 ''');
   }
 
@@ -4693,7 +10507,26 @@
 const vIfNull = 1 ?? 2.0;
 ''');
     checkElementText(library, r'''
-const num vIfNull = 1 ?? 2.0;
+library
+  definingUnit
+    topLevelVariables
+      static const vIfNull @6
+        type: num
+        constantInitializer
+          BinaryExpression
+            leftOperand: IntegerLiteral
+              literal: 1 @16
+              staticType: int
+            operator: ?? @0
+            rightOperand: DoubleLiteral
+              literal: 2.0 @21
+              staticType: double
+            staticElement: <null>
+            staticInvokeType: null
+            staticType: num
+    accessors
+      synthetic static get vIfNull @6
+        returnType: num
 ''');
   }
 
@@ -4714,19 +10547,143 @@
 const vSymbol = #aaa.bbb.ccc;
 ''');
     checkElementText(library, r'''
-const dynamic vNull = null;
-const bool vBoolFalse = false;
-const bool vBoolTrue = true;
-const int vIntPositive = 1;
-const int vIntNegative = -2;
-const int vIntLong1 = 9223372036854775807;
-const int vIntLong2 = -1;
-const int vIntLong3 = -9223372036854775808;
-const double vDouble = 2.3;
-const String vString = 'abc';
-const String vStringConcat = 'aaabbb';
-const String vStringInterpolation = 'aaa ${true} ${42} bbb';
-const Symbol vSymbol = #aaa.bbb.ccc;
+library
+  definingUnit
+    topLevelVariables
+      static const vNull @6
+        type: dynamic
+        constantInitializer
+          NullLiteral
+            literal: null @0
+            staticType: null
+      static const vBoolFalse @26
+        type: bool
+        constantInitializer
+          BooleanLiteral
+            literal: false @39
+            staticType: bool
+      static const vBoolTrue @52
+        type: bool
+        constantInitializer
+          BooleanLiteral
+            literal: true @64
+            staticType: bool
+      static const vIntPositive @76
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 1 @91
+            staticType: int
+      static const vIntNegative @100
+        type: int
+        constantInitializer
+          PrefixExpression
+            operand: IntegerLiteral
+              literal: 2 @116
+              staticType: int
+            operator: - @115
+            staticElement: dart:core::@class::int::@method::unary-
+            staticType: int
+      static const vIntLong1 @125
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 9223372036854775807 @137
+            staticType: int
+      static const vIntLong2 @163
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: -1 @175
+            staticType: int
+      static const vIntLong3 @201
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: -9223372036854775808 @213
+            staticType: int
+      static const vDouble @239
+        type: double
+        constantInitializer
+          DoubleLiteral
+            literal: 2.3 @249
+            staticType: double
+      static const vString @260
+        type: String
+        constantInitializer
+          SimpleStringLiteral
+            literal: 'abc' @270
+      static const vStringConcat @283
+        type: String
+        constantInitializer
+          AdjacentStrings
+            staticType: null
+            stringValue: aaabbb
+            strings
+              SimpleStringLiteral
+                literal: 'aaa' @299
+              SimpleStringLiteral
+                literal: 'bbb' @305
+      static const vStringInterpolation @318
+        type: String
+        constantInitializer
+          StringInterpolation
+            elements
+              InterpolationString
+                contents: aaa  @0
+              InterpolationExpression
+                expression: BooleanLiteral
+                  literal: true @348
+                  staticType: bool
+              InterpolationString
+                contents:   @0
+              InterpolationExpression
+                expression: IntegerLiteral
+                  literal: 42 @356
+                  staticType: int
+              InterpolationString
+                contents:  bbb @0
+            staticType: null
+            stringValue: null
+      static const vSymbol @372
+        type: Symbol
+        constantInitializer
+          SymbolLiteral
+            components
+              components: aaa
+                offset: 0
+              components: bbb
+                offset: 0
+              components: ccc
+                offset: 0
+            poundSign: # @0
+    accessors
+      synthetic static get vNull @6
+        returnType: dynamic
+      synthetic static get vBoolFalse @26
+        returnType: bool
+      synthetic static get vBoolTrue @52
+        returnType: bool
+      synthetic static get vIntPositive @76
+        returnType: int
+      synthetic static get vIntNegative @100
+        returnType: int
+      synthetic static get vIntLong1 @125
+        returnType: int
+      synthetic static get vIntLong2 @163
+        returnType: int
+      synthetic static get vIntLong3 @201
+        returnType: int
+      synthetic static get vDouble @239
+        returnType: double
+      synthetic static get vString @260
+        returnType: String
+      synthetic static get vStringConcat @283
+        returnType: String
+      synthetic static get vStringInterpolation @318
+        returnType: String
+      synthetic static get vSymbol @372
+        returnType: Symbol
 ''');
   }
 
@@ -4738,31 +10695,40 @@
   a?.length,
 ];
 ''');
-    checkElementText(
-        library,
-        r'''
-const String? a;
-  constantInitializer
-    SimpleStringLiteral
-      literal: ''
-const List<int?> b;
-  constantInitializer
-    ListLiteral
-      elements
-        PropertyAccess
-          operator: ?.
-          propertyName: SimpleIdentifier
-            staticElement: dart:core::@class::String::@getter::length
-            staticType: int
-            token: length
-          staticType: int?
-          target: SimpleIdentifier
-            staticElement: self::@getter::a
-            staticType: String?
-            token: a
-      staticType: List<int?>
-''',
-        withResolvedAst: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const a @14
+        type: String?
+        constantInitializer
+          SimpleStringLiteral
+            literal: '' @18
+      static const b @40
+        type: List<int?>
+        constantInitializer
+          ListLiteral
+            elements
+              PropertyAccess
+                operator: ?. @0
+                propertyName: SimpleIdentifier
+                  staticElement: dart:core::@class::String::@getter::length
+                  staticType: int
+                  token: length @51
+                staticType: int?
+                target: SimpleIdentifier
+                  staticElement: self::@getter::a
+                  staticType: String?
+                  token: a @48
+            leftBracket: [ @0
+            rightBracket: ] @0
+            staticType: List<int?>
+    accessors
+      synthetic static get a @14
+        returnType: String?
+      synthetic static get b @40
+        returnType: List<int?>
+''');
   }
 
   test_const_topLevel_parenthesis() async {
@@ -4772,10 +10738,87 @@
 const int v3 = ('aaa' + 'bbb').length;
 ''');
     checkElementText(library, r'''
-const int v1 = (1 + 2) * 3;
-const int v2 = -(1 + 2);
-const int v3 = ('aaa' + 'bbb').
-        length/*location: dart:core;String;length?*/;
+library
+  definingUnit
+    topLevelVariables
+      static const v1 @10
+        type: int
+        constantInitializer
+          BinaryExpression
+            leftOperand: ParenthesizedExpression
+              expression: BinaryExpression
+                leftOperand: IntegerLiteral
+                  literal: 1 @16
+                  staticType: int
+                operator: + @0
+                rightOperand: IntegerLiteral
+                  literal: 2 @20
+                  staticType: int
+                staticElement: dart:core::@class::num::@method::+
+                staticInvokeType: null
+                staticType: int
+              leftParenthesis: ( @15
+              rightParenthesis: ) @21
+              staticType: int
+            operator: * @0
+            rightOperand: IntegerLiteral
+              literal: 3 @25
+              staticType: int
+            staticElement: dart:core::@class::num::@method::*
+            staticInvokeType: null
+            staticType: int
+      static const v2 @38
+        type: int
+        constantInitializer
+          PrefixExpression
+            operand: ParenthesizedExpression
+              expression: BinaryExpression
+                leftOperand: IntegerLiteral
+                  literal: 1 @45
+                  staticType: int
+                operator: + @0
+                rightOperand: IntegerLiteral
+                  literal: 2 @49
+                  staticType: int
+                staticElement: dart:core::@class::num::@method::+
+                staticInvokeType: null
+                staticType: int
+              leftParenthesis: ( @44
+              rightParenthesis: ) @50
+              staticType: int
+            operator: - @43
+            staticElement: dart:core::@class::int::@method::unary-
+            staticType: int
+      static const v3 @63
+        type: int
+        constantInitializer
+          PropertyAccess
+            operator: . @0
+            propertyName: SimpleIdentifier
+              staticElement: dart:core::@class::String::@getter::length
+              staticType: int
+              token: length @84
+            staticType: int
+            target: ParenthesizedExpression
+              expression: BinaryExpression
+                leftOperand: SimpleStringLiteral
+                  literal: 'aaa' @69
+                operator: + @0
+                rightOperand: SimpleStringLiteral
+                  literal: 'bbb' @77
+                staticElement: dart:core::@class::String::@method::+
+                staticInvokeType: null
+                staticType: String
+              leftParenthesis: ( @68
+              rightParenthesis: ) @82
+              staticType: String
+    accessors
+      synthetic static get v1 @10
+        returnType: int
+      synthetic static get v2 @38
+        returnType: int
+      synthetic static get v3 @63
+        returnType: int
 ''');
   }
 
@@ -4787,10 +10830,62 @@
 const vComplement = ~1;
 ''');
     checkElementText(library, r'''
-const bool vNotEqual = 1 != 2;
-const bool vNot = !true;
-const int vNegate = -1;
-const int vComplement = ~1;
+library
+  definingUnit
+    topLevelVariables
+      static const vNotEqual @6
+        type: bool
+        constantInitializer
+          BinaryExpression
+            leftOperand: IntegerLiteral
+              literal: 1 @18
+              staticType: int
+            operator: != @0
+            rightOperand: IntegerLiteral
+              literal: 2 @23
+              staticType: int
+            staticElement: dart:core::@class::num::@method::==
+            staticInvokeType: null
+            staticType: bool
+      static const vNot @32
+        type: bool
+        constantInitializer
+          PrefixExpression
+            operand: BooleanLiteral
+              literal: true @40
+              staticType: bool
+            operator: ! @39
+            staticElement: <null>
+            staticType: bool
+      static const vNegate @52
+        type: int
+        constantInitializer
+          PrefixExpression
+            operand: IntegerLiteral
+              literal: 1 @63
+              staticType: int
+            operator: - @62
+            staticElement: dart:core::@class::int::@method::unary-
+            staticType: int
+      static const vComplement @72
+        type: int
+        constantInitializer
+          PrefixExpression
+            operand: IntegerLiteral
+              literal: 1 @87
+              staticType: int
+            operator: ~ @86
+            staticElement: dart:core::@class::int::@method::~
+            staticType: int
+    accessors
+      synthetic static get vNotEqual @6
+        returnType: bool
+      synthetic static get vNot @32
+        returnType: bool
+      synthetic static get vNegate @52
+        returnType: int
+      synthetic static get vComplement @72
+        returnType: int
 ''');
   }
 
@@ -4799,7 +10894,18 @@
 const vSuper = super;
 ''');
     checkElementText(library, r'''
-const dynamic vSuper = super;
+library
+  definingUnit
+    topLevelVariables
+      static const vSuper @6
+        type: dynamic
+        constantInitializer
+          SuperExpression
+            staticType: dynamic
+            superKeyword: super @0
+    accessors
+      synthetic static get vSuper @6
+        returnType: dynamic
 ''');
   }
 
@@ -4808,7 +10914,18 @@
 const vThis = this;
 ''');
     checkElementText(library, r'''
-const dynamic vThis = this;
+library
+  definingUnit
+    topLevelVariables
+      static const vThis @6
+        type: dynamic
+        constantInitializer
+          ThisExpression
+            staticType: dynamic
+            thisKeyword: this @0
+    accessors
+      synthetic static get vThis @6
+        returnType: dynamic
 ''');
   }
 
@@ -4817,7 +10934,20 @@
 const c = throw 42;
 ''');
     checkElementText(library, r'''
-const Never c = throw 42;
+library
+  definingUnit
+    topLevelVariables
+      static const c @6
+        type: Never
+        constantInitializer
+          ThrowExpression
+            expression: IntegerLiteral
+              literal: 42 @16
+              staticType: int
+            staticType: Never
+    accessors
+      synthetic static get c @6
+        returnType: Never
 ''');
   }
 
@@ -4827,7 +10957,20 @@
 const c = throw 42;
 ''');
     checkElementText(library, r'''
-const dynamic c = throw 42;
+library
+  definingUnit
+    topLevelVariables
+      static const c @6
+        type: dynamic
+        constantInitializer
+          ThrowExpression
+            expression: IntegerLiteral
+              literal: 42 @16
+              staticType: int*
+            staticType: Never*
+    accessors
+      synthetic static get c @6
+        returnType: dynamic
 ''');
   }
 
@@ -4841,22 +10984,186 @@
 const vInterfaceWithTypeArguments2 = const <Map<int, List<String>>>[];
 ''');
     checkElementText(library, r'''
-const List<Null> vNull = const <
-        Null/*location: dart:core;Null*/>[];
-const List<dynamic> vDynamic = const <
-        dynamic/*location: dynamic*/>[1, 2, 3];
-const List<int> vInterfaceNoTypeParameters = const <
-        int/*location: dart:core;int*/>[1, 2, 3];
-const List<List<dynamic>> vInterfaceNoTypeArguments = const <
-        List/*location: dart:core;List*/>[];
-const List<List<String>> vInterfaceWithTypeArguments = const <
-        List/*location: dart:core;List*/<
-        String/*location: dart:core;String*/>>[];
-const List<Map<int, List<String>>> vInterfaceWithTypeArguments2 = const <
-        Map/*location: dart:core;Map*/<
-        int/*location: dart:core;int*/,
-        List/*location: dart:core;List*/<
-        String/*location: dart:core;String*/>>>[];
+library
+  definingUnit
+    topLevelVariables
+      static const vNull @6
+        type: List<Null>
+        constantInitializer
+          ListLiteral
+            constKeyword: const @0
+            leftBracket: [ @0
+            rightBracket: ] @0
+            staticType: List<Null>
+            typeArguments: TypeArgumentList
+              arguments
+                TypeName
+                  name: SimpleIdentifier
+                    staticElement: dart:core::@class::Null
+                    staticType: null
+                    token: Null @21
+                  type: Null
+              leftBracket: < @0
+              rightBracket: > @0
+      static const vDynamic @36
+        type: List<dynamic>
+        constantInitializer
+          ListLiteral
+            constKeyword: const @0
+            elements
+              IntegerLiteral
+                literal: 1 @63
+                staticType: int
+              IntegerLiteral
+                literal: 2 @66
+                staticType: int
+              IntegerLiteral
+                literal: 3 @69
+                staticType: int
+            leftBracket: [ @0
+            rightBracket: ] @0
+            staticType: List<dynamic>
+            typeArguments: TypeArgumentList
+              arguments
+                TypeName
+                  name: SimpleIdentifier
+                    staticElement: dynamic@-1
+                    staticType: null
+                    token: dynamic @54
+                  type: dynamic
+              leftBracket: < @0
+              rightBracket: > @0
+      static const vInterfaceNoTypeParameters @79
+        type: List<int>
+        constantInitializer
+          ListLiteral
+            constKeyword: const @0
+            elements
+              IntegerLiteral
+                literal: 1 @120
+                staticType: int
+              IntegerLiteral
+                literal: 2 @123
+                staticType: int
+              IntegerLiteral
+                literal: 3 @126
+                staticType: int
+            leftBracket: [ @0
+            rightBracket: ] @0
+            staticType: List<int>
+            typeArguments: TypeArgumentList
+              arguments
+                TypeName
+                  name: SimpleIdentifier
+                    staticElement: dart:core::@class::int
+                    staticType: null
+                    token: int @115
+                  type: int
+              leftBracket: < @0
+              rightBracket: > @0
+      static const vInterfaceNoTypeArguments @136
+        type: List<List<dynamic>>
+        constantInitializer
+          ListLiteral
+            constKeyword: const @0
+            leftBracket: [ @0
+            rightBracket: ] @0
+            staticType: List<List<dynamic>>
+            typeArguments: TypeArgumentList
+              arguments
+                TypeName
+                  name: SimpleIdentifier
+                    staticElement: dart:core::@class::List
+                    staticType: null
+                    token: List @171
+                  type: List<dynamic>
+              leftBracket: < @0
+              rightBracket: > @0
+      static const vInterfaceWithTypeArguments @186
+        type: List<List<String>>
+        constantInitializer
+          ListLiteral
+            constKeyword: const @0
+            leftBracket: [ @0
+            rightBracket: ] @0
+            staticType: List<List<String>>
+            typeArguments: TypeArgumentList
+              arguments
+                TypeName
+                  name: SimpleIdentifier
+                    staticElement: dart:core::@class::List
+                    staticType: null
+                    token: List @223
+                  type: List<String>
+                  typeArguments: TypeArgumentList
+                    arguments
+                      TypeName
+                        name: SimpleIdentifier
+                          staticElement: dart:core::@class::String
+                          staticType: null
+                          token: String @228
+                        type: String
+                    leftBracket: < @0
+                    rightBracket: > @0
+              leftBracket: < @0
+              rightBracket: > @0
+      static const vInterfaceWithTypeArguments2 @246
+        type: List<Map<int, List<String>>>
+        constantInitializer
+          ListLiteral
+            constKeyword: const @0
+            leftBracket: [ @0
+            rightBracket: ] @0
+            staticType: List<Map<int, List<String>>>
+            typeArguments: TypeArgumentList
+              arguments
+                TypeName
+                  name: SimpleIdentifier
+                    staticElement: dart:core::@class::Map
+                    staticType: null
+                    token: Map @284
+                  type: Map<int, List<String>>
+                  typeArguments: TypeArgumentList
+                    arguments
+                      TypeName
+                        name: SimpleIdentifier
+                          staticElement: dart:core::@class::int
+                          staticType: null
+                          token: int @288
+                        type: int
+                      TypeName
+                        name: SimpleIdentifier
+                          staticElement: dart:core::@class::List
+                          staticType: null
+                          token: List @293
+                        type: List<String>
+                        typeArguments: TypeArgumentList
+                          arguments
+                            TypeName
+                              name: SimpleIdentifier
+                                staticElement: dart:core::@class::String
+                                staticType: null
+                                token: String @298
+                              type: String
+                          leftBracket: < @0
+                          rightBracket: > @0
+                    leftBracket: < @0
+                    rightBracket: > @0
+              leftBracket: < @0
+              rightBracket: > @0
+    accessors
+      synthetic static get vNull @6
+        returnType: List<Null>
+      synthetic static get vDynamic @36
+        returnType: List<dynamic>
+      synthetic static get vInterfaceNoTypeParameters @79
+        returnType: List<int>
+      synthetic static get vInterfaceNoTypeArguments @136
+        returnType: List<List<dynamic>>
+      synthetic static get vInterfaceWithTypeArguments @186
+        returnType: List<List<String>>
+      synthetic static get vInterfaceWithTypeArguments2 @246
+        returnType: List<Map<int, List<String>>>
 ''');
   }
 
@@ -4867,9 +11174,32 @@
 const v = const <C>[];
 ''');
     checkElementText(library, r'''
-import 'a.dart';
-const List<C> v = const <
-        C/*location: a.dart;C*/>[];
+library
+  imports
+    a.dart
+  definingUnit
+    topLevelVariables
+      static const v @23
+        type: List<C>
+        constantInitializer
+          ListLiteral
+            constKeyword: const @0
+            leftBracket: [ @0
+            rightBracket: ] @0
+            staticType: List<C>
+            typeArguments: TypeArgumentList
+              arguments
+                TypeName
+                  name: SimpleIdentifier
+                    staticElement: a.dart::@class::C
+                    staticType: null
+                    token: C @34
+                  type: C
+              leftBracket: < @0
+              rightBracket: > @0
+    accessors
+      synthetic static get v @23
+        returnType: List<C>
 ''');
   }
 
@@ -4880,10 +11210,40 @@
 const v = const <p.C>[];
 ''');
     checkElementText(library, r'''
-import 'a.dart' as p;
-const List<C> v = const <
-        p/*location: test.dart;p*/.
-        C/*location: a.dart;C*/>[];
+library
+  imports
+    a.dart as p @19
+  definingUnit
+    topLevelVariables
+      static const v @28
+        type: List<C>
+        constantInitializer
+          ListLiteral
+            constKeyword: const @0
+            leftBracket: [ @0
+            rightBracket: ] @0
+            staticType: List<C>
+            typeArguments: TypeArgumentList
+              arguments
+                TypeName
+                  name: PrefixedIdentifier
+                    identifier: SimpleIdentifier
+                      staticElement: a.dart::@class::C
+                      staticType: null
+                      token: C @41
+                    period: . @0
+                    prefix: SimpleIdentifier
+                      staticElement: self::@prefix::p
+                      staticType: null
+                      token: p @39
+                    staticElement: a.dart::@class::C
+                    staticType: null
+                  type: C
+              leftBracket: < @0
+              rightBracket: > @0
+    accessors
+      synthetic static get v @28
+        returnType: List<C>
 ''');
   }
 
@@ -4893,9 +11253,38 @@
 const v = const <F>[];
 ''');
     checkElementText(library, r'''
-typedef F = int Function(String id);
-const List<int Function(String)> v = const <
-        F/*location: test.dart;F*/>[];
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased F @12
+        aliasedType: int Function(String)
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional id @-1
+              type: String
+          returnType: int
+    topLevelVariables
+      static const v @32
+        type: List<int Function(String)>
+        constantInitializer
+          ListLiteral
+            constKeyword: const @0
+            leftBracket: [ @0
+            rightBracket: ] @0
+            staticType: List<int Function(String)>
+            typeArguments: TypeArgumentList
+              arguments
+                TypeName
+                  name: SimpleIdentifier
+                    staticElement: self::@typeAlias::F
+                    staticType: null
+                    token: F @43
+                  type: int Function(String)
+              leftBracket: < @0
+              rightBracket: > @0
+    accessors
+      synthetic static get v @32
+        returnType: List<int Function(String)>
 ''');
   }
 
@@ -4907,19 +11296,120 @@
 const vInterfaceWithTypeArguments = const <int, List<String>>{};
 ''');
     checkElementText(library, r'''
-const Map<dynamic, int> vDynamic1 = const <
-        dynamic/*location: dynamic*/,
-        int/*location: dart:core;int*/>{}/*isMap*/;
-const Map<int, dynamic> vDynamic2 = const <
-        int/*location: dart:core;int*/,
-        dynamic/*location: dynamic*/>{}/*isMap*/;
-const Map<int, String> vInterface = const <
-        int/*location: dart:core;int*/,
-        String/*location: dart:core;String*/>{}/*isMap*/;
-const Map<int, List<String>> vInterfaceWithTypeArguments = const <
-        int/*location: dart:core;int*/,
-        List/*location: dart:core;List*/<
-        String/*location: dart:core;String*/>>{}/*isMap*/;
+library
+  definingUnit
+    topLevelVariables
+      static const vDynamic1 @6
+        type: Map<dynamic, int>
+        constantInitializer
+          SetOrMapLiteral
+            constKeyword: const @0
+            isMap: true
+            staticType: Map<dynamic, int>
+            typeArguments: TypeArgumentList
+              arguments
+                TypeName
+                  name: SimpleIdentifier
+                    staticElement: dynamic@-1
+                    staticType: null
+                    token: dynamic @25
+                  type: dynamic
+                TypeName
+                  name: SimpleIdentifier
+                    staticElement: dart:core::@class::int
+                    staticType: null
+                    token: int @34
+                  type: int
+              leftBracket: < @0
+              rightBracket: > @0
+      static const vDynamic2 @48
+        type: Map<int, dynamic>
+        constantInitializer
+          SetOrMapLiteral
+            constKeyword: const @0
+            isMap: true
+            staticType: Map<int, dynamic>
+            typeArguments: TypeArgumentList
+              arguments
+                TypeName
+                  name: SimpleIdentifier
+                    staticElement: dart:core::@class::int
+                    staticType: null
+                    token: int @67
+                  type: int
+                TypeName
+                  name: SimpleIdentifier
+                    staticElement: dynamic@-1
+                    staticType: null
+                    token: dynamic @72
+                  type: dynamic
+              leftBracket: < @0
+              rightBracket: > @0
+      static const vInterface @90
+        type: Map<int, String>
+        constantInitializer
+          SetOrMapLiteral
+            constKeyword: const @0
+            isMap: true
+            staticType: Map<int, String>
+            typeArguments: TypeArgumentList
+              arguments
+                TypeName
+                  name: SimpleIdentifier
+                    staticElement: dart:core::@class::int
+                    staticType: null
+                    token: int @110
+                  type: int
+                TypeName
+                  name: SimpleIdentifier
+                    staticElement: dart:core::@class::String
+                    staticType: null
+                    token: String @115
+                  type: String
+              leftBracket: < @0
+              rightBracket: > @0
+      static const vInterfaceWithTypeArguments @132
+        type: Map<int, List<String>>
+        constantInitializer
+          SetOrMapLiteral
+            constKeyword: const @0
+            isMap: true
+            staticType: Map<int, List<String>>
+            typeArguments: TypeArgumentList
+              arguments
+                TypeName
+                  name: SimpleIdentifier
+                    staticElement: dart:core::@class::int
+                    staticType: null
+                    token: int @169
+                  type: int
+                TypeName
+                  name: SimpleIdentifier
+                    staticElement: dart:core::@class::List
+                    staticType: null
+                    token: List @174
+                  type: List<String>
+                  typeArguments: TypeArgumentList
+                    arguments
+                      TypeName
+                        name: SimpleIdentifier
+                          staticElement: dart:core::@class::String
+                          staticType: null
+                          token: String @179
+                        type: String
+                    leftBracket: < @0
+                    rightBracket: > @0
+              leftBracket: < @0
+              rightBracket: > @0
+    accessors
+      synthetic static get vDynamic1 @6
+        returnType: Map<dynamic, int>
+      synthetic static get vDynamic2 @48
+        returnType: Map<int, dynamic>
+      synthetic static get vInterface @90
+        returnType: Map<int, String>
+      synthetic static get vInterfaceWithTypeArguments @132
+        returnType: Map<int, List<String>>
 ''');
   }
 
@@ -4930,13 +11420,77 @@
 const vInterfaceWithTypeArguments = const <List<String>>{};
 ''');
     checkElementText(library, r'''
-const Set<dynamic> vDynamic1 = const <
-        dynamic/*location: dynamic*/>{}/*isSet*/;
-const Set<int> vInterface = const <
-        int/*location: dart:core;int*/>{}/*isSet*/;
-const Set<List<String>> vInterfaceWithTypeArguments = const <
-        List/*location: dart:core;List*/<
-        String/*location: dart:core;String*/>>{}/*isSet*/;
+library
+  definingUnit
+    topLevelVariables
+      static const vDynamic1 @6
+        type: Set<dynamic>
+        constantInitializer
+          SetOrMapLiteral
+            constKeyword: const @0
+            isMap: false
+            staticType: Set<dynamic>
+            typeArguments: TypeArgumentList
+              arguments
+                TypeName
+                  name: SimpleIdentifier
+                    staticElement: dynamic@-1
+                    staticType: null
+                    token: dynamic @25
+                  type: dynamic
+              leftBracket: < @0
+              rightBracket: > @0
+      static const vInterface @43
+        type: Set<int>
+        constantInitializer
+          SetOrMapLiteral
+            constKeyword: const @0
+            isMap: false
+            staticType: Set<int>
+            typeArguments: TypeArgumentList
+              arguments
+                TypeName
+                  name: SimpleIdentifier
+                    staticElement: dart:core::@class::int
+                    staticType: null
+                    token: int @63
+                  type: int
+              leftBracket: < @0
+              rightBracket: > @0
+      static const vInterfaceWithTypeArguments @77
+        type: Set<List<String>>
+        constantInitializer
+          SetOrMapLiteral
+            constKeyword: const @0
+            isMap: false
+            staticType: Set<List<String>>
+            typeArguments: TypeArgumentList
+              arguments
+                TypeName
+                  name: SimpleIdentifier
+                    staticElement: dart:core::@class::List
+                    staticType: null
+                    token: List @114
+                  type: List<String>
+                  typeArguments: TypeArgumentList
+                    arguments
+                      TypeName
+                        name: SimpleIdentifier
+                          staticElement: dart:core::@class::String
+                          staticType: null
+                          token: String @119
+                        type: String
+                    leftBracket: < @0
+                    rightBracket: > @0
+              leftBracket: < @0
+              rightBracket: > @0
+    accessors
+      synthetic static get vDynamic1 @6
+        returnType: Set<dynamic>
+      synthetic static get vInterface @43
+        returnType: Set<int>
+      synthetic static get vInterfaceWithTypeArguments @77
+        returnType: Set<List<String>>
 ''');
   }
 
@@ -4945,7 +11499,30 @@
 const v = const [1, 2, 3];
 ''');
     checkElementText(library, r'''
-const List<int> v = const [1, 2, 3];
+library
+  definingUnit
+    topLevelVariables
+      static const v @6
+        type: List<int>
+        constantInitializer
+          ListLiteral
+            constKeyword: const @0
+            elements
+              IntegerLiteral
+                literal: 1 @17
+                staticType: int
+              IntegerLiteral
+                literal: 2 @20
+                staticType: int
+              IntegerLiteral
+                literal: 3 @23
+                staticType: int
+            leftBracket: [ @0
+            rightBracket: ] @0
+            staticType: List<int>
+    accessors
+      synthetic static get v @6
+        returnType: List<int>
 ''');
   }
 
@@ -4954,7 +11531,38 @@
 const v = const {0: 'aaa', 1: 'bbb', 2: 'ccc'};
 ''');
     checkElementText(library, r'''
-const Map<int, String> v = const {0: 'aaa', 1: 'bbb', 2: 'ccc'}/*isMap*/;
+library
+  definingUnit
+    topLevelVariables
+      static const v @6
+        type: Map<int, String>
+        constantInitializer
+          SetOrMapLiteral
+            constKeyword: const @0
+            elements
+              SetOrMapLiteral
+                key: IntegerLiteral
+                  literal: 0 @17
+                  staticType: int
+                value: SimpleStringLiteral
+                  literal: 'aaa' @20
+              SetOrMapLiteral
+                key: IntegerLiteral
+                  literal: 1 @27
+                  staticType: int
+                value: SimpleStringLiteral
+                  literal: 'bbb' @30
+              SetOrMapLiteral
+                key: IntegerLiteral
+                  literal: 2 @37
+                  staticType: int
+                value: SimpleStringLiteral
+                  literal: 'ccc' @40
+            isMap: true
+            staticType: Map<int, String>
+    accessors
+      synthetic static get v @6
+        returnType: Map<int, String>
 ''');
   }
 
@@ -4963,7 +11571,29 @@
 const v = const {0, 1, 2};
 ''');
     checkElementText(library, r'''
-const Set<int> v = const {0, 1, 2}/*isSet*/;
+library
+  definingUnit
+    topLevelVariables
+      static const v @6
+        type: Set<int>
+        constantInitializer
+          SetOrMapLiteral
+            constKeyword: const @0
+            elements
+              IntegerLiteral
+                literal: 0 @17
+                staticType: int
+              IntegerLiteral
+                literal: 1 @20
+                staticType: int
+              IntegerLiteral
+                literal: 2 @23
+                staticType: int
+            isMap: false
+            staticType: Set<int>
+    accessors
+      synthetic static get v @6
+        returnType: Set<int>
 ''');
   }
 
@@ -4975,17 +11605,49 @@
 final vIndex = E.a.index;
 ''');
     checkElementText(library, r'''
-enum E {
-  synthetic final int index;
-  synthetic static const List<E> values;
-  static const E a;
-  static const E b;
-  static const E c;
-  String toString() {}
-}
-final E vValue;
-final List<E> vValues;
-final int vIndex;
+library
+  definingUnit
+    enums
+      enum E @5
+        fields
+          synthetic final index @-1
+            type: int
+          synthetic static const values @-1
+            type: List<E>
+          static const a @8
+            type: E
+          static const b @11
+            type: E
+          static const c @14
+            type: E
+        accessors
+          synthetic get index @-1
+            returnType: int
+          synthetic static get values @-1
+            returnType: List<E>
+          synthetic static get a @-1
+            returnType: E
+          synthetic static get b @-1
+            returnType: E
+          synthetic static get c @-1
+            returnType: E
+        methods
+          toString @-1
+            returnType: String
+    topLevelVariables
+      static final vValue @23
+        type: E
+      static final vValues @43
+        type: List<E>
+      static final vIndex @69
+        type: int
+    accessors
+      synthetic static get vValue @23
+        returnType: E
+      synthetic static get vValues @43
+        returnType: List<E>
+      synthetic static get vIndex @69
+        returnType: int
 ''');
   }
 
@@ -4995,13 +11657,33 @@
 final vToString = E.a.toString();
 ''');
     checkElementText(library, r'''
-enum E {
-  synthetic final int index;
-  synthetic static const List<E> values;
-  static const E a;
-  String toString() {}
-}
-final String vToString;
+library
+  definingUnit
+    enums
+      enum E @5
+        fields
+          synthetic final index @-1
+            type: int
+          synthetic static const values @-1
+            type: List<E>
+          static const a @8
+            type: E
+        accessors
+          synthetic get index @-1
+            returnType: int
+          synthetic static get values @-1
+            returnType: List<E>
+          synthetic static get a @-1
+            returnType: E
+        methods
+          toString @-1
+            returnType: String
+    topLevelVariables
+      static final vToString @17
+        type: String
+    accessors
+      synthetic static get vToString @17
+        returnType: String
 ''');
   }
 
@@ -5013,11 +11695,31 @@
 }
 ''');
     checkElementText(library, r'''
-class C {
-  static const dynamic a =
-        b/*location: test.dart;C;b?*/;
-  static const dynamic b = null;
-}
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          static const a @25
+            type: dynamic
+            constantInitializer
+              SimpleIdentifier
+                staticElement: self::@class::C::@getter::b
+                staticType: dynamic
+                token: b @29
+          static const b @47
+            type: dynamic
+            constantInitializer
+              NullLiteral
+                literal: null @0
+                staticType: null
+        constructors
+          synthetic @-1
+        accessors
+          synthetic static get a @25
+            returnType: dynamic
+          synthetic static get b @47
+            returnType: dynamic
 ''');
   }
 
@@ -5029,11 +11731,26 @@
 }
 ''');
     checkElementText(library, r'''
-class C {
-  static const dynamic Function() a =
-        m/*location: test.dart;C;m*/;
-  static dynamic m() {}
-}
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          static const a @25
+            type: dynamic Function()
+            constantInitializer
+              SimpleIdentifier
+                staticElement: self::@class::C::@method::m
+                staticType: dynamic Function()
+                token: m @29
+        constructors
+          synthetic @-1
+        accessors
+          synthetic static get a @25
+            returnType: dynamic Function()
+        methods
+          static m @41
+            returnType: dynamic
 ''');
   }
 
@@ -5046,12 +11763,13 @@
   C();
 }''');
     checkElementText(library, r'''
-class C {
-  /**
-   * Docs
-   */
-  C();
-}
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          @34
+            documentationComment: /**\n   * Docs\n   */
 ''');
   }
 
@@ -5062,10 +11780,29 @@
 }
 ''');
     checkElementText(library, r'''
-class C {
-  const C(int x) : assert(
-        x/*location: test.dart;C;;x*/ >= 42);
-}
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          const @18
+            parameters
+              requiredPositional x @24
+                type: int
+            constantInitializers
+              AssertInitializer
+                condition: BinaryExpression
+                  leftOperand: SimpleIdentifier
+                    staticElement: x@24
+                    staticType: int
+                    token: x @-1
+                  operator: >= @0
+                  rightOperand: IntegerLiteral
+                    literal: 42 @0
+                    staticType: int
+                  staticElement: dart:core::@class::num::@method::>=
+                  staticInvokeType: null
+                  staticType: bool
 ''');
   }
 
@@ -5076,10 +11813,31 @@
 }
 ''');
     checkElementText(library, r'''
-class C {
-  const C(int x) : assert(
-        x/*location: test.dart;C;;x*/ >= 42, 'foo');
-}
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          const @18
+            parameters
+              requiredPositional x @24
+                type: int
+            constantInitializers
+              AssertInitializer
+                condition: BinaryExpression
+                  leftOperand: SimpleIdentifier
+                    staticElement: x@24
+                    staticType: int
+                    token: x @-1
+                  operator: >= @0
+                  rightOperand: IntegerLiteral
+                    literal: 42 @0
+                    staticType: int
+                  staticElement: dart:core::@class::num::@method::>=
+                  staticInvokeType: null
+                  staticType: bool
+                message: SimpleStringLiteral
+                  literal: 'foo' @0
 ''');
   }
 
@@ -5091,11 +11849,28 @@
 }
 ''');
     checkElementText(library, r'''
-class C {
-  final dynamic x;
-  const C() :
-        x/*location: test.dart;C;x*/ = 42;
-}
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          final x @18
+            type: dynamic
+        constructors
+          const @29
+            constantInitializers
+              ConstructorFieldInitializer
+                equals: = @0
+                expression: IntegerLiteral
+                  literal: 42 @0
+                  staticType: int
+                fieldName: SimpleIdentifier
+                  staticElement: self::@class::C::@field::x
+                  staticType: null
+                  token: x @-1
+        accessors
+          synthetic get x @18
+            returnType: dynamic
 ''');
   }
 
@@ -5109,13 +11884,38 @@
 ''', allowErrors: true);
     // It is OK to keep non-constant initializers.
     checkElementText(library, r'''
-class C {
-  final dynamic x;
-  const C() :
-        x/*location: test.dart;C;x*/ =
-        foo/*location: test.dart;foo*/();
-}
-int foo() {}
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          final x @18
+            type: dynamic
+        constructors
+          const @29
+            constantInitializers
+              ConstructorFieldInitializer
+                equals: = @0
+                expression: MethodInvocation
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  methodName: SimpleIdentifier
+                    staticElement: self::@function::foo
+                    staticType: int Function()
+                    token: foo @-1
+                  staticInvokeType: int Function()
+                  staticType: int
+                fieldName: SimpleIdentifier
+                  staticElement: self::@class::C::@field::x
+                  staticType: null
+                  token: x @-1
+        accessors
+          synthetic get x @18
+            returnType: dynamic
+    functions
+      foo @52
+        returnType: int
 ''');
   }
 
@@ -5126,30 +11926,38 @@
   const A([int f = 0]) : _f = f;
 }
 ''');
-    checkElementText(
-        library,
-        r'''
-class A {
-  final int _f;
-  const A([int f]);
-    constantInitializers
-      ConstructorFieldInitializer
-        equals: =
-        expression: SimpleIdentifier
-          staticElement: self::@class::A::@constructor::•::@parameter::f
-          staticType: int
-          token: f
-        fieldName: SimpleIdentifier
-          staticElement: self::@class::A::@field::_f
-          staticType: null
-          token: _f
-    f
-      IntegerLiteral
-        literal: 0
-        staticType: int
-}
-''',
-        withResolvedAst: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        fields
+          final _f @22
+            type: int
+        constructors
+          const @34
+            parameters
+              optionalPositional f @41
+                type: int
+                constantInitializer
+                  IntegerLiteral
+                    literal: 0 @0
+                    staticType: int
+            constantInitializers
+              ConstructorFieldInitializer
+                equals: = @0
+                expression: SimpleIdentifier
+                  staticElement: self::@class::A::@constructor::•::@parameter::f
+                  staticType: int
+                  token: f @-1
+                fieldName: SimpleIdentifier
+                  staticElement: self::@class::A::@field::_f
+                  staticType: null
+                  token: _f @-1
+        accessors
+          synthetic get _f @22
+            returnType: int
+''');
   }
 
   test_constructor_initializers_field_withParameter() async {
@@ -5160,12 +11968,40 @@
 }
 ''');
     checkElementText(library, r'''
-class C {
-  final dynamic x;
-  const C(int p) :
-        x/*location: test.dart;C;x*/ = 1 +
-        p/*location: test.dart;C;;p*/;
-}
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          final x @18
+            type: dynamic
+        constructors
+          const @29
+            parameters
+              requiredPositional p @35
+                type: int
+            constantInitializers
+              ConstructorFieldInitializer
+                equals: = @0
+                expression: BinaryExpression
+                  leftOperand: IntegerLiteral
+                    literal: 1 @0
+                    staticType: int
+                  operator: + @0
+                  rightOperand: SimpleIdentifier
+                    staticElement: p@35
+                    staticType: int
+                    token: p @-1
+                  staticElement: dart:core::@class::num::@method::+
+                  staticInvokeType: null
+                  staticType: int
+                fieldName: SimpleIdentifier
+                  staticElement: self::@class::C::@field::x
+                  staticType: null
+                  token: x @-1
+        accessors
+          synthetic get x @18
+            returnType: dynamic
 ''');
   }
 
@@ -5181,14 +12017,59 @@
 }
 ''');
     checkElementText(library, r'''
-class A<T> {
-  const A();
-}
-class B {
-  const B(dynamic x);
-  const B.f() = B : this(
-        A/*location: test.dart;A*/<Function()>());
-}
+library
+  definingUnit
+    classes
+      class A @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        constructors
+          const @21
+      class B @34
+        constructors
+          const @46
+            parameters
+              requiredPositional x @56
+                type: dynamic
+          const f @70
+            periodOffset: 69
+            nameEnd: 71
+            constantInitializers
+              RedirectingConstructorInvocation
+                argumentList: ArgumentList
+                  arguments
+                    InstanceCreationExpression
+                      argumentList: ArgumentList
+                        leftParenthesis: ( @0
+                        rightParenthesis: ) @0
+                      constructorName: ConstructorName
+                        staticElement: ConstructorMember
+                          base: self::@class::A::@constructor::•
+                          substitution: {T: dynamic Function()}
+                        type: TypeName
+                          name: SimpleIdentifier
+                            staticElement: self::@class::A
+                            staticType: null
+                            token: A @-1
+                          type: A<dynamic Function()>
+                          typeArguments: TypeArgumentList
+                            arguments
+                              GenericFunctionType
+                                declaredElement: GenericFunctionTypeElement
+                                  parameters
+                                  returnType: dynamic
+                                  type: dynamic Function()
+                                functionKeyword: Function @0
+                                parameters: FormalParameterList
+                                type: dynamic Function()
+                            leftBracket: < @0
+                            rightBracket: > @0
+                      staticType: A<dynamic Function()>
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticElement: self::@class::B::@constructor::•
+            redirectedConstructor: self::@class::B::@constructor::•
 ''');
   }
 
@@ -5201,25 +12082,33 @@
   const B() : super(const []);
 }
 ''');
-    checkElementText(
-        library,
-        r'''
-class A {
-  const A(List<String> values);
-}
-class B extends A {
-  const B();
-    constantInitializers
-      SuperConstructorInvocation
-        argumentList: ArgumentList
-          arguments
-            ListLiteral
-              constKeyword: const
-              staticType: List<String>
-        staticElement: self::@class::A::@constructor::•
-}
-''',
-        withResolvedAst: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          const @18
+            parameters
+              requiredPositional values @33
+                type: List<String>
+      class B @50
+        supertype: A
+        constructors
+          const @72
+            constantInitializers
+              SuperConstructorInvocation
+                argumentList: ArgumentList
+                  arguments
+                    ListLiteral
+                      constKeyword: const @0
+                      leftBracket: [ @0
+                      rightBracket: ] @0
+                      staticType: List<String>
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticElement: self::@class::A::@constructor::•
+''');
   }
 
   test_constructor_initializers_superInvocation_named() async {
@@ -5232,13 +12121,35 @@
 }
 ''');
     checkElementText(library, r'''
-class A {
-  const A.aaa(int p);
-}
-class C extends A {
-  const C() : super.
-        aaa/*location: test.dart;A;aaa*/(42);
-}
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          const aaa @20
+            periodOffset: 19
+            nameEnd: 23
+            parameters
+              requiredPositional p @28
+                type: int
+      class C @40
+        supertype: A
+        constructors
+          const @62
+            constantInitializers
+              SuperConstructorInvocation
+                argumentList: ArgumentList
+                  arguments
+                    IntegerLiteral
+                      literal: 42 @0
+                      staticType: int
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                constructorName: SimpleIdentifier
+                  staticElement: self::@class::A::@constructor::aaa
+                  staticType: null
+                  token: aaa @-1
+                staticElement: self::@class::A::@constructor::aaa
 ''');
   }
 
@@ -5252,13 +12163,28 @@
 }
 ''');
     checkElementText(library, r'''
-class A {
-  const A._();
-}
-class B extends A {
-  const B() : super.
-        _/*location: test.dart;A;_*/();
-}
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          const _ @20
+            periodOffset: 19
+            nameEnd: 21
+      class B @33
+        supertype: A
+        constructors
+          const @55
+            constantInitializers
+              SuperConstructorInvocation
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                constructorName: SimpleIdentifier
+                  staticElement: self::@class::A::@constructor::_
+                  staticType: null
+                  token: _ @-1
+                staticElement: self::@class::A::@constructor::_
 ''');
   }
 
@@ -5272,14 +12198,46 @@
 }
 ''');
     checkElementText(library, r'''
-class A {
-  const A.aaa(dynamic a, {int b});
-}
-class C extends A {
-  const C() : super.
-        aaa/*location: test.dart;A;aaa*/(1,
-        b/*location: test.dart;A;aaa;b*/: 2);
-}
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          const aaa @20
+            periodOffset: 19
+            nameEnd: 23
+            parameters
+              requiredPositional a @24
+                type: dynamic
+              optionalNamed b @32
+                type: int
+      class C @45
+        supertype: A
+        constructors
+          const @67
+            constantInitializers
+              SuperConstructorInvocation
+                argumentList: ArgumentList
+                  arguments
+                    IntegerLiteral
+                      literal: 1 @0
+                      staticType: int
+                    NamedExpression
+                      name: Label
+                        label: SimpleIdentifier
+                          staticElement: self::@class::A::@constructor::aaa::@parameter::b
+                          staticType: null
+                          token: b @-1
+                      expression: IntegerLiteral
+                        literal: 2 @0
+                        staticType: int
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                constructorName: SimpleIdentifier
+                  staticElement: self::@class::A::@constructor::aaa
+                  staticType: null
+                  token: aaa @-1
+                staticElement: self::@class::A::@constructor::aaa
 ''');
   }
 
@@ -5293,12 +12251,31 @@
 }
 ''');
     checkElementText(library, r'''
-class A {
-  const A(int p);
-}
-class C extends A {
-  const C.ccc() : super(42);
-}
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          const @18
+            parameters
+              requiredPositional p @24
+                type: int
+      class C @36
+        supertype: A
+        constructors
+          const ccc @60
+            periodOffset: 59
+            nameEnd: 63
+            constantInitializers
+              SuperConstructorInvocation
+                argumentList: ArgumentList
+                  arguments
+                    IntegerLiteral
+                      literal: 42 @0
+                      staticType: int
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticElement: self::@class::A::@constructor::•
 ''');
   }
 
@@ -5309,23 +12286,33 @@
   const A.empty() : this(const []);
 }
 ''');
-    checkElementText(
-        library,
-        r'''
-class A {
-  const A(List<String> values);
-  const A.empty() = A;
-    constantInitializers
-      RedirectingConstructorInvocation
-        argumentList: ArgumentList
-          arguments
-            ListLiteral
-              constKeyword: const
-              staticType: List<String>
-        staticElement: self::@class::A::@constructor::•
-}
-''',
-        withResolvedAst: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          const @18
+            parameters
+              requiredPositional values @33
+                type: List<String>
+          const empty @52
+            periodOffset: 51
+            nameEnd: 57
+            constantInitializers
+              RedirectingConstructorInvocation
+                argumentList: ArgumentList
+                  arguments
+                    ListLiteral
+                      constKeyword: const @0
+                      leftBracket: [ @0
+                      rightBracket: ] @0
+                      staticType: List<String>
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticElement: self::@class::A::@constructor::•
+            redirectedConstructor: self::@class::A::@constructor::•
+''');
   }
 
   test_constructor_initializers_thisInvocation_named() async {
@@ -5336,11 +12323,37 @@
 }
 ''');
     checkElementText(library, r'''
-class C {
-  const C() = C.named : this.
-        named/*location: test.dart;C;named*/(1, 'bbb');
-  const C.named(int a, String b);
-}
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          const @18
+            constantInitializers
+              RedirectingConstructorInvocation
+                argumentList: ArgumentList
+                  arguments
+                    IntegerLiteral
+                      literal: 1 @0
+                      staticType: int
+                    SimpleStringLiteral
+                      literal: 'bbb' @0
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                constructorName: SimpleIdentifier
+                  staticElement: self::@class::C::@constructor::named
+                  staticType: null
+                  token: named @-1
+                staticElement: self::@class::C::@constructor::named
+            redirectedConstructor: self::@class::C::@constructor::named
+          const named @56
+            periodOffset: 55
+            nameEnd: 61
+            parameters
+              requiredPositional a @66
+                type: int
+              requiredPositional b @76
+                type: String
 ''');
   }
 
@@ -5352,12 +12365,44 @@
 }
 ''');
     checkElementText(library, r'''
-class C {
-  const C() = C.named : this.
-        named/*location: test.dart;C;named*/(1,
-        b/*location: test.dart;C;named;b*/: 2);
-  const C.named(dynamic a, {int b});
-}
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          const @18
+            constantInitializers
+              RedirectingConstructorInvocation
+                argumentList: ArgumentList
+                  arguments
+                    IntegerLiteral
+                      literal: 1 @0
+                      staticType: int
+                    NamedExpression
+                      name: Label
+                        label: SimpleIdentifier
+                          staticElement: self::@class::C::@constructor::named::@parameter::b
+                          staticType: null
+                          token: b @-1
+                      expression: IntegerLiteral
+                        literal: 2 @0
+                        staticType: int
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                constructorName: SimpleIdentifier
+                  staticElement: self::@class::C::@constructor::named
+                  staticType: null
+                  token: named @-1
+                staticElement: self::@class::C::@constructor::named
+            redirectedConstructor: self::@class::C::@constructor::named
+          const named @55
+            periodOffset: 54
+            nameEnd: 60
+            parameters
+              requiredPositional a @61
+                type: dynamic
+              optionalNamed b @69
+                type: int
 ''');
   }
 
@@ -5369,10 +12414,33 @@
 }
 ''');
     checkElementText(library, r'''
-class C {
-  const C.named() = C : this(1, 'bbb');
-  const C(int a, String b);
-}
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          const named @20
+            periodOffset: 19
+            nameEnd: 25
+            constantInitializers
+              RedirectingConstructorInvocation
+                argumentList: ArgumentList
+                  arguments
+                    IntegerLiteral
+                      literal: 1 @0
+                      staticType: int
+                    SimpleStringLiteral
+                      literal: 'bbb' @0
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticElement: self::@class::C::@constructor::•
+            redirectedConstructor: self::@class::C::@constructor::•
+          const @54
+            parameters
+              requiredPositional a @60
+                type: int
+              requiredPositional b @70
+                type: String
 ''');
   }
 
@@ -5387,13 +12455,22 @@
 }
 ''');
     checkElementText(library, r'''
-class C {
-  factory C() = D.named;
-  C._();
-}
-class D extends C {
-  D.named();
-}
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          factory @20
+            redirectedConstructor: self::@class::D::@constructor::named
+          _ @39
+            periodOffset: 38
+            nameEnd: 40
+      class D @52
+        supertype: C
+        constructors
+          named @70
+            periodOffset: 69
+            nameEnd: 75
 ''');
   }
 
@@ -5408,13 +12485,34 @@
 }
 ''');
     checkElementText(library, r'''
-class C<T, U> {
-  factory C() = D<U, T>.named;
-  C._();
-}
-class D<T, U> extends C<U, T> {
-  D.named();
-}
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+          covariant U @11
+            defaultType: dynamic
+        constructors
+          factory @26
+            redirectedConstructor: ConstructorMember
+              base: self::@class::D::@constructor::named
+              substitution: {T: U, U: T}
+          _ @51
+            periodOffset: 50
+            nameEnd: 52
+      class D @64
+        typeParameters
+          covariant T @66
+            defaultType: dynamic
+          covariant U @69
+            defaultType: dynamic
+        supertype: C<U, T>
+        constructors
+          named @94
+            periodOffset: 93
+            nameEnd: 99
 ''');
   }
 
@@ -5431,14 +12529,42 @@
 }
 ''');
     checkElementText(library, r'''
-typedef A<T, U> = C<T, U>;
-class B<T, U> {
-  factory B() = C<U, T>.named;
-  B._();
-}
-class C<T, U> extends C<U, T> {
-  C.named();
-}
+library
+  definingUnit
+    classes
+      class B @33
+        typeParameters
+          covariant T @35
+            defaultType: dynamic
+          covariant U @38
+            defaultType: dynamic
+        constructors
+          factory @53
+            redirectedConstructor: ConstructorMember
+              base: self::@class::C::@constructor::named
+              substitution: {T: U, U: T}
+          _ @78
+            periodOffset: 77
+            nameEnd: 79
+      class C @91
+        typeParameters
+          covariant T @93
+            defaultType: dynamic
+          covariant U @96
+            defaultType: dynamic
+        supertype: C<U, T>
+        constructors
+          named @121
+            periodOffset: 120
+            nameEnd: 126
+    typeAliases
+      A @8
+        typeParameters
+          covariant T @10
+            defaultType: dynamic
+          covariant U @13
+            defaultType: dynamic
+        aliasedType: C<T, U>
 ''');
   }
 
@@ -5457,11 +12583,18 @@
 }
 ''');
     checkElementText(library, r'''
-import 'foo.dart';
-class C {
-  factory C() = D.named;
-  C._();
-}
+library
+  imports
+    foo.dart
+  definingUnit
+    classes
+      class C @25
+        constructors
+          factory @39
+            redirectedConstructor: foo.dart::@class::D::@constructor::named
+          _ @58
+            periodOffset: 57
+            nameEnd: 59
 ''');
   }
 
@@ -5480,11 +12613,25 @@
 }
 ''');
     checkElementText(library, r'''
-import 'foo.dart';
-class C<T, U> {
-  factory C() = D<U, T>.named;
-  C._();
-}
+library
+  imports
+    foo.dart
+  definingUnit
+    classes
+      class C @25
+        typeParameters
+          covariant T @27
+            defaultType: dynamic
+          covariant U @30
+            defaultType: dynamic
+        constructors
+          factory @45
+            redirectedConstructor: ConstructorMember
+              base: foo.dart::@class::D::@constructor::named
+              substitution: {T: U, U: T}
+          _ @70
+            periodOffset: 69
+            nameEnd: 71
 ''');
   }
 
@@ -5503,11 +12650,18 @@
 }
 ''');
     checkElementText(library, r'''
-import 'foo.dart' as foo;
-class C {
-  factory C() = D.named;
-  C._();
-}
+library
+  imports
+    foo.dart as foo @21
+  definingUnit
+    classes
+      class C @32
+        constructors
+          factory @46
+            redirectedConstructor: foo.dart::@class::D::@constructor::named
+          _ @69
+            periodOffset: 68
+            nameEnd: 70
 ''');
   }
 
@@ -5526,11 +12680,25 @@
 }
 ''');
     checkElementText(library, r'''
-import 'foo.dart' as foo;
-class C<T, U> {
-  factory C() = D<U, T>.named;
-  C._();
-}
+library
+  imports
+    foo.dart as foo @21
+  definingUnit
+    classes
+      class C @32
+        typeParameters
+          covariant T @34
+            defaultType: dynamic
+          covariant U @37
+            defaultType: dynamic
+        constructors
+          factory @52
+            redirectedConstructor: ConstructorMember
+              base: foo.dart::@class::D::@constructor::named
+              substitution: {T: U, U: T}
+          _ @81
+            periodOffset: 80
+            nameEnd: 82
 ''');
   }
 
@@ -5541,9 +12709,15 @@
 }
 ''', allowErrors: true);
     checkElementText(library, r'''
-class C<E> {
-  factory C();
-}
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          covariant E @8
+            defaultType: dynamic
+        constructors
+          factory @23
 ''');
   }
 
@@ -5555,11 +12729,18 @@
 }
 ''', allowErrors: true);
     checkElementText(library, r'''
-class D {
-}
-class C<E> {
-  factory C();
-}
+library
+  definingUnit
+    classes
+      class D @6
+        constructors
+          synthetic @-1
+      class C @17
+        typeParameters
+          covariant E @19
+            defaultType: dynamic
+        constructors
+          factory @34
 ''');
   }
 
@@ -5574,13 +12755,20 @@
 }
 ''');
     checkElementText(library, r'''
-class C {
-  factory C() = D;
-  C._();
-}
-class D extends C {
-  D();
-}
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          factory @20
+            redirectedConstructor: self::@class::D::@constructor::•
+          _ @33
+            periodOffset: 32
+            nameEnd: 34
+      class D @46
+        supertype: C
+        constructors
+          @62
 ''');
   }
 
@@ -5595,13 +12783,32 @@
 }
 ''');
     checkElementText(library, r'''
-class C<T, U> {
-  factory C() = D<U, T>;
-  C._();
-}
-class D<T, U> extends C<U, T> {
-  D();
-}
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+          covariant U @11
+            defaultType: dynamic
+        constructors
+          factory @26
+            redirectedConstructor: ConstructorMember
+              base: self::@class::D::@constructor::•
+              substitution: {T: U, U: T}
+          _ @45
+            periodOffset: 44
+            nameEnd: 46
+      class D @58
+        typeParameters
+          covariant T @60
+            defaultType: dynamic
+          covariant U @63
+            defaultType: dynamic
+        supertype: C<U, T>
+        constructors
+          @86
 ''');
   }
 
@@ -5618,14 +12825,40 @@
 }
 ''');
     checkElementText(library, r'''
-typedef A<T, U> = C<T, U>;
-class B<T, U> {
-  factory B() = C<U, T>;
-  dynamic B_();
-}
-class C<T, U> extends B<U, T> {
-  C();
-}
+library
+  definingUnit
+    classes
+      class B @33
+        typeParameters
+          covariant T @35
+            defaultType: dynamic
+          covariant U @38
+            defaultType: dynamic
+        constructors
+          factory @53
+            redirectedConstructor: ConstructorMember
+              base: self::@class::C::@constructor::•
+              substitution: {T: U, U: T}
+        methods
+          abstract B_ @70
+            returnType: dynamic
+      class C @84
+        typeParameters
+          covariant T @86
+            defaultType: dynamic
+          covariant U @89
+            defaultType: dynamic
+        supertype: B<U, T>
+        constructors
+          @112
+    typeAliases
+      A @8
+        typeParameters
+          covariant T @10
+            defaultType: dynamic
+          covariant U @13
+            defaultType: dynamic
+        aliasedType: C<T, U>
 ''');
   }
 
@@ -5644,11 +12877,18 @@
 }
 ''');
     checkElementText(library, r'''
-import 'foo.dart';
-class C {
-  factory C() = D;
-  C._();
-}
+library
+  imports
+    foo.dart
+  definingUnit
+    classes
+      class C @25
+        constructors
+          factory @39
+            redirectedConstructor: foo.dart::@class::D::@constructor::•
+          _ @52
+            periodOffset: 51
+            nameEnd: 53
 ''');
   }
 
@@ -5667,11 +12907,25 @@
 }
 ''');
     checkElementText(library, r'''
-import 'foo.dart';
-class C<T, U> {
-  factory C() = D<U, T>;
-  C._();
-}
+library
+  imports
+    foo.dart
+  definingUnit
+    classes
+      class C @25
+        typeParameters
+          covariant T @27
+            defaultType: dynamic
+          covariant U @30
+            defaultType: dynamic
+        constructors
+          factory @45
+            redirectedConstructor: ConstructorMember
+              base: foo.dart::@class::D::@constructor::•
+              substitution: {T: U, U: T}
+          _ @64
+            periodOffset: 63
+            nameEnd: 65
 ''');
   }
 
@@ -5692,11 +12946,18 @@
 }
 ''');
     checkElementText(library, r'''
-import 'foo.dart';
-class C {
-  factory C() = B;
-  C._();
-}
+library
+  imports
+    foo.dart
+  definingUnit
+    classes
+      class C @25
+        constructors
+          factory @39
+            redirectedConstructor: foo.dart::@class::B::@constructor::•
+          _ @52
+            periodOffset: 51
+            nameEnd: 53
 ''');
   }
 
@@ -5715,11 +12976,18 @@
 }
 ''');
     checkElementText(library, r'''
-import 'foo.dart' as foo;
-class C {
-  factory C() = D;
-  C._();
-}
+library
+  imports
+    foo.dart as foo @21
+  definingUnit
+    classes
+      class C @32
+        constructors
+          factory @46
+            redirectedConstructor: foo.dart::@class::D::@constructor::•
+          _ @63
+            periodOffset: 62
+            nameEnd: 64
 ''');
   }
 
@@ -5738,11 +13006,25 @@
 }
 ''');
     checkElementText(library, r'''
-import 'foo.dart' as foo;
-class C<T, U> {
-  factory C() = D<U, T>;
-  C._();
-}
+library
+  imports
+    foo.dart as foo @21
+  definingUnit
+    classes
+      class C @32
+        typeParameters
+          covariant T @34
+            defaultType: dynamic
+          covariant U @37
+            defaultType: dynamic
+        constructors
+          factory @52
+            redirectedConstructor: ConstructorMember
+              base: foo.dart::@class::D::@constructor::•
+              substitution: {T: U, U: T}
+          _ @75
+            periodOffset: 74
+            nameEnd: 76
 ''');
   }
 
@@ -5763,11 +13045,18 @@
 }
 ''');
     checkElementText(library, r'''
-import 'foo.dart' as foo;
-class C {
-  factory C() = B;
-  C._();
-}
+library
+  imports
+    foo.dart as foo @21
+  definingUnit
+    classes
+      class C @32
+        constructors
+          factory @46
+            redirectedConstructor: foo.dart::@class::B::@constructor::•
+          _ @63
+            periodOffset: 62
+            nameEnd: 64
 ''');
   }
 
@@ -5778,9 +13067,15 @@
 }
 ''', allowErrors: true);
     checkElementText(library, r'''
-class C<E> {
-  factory C();
-}
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          covariant E @8
+            defaultType: dynamic
+        constructors
+          factory @23
 ''');
   }
 
@@ -5797,14 +13092,23 @@
 }
 ''');
     checkElementText(library, r'''
-typedef A = C;
-class B {
-  factory B() = C;
-  B._();
-}
-class C extends B {
-  C();
-}
+library
+  definingUnit
+    classes
+      class B @21
+        constructors
+          factory @35
+            redirectedConstructor: self::@class::C::@constructor::•
+          _ @48
+            periodOffset: 47
+            nameEnd: 49
+      class C @61
+        supertype: B
+        constructors
+          @77
+    typeAliases
+      A @8
+        aliasedType: C
 ''');
   }
 
@@ -5816,11 +13120,26 @@
 }
 ''');
     checkElementText(library, r'''
-class C {
-  const C.named();
-  const C() = C.named : this.
-        named/*location: test.dart;C;named*/();
-}
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          const named @20
+            periodOffset: 19
+            nameEnd: 25
+          const @37
+            constantInitializers
+              RedirectingConstructorInvocation
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                constructorName: SimpleIdentifier
+                  staticElement: self::@class::C::@constructor::named
+                  staticType: null
+                  token: named @-1
+                staticElement: self::@class::C::@constructor::named
+            redirectedConstructor: self::@class::C::@constructor::named
 ''');
   }
 
@@ -5832,11 +13151,29 @@
 }
 ''');
     checkElementText(library, r'''
-class C<T> {
-  const C.named();
-  const C() = C<T>.named : this.
-        named/*location: test.dart;C;named*/();
-}
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        constructors
+          const named @23
+            periodOffset: 22
+            nameEnd: 28
+          const @40
+            constantInitializers
+              RedirectingConstructorInvocation
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                constructorName: SimpleIdentifier
+                  staticElement: self::@class::C::@constructor::named
+                  staticType: null
+                  token: named @-1
+                staticElement: self::@class::C::@constructor::named
+            redirectedConstructor: self::@class::C::@constructor::named
 ''');
   }
 
@@ -5848,10 +13185,15 @@
 }
 ''');
     checkElementText(library, r'''
-class C {
-  C.named();
-  C();
-}
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          named @14
+            periodOffset: 13
+            nameEnd: 19
+          @25
 ''');
   }
 
@@ -5863,10 +13205,22 @@
 }
 ''');
     checkElementText(library, r'''
-class C {
-  const C();
-  const C.named() = C : this();
-}
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          const @18
+          const named @33
+            periodOffset: 32
+            nameEnd: 38
+            constantInitializers
+              RedirectingConstructorInvocation
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticElement: self::@class::C::@constructor::•
+            redirectedConstructor: self::@class::C::@constructor::•
 ''');
   }
 
@@ -5878,10 +13232,25 @@
 }
 ''');
     checkElementText(library, r'''
-class C<T> {
-  const C();
-  const C.named() = C<T> : this();
-}
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        constructors
+          const @21
+          const named @36
+            periodOffset: 35
+            nameEnd: 41
+            constantInitializers
+              RedirectingConstructorInvocation
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticElement: self::@class::C::@constructor::•
+            redirectedConstructor: self::@class::C::@constructor::•
 ''');
   }
 
@@ -5893,10 +13262,15 @@
 }
 ''');
     checkElementText(library, r'''
-class C {
-  C();
-  C.named();
-}
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          @12
+          named @21
+            periodOffset: 20
+            nameEnd: 26
 ''');
   }
 
@@ -5912,18 +13286,69 @@
 }
 ''');
     checkElementText(library, r'''
-class C {
-  final dynamic x;
-  const C() :
-        x/*location: test.dart;C;x*/ = const
-        D/*location: test.dart;D*/();
-}
-class D {
-  final dynamic x;
-  const D() :
-        x/*location: test.dart;D;x*/ = const
-        C/*location: test.dart;C*/();
-}
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          final x @18
+            type: dynamic
+        constructors
+          const @29
+            constantInitializers
+              ConstructorFieldInitializer
+                equals: = @0
+                expression: InstanceCreationExpression
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  constructorName: ConstructorName
+                    staticElement: self::@class::D::@constructor::•
+                    type: TypeName
+                      name: SimpleIdentifier
+                        staticElement: self::@class::D
+                        staticType: null
+                        token: D @-1
+                      type: D
+                  keyword: const @0
+                  staticType: D
+                fieldName: SimpleIdentifier
+                  staticElement: self::@class::C::@field::x
+                  staticType: null
+                  token: x @-1
+        accessors
+          synthetic get x @18
+            returnType: dynamic
+      class D @58
+        fields
+          final x @70
+            type: dynamic
+        constructors
+          const @81
+            constantInitializers
+              ConstructorFieldInitializer
+                equals: = @0
+                expression: InstanceCreationExpression
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  constructorName: ConstructorName
+                    staticElement: self::@class::C::@constructor::•
+                    type: TypeName
+                      name: SimpleIdentifier
+                        staticElement: self::@class::C
+                        staticType: null
+                        token: C @-1
+                      type: C
+                  keyword: const @0
+                  staticType: C
+                fieldName: SimpleIdentifier
+                  staticElement: self::@class::D::@field::x
+                  staticType: null
+                  token: x @-1
+        accessors
+          synthetic get x @70
+            returnType: dynamic
 ''');
   }
 
@@ -5939,14 +13364,27 @@
 }
 ''');
     checkElementText(library, r'''
-class C {
-  final dynamic x;
-  C();
-}
-class D {
-  final dynamic x;
-  D();
-}
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          final x @18
+            type: dynamic
+        constructors
+          @23
+        accessors
+          synthetic get x @18
+            returnType: dynamic
+      class D @50
+        fields
+          final x @62
+            type: dynamic
+        constructors
+          @67
+        accessors
+          synthetic get x @62
+            returnType: dynamic
 ''');
   }
 
@@ -5956,14 +13394,29 @@
   const X({List<T> a = const []});
 }
 ''');
-    checkElementText(
-        library,
-        r'''
-class A<T> {
-  dynamic X({List<T> a: const /*typeArgs=Never*/[]});
-}
-''',
-        withTypes: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+        methods
+          abstract X @21
+            parameters
+              optionalNamed a @32
+                type: List<T>
+                constantInitializer
+                  ListLiteral
+                    constKeyword: const @0
+                    leftBracket: [ @0
+                    rightBracket: ] @0
+                    staticType: List<Never>
+            returnType: dynamic
+''');
   }
 
   test_defaultValue_eliminateTypeParameters_legacy() async {
@@ -5973,14 +13426,29 @@
   const X({List<T> a = const []});
 }
 ''');
-    checkElementText(
-        library,
-        r'''
-class A<T> {
-  dynamic X({List<T*>* a: const /*typeArgs=Null**/[]});
-}
-''',
-        withTypes: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+        methods
+          abstract X @21
+            parameters
+              optionalNamed a @32
+                type: List<T*>*
+                constantInitializer
+                  ListLiteral
+                    constKeyword: const @0
+                    leftBracket: [ @0
+                    rightBracket: ] @0
+                    staticType: List<Null*>*
+            returnType: dynamic
+''');
   }
 
   test_defaultValue_genericFunction() async {
@@ -5995,13 +13463,54 @@
 }
 ''');
     checkElementText(library, r'''
-typedef F<T> = void Function(T v);
-class X {
-  final void Function(dynamic) f;
-  const X({final void Function(dynamic) this.f:
-        defaultF/*location: test.dart;defaultF*/});
-}
-void defaultF<T>(T v) {}
+library
+  definingUnit
+    classes
+      class X @57
+        fields
+          final f @71
+            type: void Function(dynamic)
+              aliasElement: self::@typeAlias::F
+              aliasArguments
+                dynamic
+        constructors
+          const @82
+            parameters
+              optionalNamed final this.f @90
+                type: void Function(dynamic)
+                  aliasElement: self::@typeAlias::F
+                  aliasArguments
+                    dynamic
+                constantInitializer
+                  SimpleIdentifier
+                    staticElement: self::@function::defaultF
+                    staticType: void Function(dynamic)
+                    token: defaultF @-1
+        accessors
+          synthetic get f @71
+            returnType: void Function(dynamic)
+              aliasElement: self::@typeAlias::F
+              aliasArguments
+                dynamic
+    typeAliases
+      functionTypeAliasBased F @13
+        typeParameters
+          contravariant T @15
+            defaultType: dynamic
+        aliasedType: void Function(T)
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional v @-1
+              type: T
+          returnType: void
+    functions
+      defaultF @30
+        typeParameters
+          covariant T @39
+        parameters
+          requiredPositional v @44
+            type: T
+        returnType: void
 ''');
   }
 
@@ -6015,13 +13524,53 @@
 }
 ''');
     checkElementText(library, r'''
-class A<T> {
-  const A();
-}
-class B {
-  void foo({dynamic a: const
-        A/*location: test.dart;A*/<Function()>()}) {}
-}
+library
+  definingUnit
+    classes
+      class A @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        constructors
+          const @21
+      class B @34
+        constructors
+          synthetic @-1
+        methods
+          foo @45
+            parameters
+              optionalNamed a @50
+                type: dynamic
+                constantInitializer
+                  InstanceCreationExpression
+                    argumentList: ArgumentList
+                      leftParenthesis: ( @0
+                      rightParenthesis: ) @0
+                    constructorName: ConstructorName
+                      staticElement: ConstructorMember
+                        base: self::@class::A::@constructor::•
+                        substitution: {T: dynamic Function()}
+                      type: TypeName
+                        name: SimpleIdentifier
+                          staticElement: self::@class::A
+                          staticType: null
+                          token: A @-1
+                        type: A<dynamic Function()>
+                        typeArguments: TypeArgumentList
+                          arguments
+                            GenericFunctionType
+                              declaredElement: GenericFunctionTypeElement
+                                parameters
+                                returnType: dynamic
+                                type: dynamic Function()
+                              functionKeyword: Function @0
+                              parameters: FormalParameterList
+                              type: dynamic Function()
+                          leftBracket: < @0
+                          rightBracket: > @0
+                    keyword: const @0
+                    staticType: A<dynamic Function()>
+            returnType: void
 ''');
   }
 
@@ -6029,24 +13578,32 @@
     var library = await checkLibrary('''
 void f( g({a: 0 is int}) ) {}
 ''');
-    checkElementText(
-        library,
-        r'''
-void f(dynamic Function({dynamic a}) g) {}
-    g::a
-      IsExpression
-        expression: IntegerLiteral
-          literal: 0
-          staticType: int
-        staticType: bool
-        type: TypeName
-          name: SimpleIdentifier
-            staticElement: dart:core::@class::int
-            staticType: null
-            token: int
-          type: int
-''',
-        withResolvedAst: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    functions
+      f @5
+        parameters
+          requiredPositional g @8
+            type: dynamic Function({dynamic a})
+            parameters
+              optionalNamed a @11
+                type: dynamic
+                constantInitializer
+                  IsExpression
+                    expression: IntegerLiteral
+                      literal: 0 @0
+                      staticType: int
+                    isOperator: is @0
+                    staticType: bool
+                    type: TypeName
+                      name: SimpleIdentifier
+                        staticElement: dart:core::@class::int
+                        staticType: null
+                        token: int @-1
+                      type: int
+        returnType: void
+''');
   }
 
   test_defaultValue_methodMember_legacy() async {
@@ -6054,29 +13611,36 @@
     var library = await checkLibrary('''
 void f([Comparator<T> compare = Comparable.compare]) {}
 ''');
-    checkElementText(
-        library,
-        r'''
-void f([int* Function(dynamic, dynamic)* compare]) {}
-  compare
-    PrefixedIdentifier
-      identifier: SimpleIdentifier
-        staticElement: MethodMember
-          base: dart:core::@class::Comparable::@method::compare
-          substitution: {}
-        staticType: int* Function(Comparable<dynamic>*, Comparable<dynamic>*)*
-        token: compare
-      period: .
-      prefix: SimpleIdentifier
-        staticElement: dart:core::@class::Comparable
-        staticType: null
-        token: Comparable
-      staticElement: MethodMember
-        base: dart:core::@class::Comparable::@method::compare
-        substitution: {}
-      staticType: int* Function(Comparable<dynamic>*, Comparable<dynamic>*)*
-''',
-        withResolvedAst: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    functions
+      f @5
+        parameters
+          optionalPositional compare @22
+            type: int* Function(dynamic, dynamic)*
+              aliasElement: dart:core::@typeAlias::Comparator
+              aliasArguments
+                dynamic
+            constantInitializer
+              PrefixedIdentifier
+                identifier: SimpleIdentifier
+                  staticElement: MethodMember
+                    base: dart:core::@class::Comparable::@method::compare
+                    substitution: {}
+                  staticType: int* Function(Comparable<dynamic>*, Comparable<dynamic>*)*
+                  token: compare @-1
+                period: . @0
+                prefix: SimpleIdentifier
+                  staticElement: dart:core::@class::Comparable
+                  staticType: null
+                  token: Comparable @-1
+                staticElement: MethodMember
+                  base: dart:core::@class::Comparable::@method::compare
+                  substitution: {}
+                staticType: int* Function(Comparable<dynamic>*, Comparable<dynamic>*)*
+        returnType: void
+''');
   }
 
   test_defaultValue_refersToExtension_method_inside() async {
@@ -6088,13 +13652,28 @@
 }
 ''');
     checkElementText(library, r'''
-class A {
-}
-extension E on A {
-  static void f() {}
-  static void g([Object p =
-        f/*location: test.dart;E;f*/]) {}
-}
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          synthetic @-1
+    extensions
+      E @21
+        extendedType: A
+        methods
+          static f @44
+            returnType: void
+          static g @65
+            parameters
+              optionalPositional p @75
+                type: Object
+                constantInitializer
+                  SimpleIdentifier
+                    staticElement: self::@extension::E::@method::f
+                    staticType: void Function()
+                    token: f @-1
+            returnType: void
 ''');
   }
 
@@ -6107,18 +13686,45 @@
   void foo([B<int, double> b = const B()]) {}
 }
 ''');
-    checkElementText(
-        library,
-        r'''
-class B<T1, T2> {
-  const B();
-}
-class C {
-  void foo([B<int, double> b = const /*typeArgs=int,double*/
-        B/*location: test.dart;B*/()]) {}
-}
-''',
-        withTypes: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class B @6
+        typeParameters
+          covariant T1 @8
+            defaultType: dynamic
+          covariant T2 @12
+            defaultType: dynamic
+        constructors
+          const @26
+      class C @39
+        constructors
+          synthetic @-1
+        methods
+          foo @50
+            parameters
+              optionalPositional b @70
+                type: B<int, double>
+                constantInitializer
+                  InstanceCreationExpression
+                    argumentList: ArgumentList
+                      leftParenthesis: ( @0
+                      rightParenthesis: ) @0
+                    constructorName: ConstructorName
+                      staticElement: ConstructorMember
+                        base: self::@class::B::@constructor::•
+                        substitution: {T1: int, T2: double}
+                      type: TypeName
+                        name: SimpleIdentifier
+                          staticElement: self::@class::B
+                          staticType: null
+                          token: B @-1
+                        type: B<int, double>
+                    keyword: const @0
+                    staticType: B<int, double>
+            returnType: void
+''');
   }
 
   test_defaultValue_refersToGenericClass_constructor() async {
@@ -6130,18 +13736,43 @@
   const C([B<T> b = const B()]);
 }
 ''');
-    checkElementText(
-        library,
-        r'''
-class B<T> {
-  const B();
-}
-class C<T> {
-  const C([B<T> b = const /*typeArgs=Never*/
-        B/*location: test.dart;B*/()]);
-}
-''',
-        withTypes: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class B @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        constructors
+          const @21
+      class C @34
+        typeParameters
+          covariant T @36
+            defaultType: dynamic
+        constructors
+          const @49
+            parameters
+              optionalPositional b @57
+                type: B<T>
+                constantInitializer
+                  InstanceCreationExpression
+                    argumentList: ArgumentList
+                      leftParenthesis: ( @0
+                      rightParenthesis: ) @0
+                    constructorName: ConstructorName
+                      staticElement: ConstructorMember
+                        base: self::@class::B::@constructor::•
+                        substitution: {T: Never}
+                      type: TypeName
+                        name: SimpleIdentifier
+                          staticElement: self::@class::B
+                          staticType: null
+                          token: B @-1
+                        type: B<Never>
+                    keyword: const @0
+                    staticType: B<Never>
+''');
   }
 
   test_defaultValue_refersToGenericClass_constructor2() async {
@@ -6154,20 +13785,53 @@
   const C([A<T> a = const B()]);
 }
 ''');
-    checkElementText(
-        library,
-        r'''
-abstract class A<T> {
-}
-class B<T> implements A<T> {
-  const B();
-}
-class C<T> implements A<Iterable<T>> {
-  const C([A<T> a = const /*typeArgs=Never*/
-        B/*location: test.dart;B*/()]);
-}
-''',
-        withTypes: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      abstract class A @15
+        typeParameters
+          covariant T @17
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+      class B @29
+        typeParameters
+          covariant T @31
+            defaultType: dynamic
+        interfaces
+          A<T>
+        constructors
+          const @60
+      class C @73
+        typeParameters
+          covariant T @75
+            defaultType: dynamic
+        interfaces
+          A<Iterable<T>>
+        constructors
+          const @114
+            parameters
+              optionalPositional a @122
+                type: A<T>
+                constantInitializer
+                  InstanceCreationExpression
+                    argumentList: ArgumentList
+                      leftParenthesis: ( @0
+                      rightParenthesis: ) @0
+                    constructorName: ConstructorName
+                      staticElement: ConstructorMember
+                        base: self::@class::B::@constructor::•
+                        substitution: {T: Never}
+                      type: TypeName
+                        name: SimpleIdentifier
+                          staticElement: self::@class::B
+                          staticType: null
+                          token: B @-1
+                        type: B<Never>
+                    keyword: const @0
+                    staticType: B<Never>
+''');
   }
 
   test_defaultValue_refersToGenericClass_constructor2_legacy() async {
@@ -6181,20 +13845,53 @@
   const C([A<T> a = const B()]);
 }
 ''');
-    checkElementText(
-        library,
-        r'''
-abstract class A<T> {
-}
-class B<T> implements A<T*>* {
-  const B();
-}
-class C<T> implements A<Iterable<T*>*>* {
-  const C([A<T*>* a = const /*typeArgs=Null**/
-        B/*location: test.dart;B*/()]);
-}
-''',
-        withTypes: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      abstract class A @15
+        typeParameters
+          covariant T @17
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+      class B @29
+        typeParameters
+          covariant T @31
+            defaultType: dynamic
+        interfaces
+          A<T*>*
+        constructors
+          const @60
+      class C @73
+        typeParameters
+          covariant T @75
+            defaultType: dynamic
+        interfaces
+          A<Iterable<T*>*>*
+        constructors
+          const @114
+            parameters
+              optionalPositional a @122
+                type: A<T*>*
+                constantInitializer
+                  InstanceCreationExpression
+                    argumentList: ArgumentList
+                      leftParenthesis: ( @0
+                      rightParenthesis: ) @0
+                    constructorName: ConstructorName
+                      staticElement: ConstructorMember
+                        base: self::@class::B::@constructor::•
+                        substitution: {T: Null*}
+                      type: TypeName
+                        name: SimpleIdentifier
+                          staticElement: self::@class::B
+                          staticType: null
+                          token: B @-1
+                        type: B<Null*>*
+                    keyword: const @0
+                    staticType: B<Null*>*
+''');
   }
 
   test_defaultValue_refersToGenericClass_constructor_legacy() async {
@@ -6207,18 +13904,43 @@
   const C([B<T> b = const B()]);
 }
 ''');
-    checkElementText(
-        library,
-        r'''
-class B<T> {
-  const B();
-}
-class C<T> {
-  const C([B<T*>* b = const /*typeArgs=Null**/
-        B/*location: test.dart;B*/()]);
-}
-''',
-        withTypes: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class B @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        constructors
+          const @21
+      class C @34
+        typeParameters
+          covariant T @36
+            defaultType: dynamic
+        constructors
+          const @49
+            parameters
+              optionalPositional b @57
+                type: B<T*>*
+                constantInitializer
+                  InstanceCreationExpression
+                    argumentList: ArgumentList
+                      leftParenthesis: ( @0
+                      rightParenthesis: ) @0
+                    constructorName: ConstructorName
+                      staticElement: ConstructorMember
+                        base: self::@class::B::@constructor::•
+                        substitution: {T: Null*}
+                      type: TypeName
+                        name: SimpleIdentifier
+                          staticElement: self::@class::B
+                          staticType: null
+                          token: B @-1
+                        type: B<Null*>*
+                    keyword: const @0
+                    staticType: B<Null*>*
+''');
   }
 
   test_defaultValue_refersToGenericClass_functionG() async {
@@ -6228,16 +13950,42 @@
 }
 void foo<T>([B<T> b = const B()]) {}
 ''');
-    checkElementText(
-        library,
-        r'''
-class B<T> {
-  const B();
-}
-void foo<T>([B<T> b = const /*typeArgs=Never*/
-        B/*location: test.dart;B*/()]) {}
-''',
-        withTypes: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class B @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        constructors
+          const @21
+    functions
+      foo @33
+        typeParameters
+          covariant T @37
+        parameters
+          optionalPositional b @46
+            type: B<T>
+            constantInitializer
+              InstanceCreationExpression
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                constructorName: ConstructorName
+                  staticElement: ConstructorMember
+                    base: self::@class::B::@constructor::•
+                    substitution: {T: Never}
+                  type: TypeName
+                    name: SimpleIdentifier
+                      staticElement: self::@class::B
+                      staticType: null
+                      token: B @-1
+                    type: B<Never>
+                keyword: const @0
+                staticType: B<Never>
+        returnType: void
+''');
   }
 
   test_defaultValue_refersToGenericClass_methodG() async {
@@ -6249,18 +13997,45 @@
   void foo<T>([B<T> b = const B()]) {}
 }
 ''');
-    checkElementText(
-        library,
-        r'''
-class B<T> {
-  const B();
-}
-class C {
-  void foo<T>([B<T> b = const /*typeArgs=Never*/
-        B/*location: test.dart;B*/()]) {}
-}
-''',
-        withTypes: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class B @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        constructors
+          const @21
+      class C @34
+        constructors
+          synthetic @-1
+        methods
+          foo @45
+            typeParameters
+              covariant T @49
+            parameters
+              optionalPositional b @58
+                type: B<T>
+                constantInitializer
+                  InstanceCreationExpression
+                    argumentList: ArgumentList
+                      leftParenthesis: ( @0
+                      rightParenthesis: ) @0
+                    constructorName: ConstructorName
+                      staticElement: ConstructorMember
+                        base: self::@class::B::@constructor::•
+                        substitution: {T: Never}
+                      type: TypeName
+                        name: SimpleIdentifier
+                          staticElement: self::@class::B
+                          staticType: null
+                          token: B @-1
+                        type: B<Never>
+                    keyword: const @0
+                    staticType: B<Never>
+            returnType: void
+''');
   }
 
   test_defaultValue_refersToGenericClass_methodG_classG() async {
@@ -6272,18 +14047,50 @@
   void foo<E2>([B<E1, E2> b = const B()]) {}
 }
 ''');
-    checkElementText(
-        library,
-        r'''
-class B<T1, T2> {
-  const B();
-}
-class C<E1> {
-  void foo<E2>([B<E1, E2> b = const /*typeArgs=Never,Never*/
-        B/*location: test.dart;B*/()]) {}
-}
-''',
-        withTypes: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class B @6
+        typeParameters
+          covariant T1 @8
+            defaultType: dynamic
+          covariant T2 @12
+            defaultType: dynamic
+        constructors
+          const @26
+      class C @39
+        typeParameters
+          covariant E1 @41
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+        methods
+          foo @54
+            typeParameters
+              covariant E2 @58
+            parameters
+              optionalPositional b @73
+                type: B<E1, E2>
+                constantInitializer
+                  InstanceCreationExpression
+                    argumentList: ArgumentList
+                      leftParenthesis: ( @0
+                      rightParenthesis: ) @0
+                    constructorName: ConstructorName
+                      staticElement: ConstructorMember
+                        base: self::@class::B::@constructor::•
+                        substitution: {T1: Never, T2: Never}
+                      type: TypeName
+                        name: SimpleIdentifier
+                          staticElement: self::@class::B
+                          staticType: null
+                          token: B @-1
+                        type: B<Never, Never>
+                    keyword: const @0
+                    staticType: B<Never, Never>
+            returnType: void
+''');
   }
 
   test_defaultValue_refersToGenericClass_methodNG() async {
@@ -6295,18 +14102,46 @@
   void foo([B<T> b = const B()]) {}
 }
 ''');
-    checkElementText(
-        library,
-        r'''
-class B<T> {
-  const B();
-}
-class C<T> {
-  void foo([B<T> b = const /*typeArgs=Never*/
-        B/*location: test.dart;B*/()]) {}
-}
-''',
-        withTypes: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class B @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        constructors
+          const @21
+      class C @34
+        typeParameters
+          covariant T @36
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+        methods
+          foo @48
+            parameters
+              optionalPositional b @58
+                type: B<T>
+                constantInitializer
+                  InstanceCreationExpression
+                    argumentList: ArgumentList
+                      leftParenthesis: ( @0
+                      rightParenthesis: ) @0
+                    constructorName: ConstructorName
+                      staticElement: ConstructorMember
+                        base: self::@class::B::@constructor::•
+                        substitution: {T: Never}
+                      type: TypeName
+                        name: SimpleIdentifier
+                          staticElement: self::@class::B
+                          staticType: null
+                          token: B @-1
+                        type: B<Never>
+                    keyword: const @0
+                    staticType: B<Never>
+            returnType: void
+''');
   }
 
   test_duplicateDeclaration_class() async {
@@ -6320,14 +14155,40 @@
 }
 ''');
     checkElementText(library, r'''
-class A {
-}
-class A {
-  dynamic x;
-}
-class A {
-  int y;
-}
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          synthetic @-1
+      class A @17
+        fields
+          x @27
+            type: dynamic
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get x @27
+            returnType: dynamic
+          synthetic set x @27
+            parameters
+              requiredPositional _x @27
+                type: dynamic
+            returnType: void
+      class A @38
+        fields
+          y @48
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get y @48
+            returnType: int
+          synthetic set y @48
+            parameters
+              requiredPositional _y @48
+                type: int
+            returnType: void
 ''');
   }
 
@@ -6340,18 +14201,45 @@
 mixin M {}
 ''');
     checkElementText(library, r'''
-class A {
-}
-class B {
-}
-class alias X extends A with M {
-  synthetic X() : super();
-}
-class alias X extends B with M {
-  synthetic X() : super();
-}
-mixin M on Object {
-}
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          synthetic @-1
+      class B @17
+        constructors
+          synthetic @-1
+      class alias X @28
+        supertype: A
+        mixins
+          M
+        constructors
+          synthetic @-1
+            constantInitializers
+              SuperConstructorInvocation
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticElement: self::@class::A::@constructor::•
+      class alias X @48
+        supertype: B
+        mixins
+          M
+        constructors
+          synthetic @-1
+            constantInitializers
+              SuperConstructorInvocation
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticElement: self::@class::B::@constructor::•
+    mixins
+      mixin M @68
+        superclassConstraints
+          Object
+        constructors
+          synthetic @-1
 ''');
   }
 
@@ -6361,21 +14249,57 @@
 enum E {c, d, e}
 ''');
     checkElementText(library, r'''
-enum E {
-  synthetic final int index;
-  synthetic static const List<E> values;
-  static const E a;
-  static const E b;
-  String toString() {}
-}
-enum E {
-  synthetic final int index;
-  synthetic static const List<E> values;
-  static const E c;
-  static const E d;
-  static const E e;
-  String toString() {}
-}
+library
+  definingUnit
+    enums
+      enum E @5
+        fields
+          synthetic final index @-1
+            type: int
+          synthetic static const values @-1
+            type: List<E>
+          static const a @8
+            type: E
+          static const b @11
+            type: E
+        accessors
+          synthetic get index @-1
+            returnType: int
+          synthetic static get values @-1
+            returnType: List<E>
+          synthetic static get a @-1
+            returnType: E
+          synthetic static get b @-1
+            returnType: E
+        methods
+          toString @-1
+            returnType: String
+      enum E @19
+        fields
+          synthetic final index @-1
+            type: int
+          synthetic static const values @-1
+            type: List<E>
+          static const c @22
+            type: E
+          static const d @25
+            type: E
+          static const e @28
+            type: E
+        accessors
+          synthetic get index @-1
+            returnType: int
+          synthetic static get values @-1
+            returnType: List<E>
+          synthetic static get c @-1
+            returnType: E
+          synthetic static get d @-1
+            returnType: E
+          synthetic static get e @-1
+            returnType: E
+        methods
+          toString @-1
+            returnType: String
 ''');
   }
 
@@ -6391,16 +14315,41 @@
 }
 ''');
     checkElementText(library, r'''
-class A {
-}
-extension E on A {
-}
-extension E on A {
-  static dynamic x;
-}
-extension E on A {
-  static int y;
-}
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          synthetic @-1
+    extensions
+      E @21
+        extendedType: A
+      E @41
+        extendedType: A
+        fields
+          static x @63
+            type: dynamic
+        accessors
+          synthetic static get x @63
+            returnType: dynamic
+          synthetic static set x @63
+            parameters
+              requiredPositional _x @63
+                type: dynamic
+            returnType: void
+      E @78
+        extendedType: A
+        fields
+          static y @100
+            type: int
+        accessors
+          synthetic static get y @100
+            returnType: int
+          synthetic static set y @100
+            parameters
+              requiredPositional _y @100
+                type: int
+            returnType: void
 ''');
   }
 
@@ -6411,9 +14360,23 @@
 void f([int b, double c]) {}
 ''');
     checkElementText(library, r'''
-void f() {}
-void f(int a) {}
-void f([int b], [double c]) {}
+library
+  definingUnit
+    functions
+      f @5
+        returnType: void
+      f @17
+        parameters
+          requiredPositional a @23
+            type: int
+        returnType: void
+      f @34
+        parameters
+          optionalPositional b @41
+            type: int
+          optionalPositional c @51
+            type: double
+        returnType: void
 ''');
   }
 
@@ -6424,9 +14387,29 @@
 typedef void F([int b, double c]);
 ''');
     checkElementText(library, r'''
-typedef F = void Function();
-typedef F = void Function(int a);
-typedef F = void Function([int b], [double c]);
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased F @13
+        aliasedType: void Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: void
+      functionTypeAliasBased F @31
+        aliasedType: void Function(int)
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional a @-1
+              type: int
+          returnType: void
+      functionTypeAliasBased F @54
+        aliasedType: void Function([int, double])
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            optionalPositional b @-1
+              type: int
+            optionalPositional c @-1
+              type: double
+          returnType: void
 ''');
   }
 
@@ -6441,14 +14424,46 @@
 }
 ''');
     checkElementText(library, r'''
-mixin A on Object {
-}
-mixin A on Object {
-  dynamic x;
-}
-mixin A on Object {
-  int y;
-}
+library
+  definingUnit
+    mixins
+      mixin A @6
+        superclassConstraints
+          Object
+        constructors
+          synthetic @-1
+      mixin A @17
+        superclassConstraints
+          Object
+        fields
+          x @27
+            type: dynamic
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get x @27
+            returnType: dynamic
+          synthetic set x @27
+            parameters
+              requiredPositional _x @27
+                type: dynamic
+            returnType: void
+      mixin A @38
+        superclassConstraints
+          Object
+        fields
+          y @48
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get y @48
+            returnType: int
+          synthetic set y @48
+            parameters
+              requiredPositional _y @48
+                type: int
+            returnType: void
 ''');
   }
 
@@ -6460,10 +14475,46 @@
 var x = 2.3;
 ''');
     checkElementText(library, r'''
-bool x;
-dynamic x;
-int x;
-double x;
+library
+  definingUnit
+    topLevelVariables
+      static x @5
+        type: bool
+      static x @12
+        type: dynamic
+      static x @19
+        type: int
+      static x @30
+        type: double
+    accessors
+      synthetic static get x @5
+        returnType: bool
+      synthetic static set x @5
+        parameters
+          requiredPositional _x @5
+            type: bool
+        returnType: void
+      synthetic static get x @12
+        returnType: dynamic
+      synthetic static set x @12
+        parameters
+          requiredPositional _x @12
+            type: dynamic
+        returnType: void
+      synthetic static get x @19
+        returnType: int
+      synthetic static set x @19
+        parameters
+          requiredPositional _x @19
+            type: int
+        returnType: void
+      synthetic static get x @30
+        returnType: double
+      synthetic static set x @30
+        parameters
+          requiredPositional _x @30
+            type: double
+        returnType: void
 ''');
   }
 
@@ -6475,15 +14526,28 @@
  */
 enum E { v }''');
     checkElementText(library, r'''
-/**
- * Docs
- */
-enum E {
-  synthetic final int index;
-  synthetic static const List<E> values;
-  static const E v;
-  String toString() {}
-}
+library
+  definingUnit
+    enums
+      enum E @65
+        documentationComment: /**\n * Docs\n */
+        fields
+          synthetic final index @-1
+            type: int
+          synthetic static const values @-1
+            type: List<E>
+          static const v @69
+            type: E
+        accessors
+          synthetic get index @-1
+            returnType: int
+          synthetic static get values @-1
+            returnType: List<E>
+          synthetic static get v @-1
+            returnType: E
+        methods
+          toString @-1
+            returnType: String
 ''');
   }
 
@@ -6498,17 +14562,33 @@
   b
 }''');
     checkElementText(library, r'''
-enum E {
-  synthetic final int index;
-  synthetic static const List<E> values;
-  /**
-   * aaa
-   */
-  static const E a;
-  /// bbb
-  static const E b;
-  String toString() {}
-}
+library
+  definingUnit
+    enums
+      enum E @5
+        fields
+          synthetic final index @-1
+            type: int
+          synthetic static const values @-1
+            type: List<E>
+          static const a @32
+            documentationComment: /**\n   * aaa\n   */
+            type: E
+          static const b @47
+            documentationComment: /// bbb
+            type: E
+        accessors
+          synthetic get index @-1
+            returnType: int
+          synthetic static get values @-1
+            returnType: List<E>
+          synthetic static get a @-1
+            returnType: E
+          synthetic static get b @-1
+            returnType: E
+        methods
+          toString @-1
+            returnType: String
 ''');
   }
 
@@ -6527,55 +14607,136 @@
 
 const int annotation = 0;
 ''');
-    checkElementText(
-        library,
-        r'''
-enum E {
-  synthetic final int index;
-  synthetic static const List<E> values;
-  /**
-   * aaa
-   */
-  @annotation
-  static const E a;
-  /// bbb
-  @annotation
-  static const E b;
-  String toString() {}
-}
-const int annotation = 0;
-''',
-        withConstElements: false);
+    checkElementText(library, r'''
+library
+  definingUnit
+    enums
+      enum E @5
+        fields
+          synthetic final index @-1
+            type: int
+          synthetic static const values @-1
+            type: List<E>
+          static const a @46
+            documentationComment: /**\n   * aaa\n   */
+            metadata
+              Annotation
+                atSign.offset: 32
+                element: self::@getter::annotation
+                name: SimpleIdentifier
+                  staticElement: self::@getter::annotation
+                  staticType: null
+                  token: annotation @33
+            type: E
+          static const b @75
+            documentationComment: /// bbb
+            metadata
+              Annotation
+                atSign.offset: 61
+                element: self::@getter::annotation
+                name: SimpleIdentifier
+                  staticElement: self::@getter::annotation
+                  staticType: null
+                  token: annotation @62
+            type: E
+        accessors
+          synthetic get index @-1
+            returnType: int
+          synthetic static get values @-1
+            returnType: List<E>
+          synthetic static get a @-1
+            returnType: E
+          synthetic static get b @-1
+            returnType: E
+        methods
+          toString @-1
+            returnType: String
+    topLevelVariables
+      static const annotation @91
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 0 @104
+            staticType: int
+    accessors
+      synthetic static get annotation @91
+        returnType: int
+''');
   }
 
   test_enum_values() async {
     var library = await checkLibrary('enum E { v1, v2 }');
     checkElementText(library, r'''
-enum E {
-  synthetic final int index;
-  synthetic static const List<E> values;
-  static const E v1;
-  static const E v2;
-  String toString() {}
-}
+library
+  definingUnit
+    enums
+      enum E @5
+        fields
+          synthetic final index @-1
+            type: int
+          synthetic static const values @-1
+            type: List<E>
+          static const v1 @9
+            type: E
+          static const v2 @13
+            type: E
+        accessors
+          synthetic get index @-1
+            returnType: int
+          synthetic static get values @-1
+            returnType: List<E>
+          synthetic static get v1 @-1
+            returnType: E
+          synthetic static get v2 @-1
+            returnType: E
+        methods
+          toString @-1
+            returnType: String
 ''');
   }
 
   test_enums() async {
     var library = await checkLibrary('enum E1 { v1 } enum E2 { v2 }');
     checkElementText(library, r'''
-enum E1 {
-  synthetic final int index;
-  synthetic static const List<E1> values;
-  static const E1 v1;
-  String toString() {}
-}
-enum E2 {
-  synthetic final int index;
-  synthetic static const List<E2> values;
-  static const E2 v2;
-  String toString() {}
-}
+library
+  definingUnit
+    enums
+      enum E1 @5
+        fields
+          synthetic final index @-1
+            type: int
+          synthetic static const values @-1
+            type: List<E1>
+          static const v1 @10
+            type: E1
+        accessors
+          synthetic get index @-1
+            returnType: int
+          synthetic static get values @-1
+            returnType: List<E1>
+          synthetic static get v1 @-1
+            returnType: E1
+        methods
+          toString @-1
+            returnType: String
+      enum E2 @20
+        fields
+          synthetic final index @-1
+            type: int
+          synthetic static const values @-1
+            type: List<E2>
+          static const v2 @25
+            type: E2
+        accessors
+          synthetic get index @-1
+            returnType: int
+          synthetic static get values @-1
+            returnType: List<E2>
+          synthetic static get v2 @-1
+            returnType: E2
+        methods
+          toString @-1
+            returnType: String
 ''');
   }
 
@@ -6600,29 +14761,74 @@
 class D = Object with M, E;
 ''');
     checkElementText(library, r'''
-enum E {
-  synthetic final int index;
-  synthetic static const List<E> values;
-  static const E a;
-  static const E b;
-  static const E c;
-  String toString() {}
-}
-class M {
-}
-class A {
-  dynamic foo() {}
-}
-class B implements M {
-  dynamic foo() {}
-}
-class C extends Object with M {
-  synthetic C();
-  dynamic foo() {}
-}
-class alias D extends Object with M {
-  synthetic const D() : super();
-}
+library
+  definingUnit
+    classes
+      class M @24
+        constructors
+          synthetic @-1
+      class A @36
+        constructors
+          synthetic @-1
+        methods
+          foo @52
+            returnType: dynamic
+      class B @70
+        interfaces
+          M
+        constructors
+          synthetic @-1
+        methods
+          foo @92
+            returnType: dynamic
+      class C @110
+        supertype: Object
+        mixins
+          M
+        constructors
+          synthetic @-1
+        methods
+          foo @141
+            returnType: dynamic
+      class alias D @159
+        supertype: Object
+        mixins
+          M
+        constructors
+          synthetic const @-1
+            constantInitializers
+              SuperConstructorInvocation
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticElement: dart:core::@class::Object::@constructor::•
+    enums
+      enum E @5
+        fields
+          synthetic final index @-1
+            type: int
+          synthetic static const values @-1
+            type: List<E>
+          static const a @8
+            type: E
+          static const b @11
+            type: E
+          static const c @14
+            type: E
+        accessors
+          synthetic get index @-1
+            returnType: int
+          synthetic static get values @-1
+            returnType: List<E>
+          synthetic static get a @-1
+            returnType: E
+          synthetic static get b @-1
+            returnType: E
+          synthetic static get c @-1
+            returnType: E
+        methods
+          toString @-1
+            returnType: String
 ''');
   }
 
@@ -6632,8 +14838,23 @@
 main(F f) {}
 ''');
     checkElementText(library, r'''
-typedef F = dynamic Function(int p);
-dynamic main(dynamic Function(int) f) {}
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased F @8
+        aliasedType: dynamic Function(int)
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional p @-1
+              type: int
+          returnType: dynamic
+    functions
+      main @18
+        parameters
+          requiredPositional f @25
+            type: dynamic Function(int)
+              aliasElement: self::@typeAlias::F
+        returnType: dynamic
 ''');
   }
 
@@ -6643,11 +14864,12 @@
     checkElementText(
         library,
         r'''
-export 'a.dart';
-
---------------------
-Exports:
-  C: a.dart;C
+library
+  exports
+    a.dart
+  definingUnit
+  exportScope
+    C: a.dart;C
 ''',
         withExportScope: true);
   }
@@ -6662,11 +14884,12 @@
     checkElementText(
         library,
         r'''
-export 'a.dart';
-
---------------------
-Exports:
-  C: a.dart;C
+library
+  exports
+    a.dart
+  definingUnit
+  exportScope
+    C: a.dart;C
 ''',
         withExportScope: true);
   }
@@ -6686,11 +14909,12 @@
     checkElementText(
         library,
         r'''
-export 'foo.dart';
-
---------------------
-Exports:
-  A: foo.dart;A
+library
+  exports
+    foo.dart
+  definingUnit
+  exportScope
+    A: foo.dart;A
 ''',
         withExportScope: true);
     expect(library.exports[0].exportedLibrary!.source.shortName, 'foo.dart');
@@ -6712,11 +14936,12 @@
     checkElementText(
         library,
         r'''
-export 'foo_io.dart';
-
---------------------
-Exports:
-  A: foo_io.dart;A
+library
+  exports
+    foo_io.dart
+  definingUnit
+  exportScope
+    A: foo_io.dart;A
 ''',
         withExportScope: true);
     expect(library.exports[0].exportedLibrary!.source.shortName, 'foo_io.dart');
@@ -6738,11 +14963,12 @@
     checkElementText(
         library,
         r'''
-export 'foo_html.dart';
-
---------------------
-Exports:
-  A: foo_html.dart;A
+library
+  exports
+    foo_html.dart
+  definingUnit
+  exportScope
+    A: foo_html.dart;A
 ''',
         withExportScope: true);
     ExportElement export = library.exports[0];
@@ -6755,11 +14981,12 @@
     checkElementText(
         library,
         r'''
-export 'a.dart';
-
---------------------
-Exports:
-  f: a.dart;f
+library
+  exports
+    a.dart
+  definingUnit
+  exportScope
+    f: a.dart;f
 ''',
         withExportScope: true);
   }
@@ -6768,7 +14995,10 @@
     addLibrarySource('/a.dart', 'get f() => null;');
     var library = await checkLibrary('export "a.dart";');
     checkElementText(library, r'''
-export 'a.dart';
+library
+  exports
+    a.dart
+  definingUnit
 ''');
   }
 
@@ -6779,16 +15009,19 @@
     checkElementText(
         library,
         r'''
-export 'dart:async' hide Stream, Future;
-
---------------------
-Exports:
-  Completer: dart:async;Completer
-  FutureOr: dart:async;FutureOr
-  StreamIterator: dart:async;dart:async/stream.dart;StreamIterator
-  StreamSubscription: dart:async;dart:async/stream.dart;StreamSubscription
-  StreamTransformer: dart:async;dart:async/stream.dart;StreamTransformer
-  Timer: dart:async;Timer
+library
+  exports
+    dart:async
+      combinators
+        hide: Stream, Future
+  definingUnit
+  exportScope
+    Completer: dart:async;Completer
+    FutureOr: dart:async;FutureOr
+    StreamIterator: dart:async;dart:async/stream.dart;StreamIterator
+    StreamSubscription: dart:async;dart:async/stream.dart;StreamSubscription
+    StreamTransformer: dart:async;dart:async/stream.dart;StreamTransformer
+    Timer: dart:async;Timer
 ''',
         withExportScope: true);
   }
@@ -6800,11 +15033,15 @@
     checkElementText(
         library,
         r'''
-export 'dart:async' hide Stream show Future;
-
---------------------
-Exports:
-  Future: dart:async;Future
+library
+  exports
+    dart:async
+      combinators
+        hide: Stream
+        show: Future
+  definingUnit
+  exportScope
+    Future: dart:async;Future
 ''',
         withExportScope: true);
   }
@@ -6815,11 +15052,12 @@
     checkElementText(
         library,
         r'''
-export 'a.dart';
-
---------------------
-Exports:
-  f=: a.dart;f=
+library
+  exports
+    a.dart
+  definingUnit
+  exportScope
+    f=: a.dart;f=
 ''',
         withExportScope: true);
   }
@@ -6831,12 +15069,15 @@
     checkElementText(
         library,
         r'''
-export 'dart:async' show Future, Stream;
-
---------------------
-Exports:
-  Future: dart:async;Future
-  Stream: dart:async;dart:async/stream.dart;Stream
+library
+  exports
+    dart:async
+      combinators
+        show: Future, Stream
+  definingUnit
+  exportScope
+    Future: dart:async;Future
+    Stream: dart:async;dart:async/stream.dart;Stream
 ''',
         withExportScope: true);
   }
@@ -6850,12 +15091,15 @@
     checkElementText(
         library,
         r'''
-export 'a.dart' show f;
-
---------------------
-Exports:
-  f: a.dart;f?
-  f=: a.dart;f=
+library
+  exports
+    a.dart
+      combinators
+        show: f
+  definingUnit
+  exportScope
+    f: a.dart;f?
+    f=: a.dart;f=
 ''',
         withExportScope: true);
   }
@@ -6866,11 +15110,12 @@
     checkElementText(
         library,
         r'''
-export 'a.dart';
-
---------------------
-Exports:
-  F: a.dart;F
+library
+  exports
+    a.dart
+  definingUnit
+  exportScope
+    F: a.dart;F
 ''',
         withExportScope: true);
   }
@@ -6888,12 +15133,13 @@
     checkElementText(
         library,
         r'''
-export 'a.dart';
-
---------------------
-Exports:
-  x: a.dart;x?
-  x=: a.dart;x=
+library
+  exports
+    a.dart
+  definingUnit
+  exportScope
+    x: a.dart;x?
+    x=: a.dart;x=
 ''',
         withExportScope: true);
   }
@@ -6904,11 +15150,12 @@
     checkElementText(
         library,
         r'''
-export 'a.dart';
-
---------------------
-Exports:
-  x: a.dart;x?
+library
+  exports
+    a.dart
+  definingUnit
+  exportScope
+    x: a.dart;x?
 ''',
         withExportScope: true);
   }
@@ -6919,11 +15166,12 @@
     checkElementText(
         library,
         r'''
-export 'a.dart';
-
---------------------
-Exports:
-  x: a.dart;x?
+library
+  exports
+    a.dart
+  definingUnit
+  exportScope
+    x: a.dart;x?
 ''',
         withExportScope: true);
   }
@@ -6945,9 +15193,15 @@
 class B extends A {}
 ''');
     checkElementText(library, r'''
-import 'bar.dart';
-class B extends A {
-}
+library
+  imports
+    bar.dart
+  definingUnit
+    classes
+      class B @25
+        supertype: A
+        constructors
+          synthetic @-1
 ''');
     var typeA = library.definingCompilationUnit.getType('B')!.supertype!;
     expect(typeA.element.source.shortName, 'foo.dart');
@@ -6971,9 +15225,15 @@
 class B extends A {}
 ''');
     checkElementText(library, r'''
-import 'bar.dart';
-class B extends A {
-}
+library
+  imports
+    bar.dart
+  definingUnit
+    classes
+      class B @25
+        supertype: A
+        constructors
+          synthetic @-1
 ''');
     var typeA = library.definingCompilationUnit.getType('B')!.supertype!;
     expect(typeA.element.source.shortName, 'foo_io.dart');
@@ -6997,9 +15257,15 @@
 class B extends A {}
 ''');
     checkElementText(library, r'''
-import 'bar.dart';
-class B extends A {
-}
+library
+  imports
+    bar.dart
+  definingUnit
+    classes
+      class B @25
+        supertype: A
+        constructors
+          synthetic @-1
 ''');
     var typeA = library.definingCompilationUnit.getType('B')!.supertype!;
     expect(typeA.element.source.shortName, 'foo_html.dart');
@@ -7012,11 +15278,12 @@
     checkElementText(
         library,
         r'''
-export 'a.dart';
-export 'b.dart';
-
---------------------
-Exports:
+library
+  exports
+    a.dart
+    b.dart
+  definingUnit
+  exportScope
 ''',
         withExportScope: true);
   }
@@ -7028,9 +15295,21 @@
 }
 ''');
     checkElementText(library, r'''
-class C<T> {
-  final dynamic f;
-}
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        fields
+          final f @21
+            type: dynamic
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get f @21
+            returnType: dynamic
 ''');
   }
 
@@ -7041,11 +15320,12 @@
 /// cc
 extension E on int {}''');
     checkElementText(library, r'''
-/// aaa
-/// bbbb
-/// cc
-extension E on int {
-}
+library
+  definingUnit
+    extensions
+      E @34
+        documentationComment: /// aaa\n/// bbbb\n/// cc
+        extendedType: int
 ''');
   }
 
@@ -7055,9 +15335,21 @@
   static const x = 0;
 }''');
     checkElementText(library, r'''
-extension E on int {
-  static const int x = 0;
-}
+library
+  definingUnit
+    extensions
+      E @10
+        extendedType: int
+        fields
+          static const x @36
+            type: int
+            constantInitializer
+              IntegerLiteral
+                literal: 0 @40
+                staticType: int
+        accessors
+          synthetic static get x @36
+            returnType: int
 ''');
   }
 
@@ -7067,10 +15359,24 @@
   abstract int i;
 }
 ''');
-    checkElementText(library, '''
-abstract class C {
-  abstract int i;
-}
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      abstract class C @15
+        fields
+          abstract i @34
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic abstract get i @34
+            returnType: int
+          synthetic abstract set i @34
+            parameters
+              requiredPositional _i @34
+                type: int
+            returnType: void
 ''');
   }
 
@@ -7080,9 +15386,23 @@
   covariant int x;
 }''');
     checkElementText(library, r'''
-class C {
-  covariant int x;
-}
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          covariant x @26
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get x @26
+            returnType: int
+          synthetic set x @26
+            parameters
+              requiredPositional covariant _x @26
+                type: int
+            returnType: void
 ''');
   }
 
@@ -7095,12 +15415,24 @@
   var x;
 }''');
     checkElementText(library, r'''
-class C {
-  /**
-   * Docs
-   */
-  dynamic x;
-}
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          x @38
+            documentationComment: /**\n   * Docs\n   */
+            type: dynamic
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get x @38
+            returnType: dynamic
+          synthetic set x @38
+            parameters
+              requiredPositional _x @38
+                type: dynamic
+            returnType: void
 ''');
   }
 
@@ -7110,10 +15442,24 @@
   external int i;
 }
 ''');
-    checkElementText(library, '''
-abstract class C {
-  external int i;
-}
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      abstract class C @15
+        fields
+          external i @34
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get i @34
+            returnType: int
+          synthetic set i @34
+            parameters
+              requiredPositional _i @34
+                type: int
+            returnType: void
 ''');
   }
 
@@ -7125,10 +15471,22 @@
 }
 ''');
     checkElementText(library, r'''
-class C {
-  final int x = 42;
-  const C();
-}
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          final x @18
+            type: int
+            constantInitializer
+              IntegerLiteral
+                literal: 42 @22
+                staticType: int
+        constructors
+          const @34
+        accessors
+          synthetic get x @18
+            returnType: int
 ''');
   }
 
@@ -7143,16 +15501,76 @@
 }
 ''');
     checkElementText(library, r'''
-class A<T> {
-  const A();
-}
-class B {
-  final A<int Function(double)> f = const
-        A/*location: test.dart;A*/<
-        int/*location: dart:core;int*/ Function(
-        double/*location: dart:core;double*/ a)>();
-  const B();
-}
+library
+  definingUnit
+    classes
+      class A @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        constructors
+          const @21
+      class B @34
+        fields
+          final f @46
+            type: A<int Function(double)>
+            constantInitializer
+              InstanceCreationExpression
+                argumentList: ArgumentList
+                  leftParenthesis: ( @81
+                  rightParenthesis: ) @82
+                constructorName: ConstructorName
+                  staticElement: ConstructorMember
+                    base: self::@class::A::@constructor::•
+                    substitution: {T: int Function(double)}
+                  type: TypeName
+                    name: SimpleIdentifier
+                      staticElement: self::@class::A
+                      staticType: null
+                      token: A @56
+                    type: A<int Function(double)>
+                    typeArguments: TypeArgumentList
+                      arguments
+                        GenericFunctionType
+                          declaredElement: GenericFunctionTypeElement
+                            parameters
+                              a
+                                kind: required positional
+                                type: double
+                            returnType: int
+                            type: int Function(double)
+                          functionKeyword: Function @0
+                          parameters: FormalParameterList
+                            parameters
+                              SimpleFormalParameter
+                                declaredElement: a@-1
+                                declaredElementType: double
+                                identifier: SimpleIdentifier
+                                  staticElement: <null>
+                                  staticType: null
+                                  token: a @78
+                                type: TypeName
+                                  name: SimpleIdentifier
+                                    staticElement: dart:core::@class::double
+                                    staticType: null
+                                    token: double @71
+                                  type: double
+                          returnType: TypeName
+                            name: SimpleIdentifier
+                              staticElement: dart:core::@class::int
+                              staticType: null
+                              token: int @58
+                            type: int
+                          type: int Function(double)
+                      leftBracket: < @0
+                      rightBracket: > @0
+                keyword: const @50
+                staticType: A<int Function(double)>
+        constructors
+          const @93
+        accessors
+          synthetic get f @46
+            returnType: A<int Function(double)>
 ''');
   }
 
@@ -7163,9 +15581,18 @@
 }
 ''');
     checkElementText(library, r'''
-class C {
-  final int x;
-}
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          final x @18
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get x @18
+            returnType: int
 ''');
   }
 
@@ -7173,31 +15600,82 @@
     var library = await checkLibrary('class C extends D { var v; C(this.v); }'
         ' abstract class D { int get v; }');
     checkElementText(library, r'''
-class C extends D {
-  int v;
-  C(final int this.v);
-}
-abstract class D {
-  int get v;
-}
+library
+  definingUnit
+    classes
+      class C @6
+        supertype: D
+        fields
+          v @24
+            type: int
+        constructors
+          @27
+            parameters
+              requiredPositional final this.v @34
+                type: int
+        accessors
+          synthetic get v @24
+            returnType: int
+          synthetic set v @24
+            parameters
+              requiredPositional _v @24
+                type: int
+            returnType: void
+      abstract class D @55
+        fields
+          synthetic v @-1
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          abstract get v @67
+            returnType: int
 ''');
   }
 
   test_field_inferred_type_nonStatic_explicit_initialized() async {
     var library = await checkLibrary('class C { num v = 0; }');
     checkElementText(library, r'''
-class C {
-  num v;
-}
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          v @14
+            type: num
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get v @14
+            returnType: num
+          synthetic set v @14
+            parameters
+              requiredPositional _v @14
+                type: num
+            returnType: void
 ''');
   }
 
   test_field_inferred_type_nonStatic_implicit_initialized() async {
     var library = await checkLibrary('class C { var v = 0; }');
     checkElementText(library, r'''
-class C {
-  int v;
-}
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          v @14
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get v @14
+            returnType: int
+          synthetic set v @14
+            parameters
+              requiredPositional _v @14
+                type: int
+            returnType: void
 ''');
   }
 
@@ -7205,12 +15683,33 @@
     var library = await checkLibrary(
         'class C extends D { var v; } abstract class D { int get v; }');
     checkElementText(library, r'''
-class C extends D {
-  int v;
-}
-abstract class D {
-  int get v;
-}
+library
+  definingUnit
+    classes
+      class C @6
+        supertype: D
+        fields
+          v @24
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get v @24
+            returnType: int
+          synthetic set v @24
+            parameters
+              requiredPositional _v @24
+                type: int
+            returnType: void
+      abstract class D @44
+        fields
+          synthetic v @-1
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          abstract get v @56
+            returnType: int
 ''');
   }
 
@@ -7226,40 +15725,72 @@
   final f = [a];
 }
 ''');
-    checkElementText(
-        library,
-        r'''
-abstract class A {
-  List<int> get f;
-  const A();
-}
-class B extends A {
-  final List<int> f;
-    constantInitializer
-      ListLiteral
-        elements
-          SimpleIdentifier
-            staticElement: self::@getter::a
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      abstract class A @28
+        fields
+          synthetic f @-1
+            type: List<int>
+        constructors
+          const @40
+        accessors
+          abstract get f @61
+            returnType: List<int>
+      class B @72
+        supertype: A
+        fields
+          final f @107
+            type: List<int>
+            constantInitializer
+              ListLiteral
+                elements
+                  SimpleIdentifier
+                    staticElement: self::@getter::a
+                    staticType: int
+                    token: a @112
+                leftBracket: [ @0
+                rightBracket: ] @0
+                staticType: List<int>
+        constructors
+          const @94
+        accessors
+          synthetic get f @107
+            returnType: List<int>
+    topLevelVariables
+      static const a @6
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 0 @10
             staticType: int
-            token: a
-        staticType: List<int>
-  const B();
-}
-const int a;
-  constantInitializer
-    IntegerLiteral
-      literal: 0
-      staticType: int
-''',
-        withResolvedAst: true);
+    accessors
+      synthetic static get a @6
+        returnType: int
+''');
   }
 
   test_field_inferred_type_static_implicit_initialized() async {
     var library = await checkLibrary('class C { static var v = 0; }');
     checkElementText(library, r'''
-class C {
-  static int v;
-}
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          static v @21
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic static get v @21
+            returnType: int
+          synthetic static set v @21
+            parameters
+              requiredPositional _v @21
+                type: int
+            returnType: void
 ''');
   }
 
@@ -7269,9 +15800,22 @@
   static const x = 0;
 }''');
     checkElementText(library, r'''
-class C {
-  static const int x = 0;
-}
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          static const x @25
+            type: int
+            constantInitializer
+              IntegerLiteral
+                literal: 0 @29
+                staticType: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic static get x @25
+            returnType: int
 ''');
   }
 
@@ -7283,10 +15827,20 @@
   final b = a / 2;
 }''');
     checkElementText(library, r'''
-import 'a.dart';
-class C {
-  final double b;
-}
+library
+  imports
+    a.dart
+  definingUnit
+    classes
+      class C @23
+        fields
+          final b @35
+            type: double
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get b @35
+            returnType: double
 ''');
   }
 
@@ -7299,15 +15853,28 @@
   final b = a / 2;
 }''');
     checkElementText(library, r'''
-library lib;
-part 'a.dart';
-class C {
-  final double b;
-}
---------------------
-unit: a.dart
-
-final int a;
+library
+  name: lib
+  nameOffset: 8
+  definingUnit
+    classes
+      class C @34
+        fields
+          final b @46
+            type: double
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get b @46
+            returnType: double
+  parts
+    a.dart
+      topLevelVariables
+        static final a @19
+          type: int
+      accessors
+        synthetic static get a @19
+          returnType: int
 ''');
   }
 
@@ -7317,9 +15884,18 @@
   final x = 0;
 }''');
     checkElementText(library, r'''
-class C {
-  final int x;
-}
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          final x @18
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get x @18
+            returnType: int
 ''');
   }
 
@@ -7329,18 +15905,36 @@
   static final x = 0;
 }''');
     checkElementText(library, r'''
-class C {
-  static final int x;
-}
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          static final x @25
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic static get x @25
+            returnType: int
 ''');
   }
 
   test_field_static_final_untyped() async {
     var library = await checkLibrary('class C { static final x = 0; }');
     checkElementText(library, r'''
-class C {
-  static final int x;
-}
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          static final x @23
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic static get x @23
+            returnType: int
 ''');
   }
 
@@ -7352,9 +15946,23 @@
 ''');
 
     checkElementText(library, r'''
-class C {
-  Never a;
-}
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          a @16
+            type: Never
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get a @16
+            returnType: Never
+          synthetic set a @16
+            parameters
+              requiredPositional _a @16
+                type: Never
+            returnType: void
 ''');
   }
 
@@ -7372,28 +15980,71 @@
 ''');
 
     checkElementText(library, r'''
-import 'a.dart';
-class C {
-  int b;
-}
+library
+  imports
+    a.dart
+  definingUnit
+    classes
+      class C @23
+        fields
+          b @33
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get b @33
+            returnType: int
+          synthetic set b @33
+            parameters
+              requiredPositional _b @33
+                type: int
+            returnType: void
 ''');
   }
 
   test_field_typed() async {
     var library = await checkLibrary('class C { int x = 0; }');
     checkElementText(library, r'''
-class C {
-  int x;
-}
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          x @14
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get x @14
+            returnType: int
+          synthetic set x @14
+            parameters
+              requiredPositional _x @14
+                type: int
+            returnType: void
 ''');
   }
 
   test_field_untyped() async {
     var library = await checkLibrary('class C { var x = 0; }');
     checkElementText(library, r'''
-class C {
-  int x;
-}
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          x @14
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get x @14
+            returnType: int
+          synthetic set x @14
+            parameters
+              requiredPositional _x @14
+                type: int
+            returnType: void
 ''');
   }
 
@@ -7408,23 +16059,35 @@
   C2();
 }
 ''');
-    checkElementText(
-        library,
-        r'''
-class C1 {
-  final List<int> f1;
-    constantInitializer
-      ListLiteral
-        constKeyword: const
-        staticType: List<int>
-  const C1();
-}
-class C2 {
-  final List<int> f2;
-  C2();
-}
-''',
-        withResolvedAst: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C1 @6
+        fields
+          final f1 @30
+            type: List<int>
+            constantInitializer
+              ListLiteral
+                constKeyword: const @0
+                leftBracket: [ @0
+                rightBracket: ] @0
+                staticType: List<int>
+        constructors
+          const @53
+        accessors
+          synthetic get f1 @30
+            returnType: List<int>
+      class C2 @67
+        fields
+          final f2 @91
+            type: List<int>
+        constructors
+          @108
+        accessors
+          synthetic get f2 @91
+            returnType: List<int>
+''');
   }
 
   test_function_async() async {
@@ -7433,8 +16096,13 @@
 Future f() async {}
 ''');
     checkElementText(library, r'''
-import 'dart:async';
-Future<dynamic> f() async {}
+library
+  imports
+    dart:async
+  definingUnit
+    functions
+      f @28 async
+        returnType: Future<dynamic>
 ''');
   }
 
@@ -7444,8 +16112,13 @@
 Stream f() async* {}
 ''');
     checkElementText(library, r'''
-import 'dart:async';
-Stream<dynamic> f() async* {}
+library
+  imports
+    dart:async
+  definingUnit
+    functions
+      f @28 async*
+        returnType: Stream<dynamic>
 ''');
   }
 
@@ -7457,17 +16130,23 @@
  */
 f() {}''');
     checkElementText(library, r'''
-/**
- * Docs
- */
-dynamic f() {}
+library
+  definingUnit
+    functions
+      f @60
+        documentationComment: /**\n * Docs\n */
+        returnType: dynamic
 ''');
   }
 
   test_function_entry_point() async {
     var library = await checkLibrary('main() {}');
     checkElementText(library, r'''
-dynamic main() {}
+library
+  definingUnit
+    functions
+      main @0
+        returnType: dynamic
 ''');
   }
 
@@ -7475,7 +16154,10 @@
     addLibrarySource('/a.dart', 'library a; main() {}');
     var library = await checkLibrary('export "a.dart";');
     checkElementText(library, r'''
-export 'a.dart';
+library
+  exports
+    a.dart
+  definingUnit
 ''');
   }
 
@@ -7483,7 +16165,12 @@
     addLibrarySource('/a.dart', 'library a; main() {}');
     var library = await checkLibrary('export "a.dart" hide main;');
     checkElementText(library, r'''
-export 'a.dart' hide main;
+library
+  exports
+    a.dart
+      combinators
+        hide: main
+  definingUnit
 ''');
   }
 
@@ -7491,19 +16178,26 @@
     addSource('/a.dart', 'part of my.lib; main() {}');
     var library = await checkLibrary('library my.lib; part "a.dart";');
     checkElementText(library, r'''
-library my.lib;
-part 'a.dart';
---------------------
-unit: a.dart
-
-dynamic main() {}
+library
+  name: my.lib
+  nameOffset: 8
+  definingUnit
+  parts
+    a.dart
+      functions
+        main @16
+          returnType: dynamic
 ''');
   }
 
   test_function_external() async {
     var library = await checkLibrary('external f();');
     checkElementText(library, r'''
-external dynamic f() {}
+library
+  definingUnit
+    functions
+      external f @9
+        returnType: dynamic
 ''');
   }
 
@@ -7528,7 +16222,14 @@
 void f(int this.a) {}
 ''');
     checkElementText(library, r'''
-void f(final int this.a) {}
+library
+  definingUnit
+    functions
+      f @5
+        parameters
+          requiredPositional final this.a @16
+            type: int
+        returnType: void
 ''');
   }
 
@@ -7536,16 +16237,20 @@
     var library = await checkLibrary('''
 void f({int this.a: 42}) {}
 ''');
-    checkElementText(
-        library,
-        r'''
-void f({final int this.a}) {}
-  a
-    IntegerLiteral
-      literal: 42
-      staticType: int
-''',
-        withResolvedAst: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    functions
+      f @5
+        parameters
+          optionalNamed final this.a @17
+            type: int
+            constantInitializer
+              IntegerLiteral
+                literal: 42 @0
+                staticType: int
+        returnType: void
+''');
   }
 
   test_function_parameter_fieldFormal_functionTyped() async {
@@ -7553,105 +16258,220 @@
 void f(int this.a(int b)) {}
 ''');
     checkElementText(library, r'''
-void f(final int Function(int) this.a/*(int b)*/) {}
+library
+  definingUnit
+    functions
+      f @5
+        parameters
+          requiredPositional final this.a @16
+            type: int Function(int)
+            parameters
+              requiredPositional b @-1
+                type: int
+        returnType: void
 ''');
   }
 
   test_function_parameter_final() async {
     var library = await checkLibrary('f(final x) {}');
     checkElementText(library, r'''
-dynamic f(final dynamic x) {}
+library
+  definingUnit
+    functions
+      f @0
+        parameters
+          requiredPositional final x @8
+            type: dynamic
+        returnType: dynamic
 ''');
   }
 
   test_function_parameter_kind_named() async {
     var library = await checkLibrary('f({x}) {}');
     checkElementText(library, r'''
-dynamic f({dynamic x}) {}
+library
+  definingUnit
+    functions
+      f @0
+        parameters
+          optionalNamed x @3
+            type: dynamic
+        returnType: dynamic
 ''');
   }
 
   test_function_parameter_kind_positional() async {
     var library = await checkLibrary('f([x]) {}');
     checkElementText(library, r'''
-dynamic f([dynamic x]) {}
+library
+  definingUnit
+    functions
+      f @0
+        parameters
+          optionalPositional x @3
+            type: dynamic
+        returnType: dynamic
 ''');
   }
 
   test_function_parameter_kind_required() async {
     var library = await checkLibrary('f(x) {}');
     checkElementText(library, r'''
-dynamic f(dynamic x) {}
+library
+  definingUnit
+    functions
+      f @0
+        parameters
+          requiredPositional x @2
+            type: dynamic
+        returnType: dynamic
 ''');
   }
 
   test_function_parameter_parameters() async {
     var library = await checkLibrary('f(g(x, y)) {}');
     checkElementText(library, r'''
-dynamic f(dynamic Function(dynamic, dynamic) g/*(dynamic x, dynamic y)*/) {}
+library
+  definingUnit
+    functions
+      f @0
+        parameters
+          requiredPositional g @2
+            type: dynamic Function(dynamic, dynamic)
+            parameters
+              requiredPositional x @4
+                type: dynamic
+              requiredPositional y @7
+                type: dynamic
+        returnType: dynamic
 ''');
   }
 
   test_function_parameter_return_type() async {
     var library = await checkLibrary('f(int g()) {}');
     checkElementText(library, r'''
-dynamic f(int Function() g) {}
+library
+  definingUnit
+    functions
+      f @0
+        parameters
+          requiredPositional g @6
+            type: int Function()
+        returnType: dynamic
 ''');
   }
 
   test_function_parameter_return_type_void() async {
     var library = await checkLibrary('f(void g()) {}');
     checkElementText(library, r'''
-dynamic f(void Function() g) {}
+library
+  definingUnit
+    functions
+      f @0
+        parameters
+          requiredPositional g @7
+            type: void Function()
+        returnType: dynamic
 ''');
   }
 
   test_function_parameter_type() async {
     var library = await checkLibrary('f(int i) {}');
     checkElementText(library, r'''
-dynamic f(int i) {}
+library
+  definingUnit
+    functions
+      f @0
+        parameters
+          requiredPositional i @6
+            type: int
+        returnType: dynamic
 ''');
   }
 
   test_function_parameters() async {
     var library = await checkLibrary('f(x, y) {}');
     checkElementText(library, r'''
-dynamic f(dynamic x, dynamic y) {}
+library
+  definingUnit
+    functions
+      f @0
+        parameters
+          requiredPositional x @2
+            type: dynamic
+          requiredPositional y @5
+            type: dynamic
+        returnType: dynamic
 ''');
   }
 
   test_function_return_type() async {
     var library = await checkLibrary('int f() => null;');
     checkElementText(library, r'''
-int f() {}
+library
+  definingUnit
+    functions
+      f @4
+        returnType: int
 ''');
   }
 
   test_function_return_type_implicit() async {
     var library = await checkLibrary('f() => null;');
     checkElementText(library, r'''
-dynamic f() {}
+library
+  definingUnit
+    functions
+      f @0
+        returnType: dynamic
 ''');
   }
 
   test_function_return_type_void() async {
     var library = await checkLibrary('void f() {}');
     checkElementText(library, r'''
-void f() {}
+library
+  definingUnit
+    functions
+      f @5
+        returnType: void
 ''');
   }
 
   test_function_type_parameter() async {
     var library = await checkLibrary('T f<T, U>(U u) => null;');
     checkElementText(library, r'''
-T f<T, U>(U u) {}
+library
+  definingUnit
+    functions
+      f @2
+        typeParameters
+          covariant T @4
+          covariant U @7
+        parameters
+          requiredPositional u @12
+            type: U
+        returnType: T
 ''');
   }
 
   test_function_type_parameter_with_function_typed_parameter() async {
     var library = await checkLibrary('void f<T, U>(T x(U u)) {}');
     checkElementText(library, r'''
-void f<T, U>(T Function(U) x/*(U u)*/) {}
+library
+  definingUnit
+    functions
+      f @5
+        typeParameters
+          covariant T @7
+          covariant U @10
+        parameters
+          requiredPositional x @15
+            type: T Function(U)
+            parameters
+              requiredPositional u @19
+                type: U
+        returnType: void
 ''');
   }
 
@@ -7666,8 +16486,13 @@
   test_functions() async {
     var library = await checkLibrary('f() {} g() {}');
     checkElementText(library, r'''
-dynamic f() {}
-dynamic g() {}
+library
+  definingUnit
+    functions
+      f @0
+        returnType: dynamic
+      g @7
+        returnType: dynamic
 ''');
   }
 
@@ -7708,12 +16533,21 @@
     var library = await checkLibrary(r'''
 typedef void F<T>(T a);
 ''');
-    checkElementText(
-        library,
-        r'''
-typedef F<contravariant T> = void Function(T a);
-''',
-        withTypeParameterVariance: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased F @13
+        typeParameters
+          contravariant T @15
+            defaultType: dynamic
+        aliasedType: void Function(T)
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional a @-1
+              type: T
+          returnType: void
+''');
   }
 
   test_functionTypeAlias_typeParameters_variance_contravariant2() async {
@@ -7721,13 +16555,31 @@
 typedef void F1<T>(T a);
 typedef F1<T> F2<T>();
 ''');
-    checkElementText(
-        library,
-        r'''
-typedef F1<contravariant T> = void Function(T a);
-typedef F2<contravariant T> = void Function(T) Function();
-''',
-        withTypeParameterVariance: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased F1 @13
+        typeParameters
+          contravariant T @16
+            defaultType: dynamic
+        aliasedType: void Function(T)
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional a @-1
+              type: T
+          returnType: void
+      functionTypeAliasBased F2 @39
+        typeParameters
+          contravariant T @42
+            defaultType: dynamic
+        aliasedType: void Function(T) Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: void Function(T)
+            aliasElement: self::@typeAlias::F1
+            aliasArguments
+              T
+''');
   }
 
   test_functionTypeAlias_typeParameters_variance_contravariant3() async {
@@ -7735,37 +16587,67 @@
 typedef F1<T> F2<T>();
 typedef void F1<T>(T a);
 ''');
-    checkElementText(
-        library,
-        r'''
-typedef F2<contravariant T> = void Function(T) Function();
-typedef F1<contravariant T> = void Function(T a);
-''',
-        withTypeParameterVariance: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased F2 @14
+        typeParameters
+          contravariant T @17
+            defaultType: dynamic
+        aliasedType: void Function(T) Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: void Function(T)
+            aliasElement: self::@typeAlias::F1
+            aliasArguments
+              T
+      functionTypeAliasBased F1 @36
+        typeParameters
+          contravariant T @39
+            defaultType: dynamic
+        aliasedType: void Function(T)
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional a @-1
+              type: T
+          returnType: void
+''');
   }
 
   test_functionTypeAlias_typeParameters_variance_covariant() async {
     var library = await checkLibrary(r'''
 typedef T F<T>();
 ''');
-    checkElementText(
-        library,
-        r'''
-typedef F<covariant T> = T Function();
-''',
-        withTypeParameterVariance: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased F @10
+        typeParameters
+          covariant T @12
+            defaultType: dynamic
+        aliasedType: T Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: T
+''');
   }
 
   test_functionTypeAlias_typeParameters_variance_covariant2() async {
     var library = await checkLibrary(r'''
 typedef List<T> F<T>();
 ''');
-    checkElementText(
-        library,
-        r'''
-typedef F<covariant T> = List<T> Function();
-''',
-        withTypeParameterVariance: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased F @16
+        typeParameters
+          covariant T @18
+            defaultType: dynamic
+        aliasedType: List<T> Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: List<T>
+''');
   }
 
   test_functionTypeAlias_typeParameters_variance_covariant3() async {
@@ -7773,13 +16655,28 @@
 typedef T F1<T>();
 typedef F1<T> F2<T>();
 ''');
-    checkElementText(
-        library,
-        r'''
-typedef F1<covariant T> = T Function();
-typedef F2<covariant T> = T Function() Function();
-''',
-        withTypeParameterVariance: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased F1 @10
+        typeParameters
+          covariant T @13
+            defaultType: dynamic
+        aliasedType: T Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: T
+      functionTypeAliasBased F2 @33
+        typeParameters
+          covariant T @36
+            defaultType: dynamic
+        aliasedType: T Function() Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: T Function()
+            aliasElement: self::@typeAlias::F1
+            aliasArguments
+              T
+''');
   }
 
   test_functionTypeAlias_typeParameters_variance_covariant4() async {
@@ -7787,25 +16684,55 @@
 typedef void F1<T>(T a);
 typedef void F2<T>(F1<T> a);
 ''');
-    checkElementText(
-        library,
-        r'''
-typedef F1<contravariant T> = void Function(T a);
-typedef F2<covariant T> = void Function(void Function(T) a);
-''',
-        withTypeParameterVariance: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased F1 @13
+        typeParameters
+          contravariant T @16
+            defaultType: dynamic
+        aliasedType: void Function(T)
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional a @-1
+              type: T
+          returnType: void
+      functionTypeAliasBased F2 @38
+        typeParameters
+          covariant T @41
+            defaultType: dynamic
+        aliasedType: void Function(void Function(T))
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional a @-1
+              type: void Function(T)
+                aliasElement: self::@typeAlias::F1
+                aliasArguments
+                  T
+          returnType: void
+''');
   }
 
   test_functionTypeAlias_typeParameters_variance_invariant() async {
     var library = await checkLibrary(r'''
 typedef T F<T>(T a);
 ''');
-    checkElementText(
-        library,
-        r'''
-typedef F<invariant T> = T Function(T a);
-''',
-        withTypeParameterVariance: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased F @10
+        typeParameters
+          invariant T @12
+            defaultType: dynamic
+        aliasedType: T Function(T)
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional a @-1
+              type: T
+          returnType: T
+''');
   }
 
   test_functionTypeAlias_typeParameters_variance_invariant2() async {
@@ -7813,32 +16740,72 @@
 typedef T F1<T>();
 typedef F1<T> F2<T>(T a);
 ''');
-    checkElementText(
-        library,
-        r'''
-typedef F1<covariant T> = T Function();
-typedef F2<invariant T> = T Function() Function(T a);
-''',
-        withTypeParameterVariance: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased F1 @10
+        typeParameters
+          covariant T @13
+            defaultType: dynamic
+        aliasedType: T Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: T
+      functionTypeAliasBased F2 @33
+        typeParameters
+          invariant T @36
+            defaultType: dynamic
+        aliasedType: T Function() Function(T)
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional a @-1
+              type: T
+          returnType: T Function()
+            aliasElement: self::@typeAlias::F1
+            aliasArguments
+              T
+''');
   }
 
   test_functionTypeAlias_typeParameters_variance_unrelated() async {
     var library = await checkLibrary(r'''
 typedef void F<T>(int a);
 ''');
-    checkElementText(
-        library,
-        r'''
-typedef F<unrelated T> = void Function(int a);
-''',
-        withTypeParameterVariance: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased F @13
+        typeParameters
+          unrelated T @15
+            defaultType: dynamic
+        aliasedType: void Function(int)
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional a @-1
+              type: int
+          returnType: void
+''');
   }
 
   test_futureOr() async {
     var library = await checkLibrary('import "dart:async"; FutureOr<int> x;');
     checkElementText(library, r'''
-import 'dart:async';
-FutureOr<int> x;
+library
+  imports
+    dart:async
+  definingUnit
+    topLevelVariables
+      static x @35
+        type: FutureOr<int>
+    accessors
+      synthetic static get x @35
+        returnType: FutureOr<int>
+      synthetic static set x @35
+        parameters
+          requiredPositional _x @35
+            type: FutureOr<int>
+        returnType: void
 ''');
     var variables = library.definingCompilationUnit.topLevelVariables;
     expect(variables, hasLength(1));
@@ -7849,9 +16816,21 @@
     var library =
         await checkLibrary('import "dart:async"; const x = FutureOr;');
     checkElementText(library, r'''
-import 'dart:async';
-const Type x =
-        FutureOr/*location: dart:async;FutureOr*/;
+library
+  imports
+    dart:async
+  definingUnit
+    topLevelVariables
+      static const x @27
+        type: Type
+        constantInitializer
+          SimpleIdentifier
+            staticElement: dart:async::@class::FutureOr
+            staticType: Type
+            token: FutureOr @31
+    accessors
+      synthetic static get x @27
+        returnType: Type
 ''');
     var variables = library.definingCompilationUnit.topLevelVariables;
     expect(variables, hasLength(1));
@@ -7868,10 +16847,33 @@
 var y = x.then((z) => z.asDouble());
 ''');
     checkElementText(library, r'''
-import 'dart:async';
-FutureOr<int> x;
-dynamic y;
-FutureOr<int> f() {}
+library
+  imports
+    dart:async
+  definingUnit
+    topLevelVariables
+      static x @52
+        type: FutureOr<int>
+      static y @65
+        type: dynamic
+    accessors
+      synthetic static get x @52
+        returnType: FutureOr<int>
+      synthetic static set x @52
+        parameters
+          requiredPositional _x @52
+            type: FutureOr<int>
+        returnType: void
+      synthetic static get y @65
+        returnType: dynamic
+      synthetic static set y @65
+        parameters
+          requiredPositional _y @65
+            type: dynamic
+        returnType: void
+    functions
+      f @35
+        returnType: FutureOr<int>
 ''');
     var variables = library.definingCompilationUnit.topLevelVariables;
     expect(variables, hasLength(2));
@@ -7887,8 +16889,20 @@
     var library = await checkLibrary('''
 void Function() f;
 ''');
-    checkElementText(library, '''
-void Function() f;
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static f @16
+        type: void Function()
+    accessors
+      synthetic static get f @16
+        returnType: void Function()
+      synthetic static set f @16
+        parameters
+          requiredPositional _f @16
+            type: void Function()
+        returnType: void
 ''');
   }
 
@@ -7896,8 +16910,20 @@
     var library = await checkLibrary('''
 void Function()? f;
 ''');
-    checkElementText(library, '''
-void Function()? f;
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static f @17
+        type: void Function()?
+    accessors
+      synthetic static get f @17
+        returnType: void Function()?
+      synthetic static set f @17
+        parameters
+          requiredPositional _f @17
+            type: void Function()?
+        returnType: void
 ''');
   }
 
@@ -7906,8 +16932,20 @@
     var library = await checkLibrary('''
 void Function() f;
 ''');
-    checkElementText(library, '''
-void Function()* f;
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static f @16
+        type: void Function()*
+    accessors
+      synthetic static get f @16
+        returnType: void Function()*
+      synthetic static set f @16
+        parameters
+          requiredPositional _f @16
+            type: void Function()*
+        returnType: void
 ''');
   }
 
@@ -7921,9 +16959,28 @@
 }
 ''');
     checkElementText(library, r'''
-class C<T, U> {
-  static void m<V, W>(V v, W w) {}
-}
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+          covariant U @11
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+        methods
+          static m @30
+            typeParameters
+              covariant V @32
+              covariant W @35
+            parameters
+              requiredPositional v @40
+                type: V
+              requiredPositional w @45
+                type: W
+            returnType: void
 ''');
   }
 
@@ -7932,7 +16989,11 @@
 int Function(int a, String b) f() => null;
 ''');
     checkElementText(library, r'''
-int Function(int, String) f() {}
+library
+  definingUnit
+    functions
+      f @30
+        returnType: int Function(int, String)
 ''');
   }
 
@@ -7941,7 +17002,17 @@
 void f(int Function(int a, String b) p(num c)) => null;
 ''');
     checkElementText(library, r'''
-void f(int Function(int, String) Function(num) p/*(num c)*/) {}
+library
+  definingUnit
+    functions
+      f @5
+        parameters
+          requiredPositional p @37
+            type: int Function(int, String) Function(num)
+            parameters
+              requiredPositional c @43
+                type: num
+        returnType: void
 ''');
   }
 
@@ -7950,7 +17021,16 @@
 typedef F = void Function(String a) Function(int b);
 ''');
     checkElementText(library, r'''
-typedef F = void Function(String) Function(int b);
+library
+  definingUnit
+    typeAliases
+      F @8
+        aliasedType: void Function(String) Function(int)
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional b @-1
+              type: int
+          returnType: void Function(String)
 ''');
   }
 
@@ -7961,9 +17041,15 @@
 }
 ''');
     checkElementText(library, r'''
-class C {
-  int Function(int, String) m() {}
-}
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          synthetic @-1
+        methods
+          m @42
+            returnType: int Function(int, String)
 ''');
   }
 
@@ -7972,7 +17058,14 @@
 void f(int Function(int a, String b) p) => null;
 ''');
     checkElementText(library, r'''
-void f(int Function(int, String) p) {}
+library
+  definingUnit
+    functions
+      f @5
+        parameters
+          requiredPositional p @37
+            type: int Function(int, String)
+        returnType: void
 ''');
   }
 
@@ -7981,7 +17074,19 @@
 int Function(int a, String b) v;
 ''');
     checkElementText(library, r'''
-int Function(int, String) v;
+library
+  definingUnit
+    topLevelVariables
+      static v @30
+        type: int Function(int, String)
+    accessors
+      synthetic static get v @30
+        returnType: int Function(int, String)
+      synthetic static set v @30
+        parameters
+          requiredPositional _v @30
+            type: int Function(int, String)
+        returnType: void
 ''');
   }
 
@@ -7994,63 +17099,68 @@
 @A<int Function(String a)>()
 class B {}
 ''');
-    checkElementText(
-        library,
-        r'''
-class A {
-  const A();
-}
-  typeParameters
-    T
-      bound: null
-      defaultType: dynamic
-class B {
-}
-  metadata
-    Annotation
-      arguments: ArgumentList
-      element: ConstructorMember
-        base: self::@class::A::@constructor::•
-        substitution: {T: dynamic}
-      name: SimpleIdentifier
-        staticElement: self::@class::A
-        staticType: null
-        token: A
-      typeArguments: TypeArgumentList
-        arguments
-          GenericFunctionType
-            declaredElement: GenericFunctionTypeElement
-              parameters
-                a
-                  kind: required positional
-                  type: String
-              returnType: int
-              type: int Function(String)
-            functionKeyword: Function
-            parameters: FormalParameterList
-              parameters
-                SimpleFormalParameter
-                  declaredElement: a@-1
-                  declaredElementType: String
-                  identifier: SimpleIdentifier
-                    staticElement: <null>
-                    staticType: null
-                    token: a
-                  type: TypeName
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        constructors
+          const @21
+      class B @64
+        metadata
+          Annotation
+            arguments: ArgumentList
+              leftParenthesis: ( @55
+              rightParenthesis: ) @56
+            atSign.offset: 29
+            element: ConstructorMember
+              base: self::@class::A::@constructor::•
+              substitution: {T: dynamic}
+            name: SimpleIdentifier
+              staticElement: self::@class::A
+              staticType: null
+              token: A @30
+            typeArguments: TypeArgumentList
+              arguments
+                GenericFunctionType
+                  declaredElement: GenericFunctionTypeElement
+                    parameters
+                      a
+                        kind: required positional
+                        type: String
+                    returnType: int
+                    type: int Function(String)
+                  functionKeyword: Function @0
+                  parameters: FormalParameterList
+                    parameters
+                      SimpleFormalParameter
+                        declaredElement: a@-1
+                        declaredElementType: String
+                        identifier: SimpleIdentifier
+                          staticElement: <null>
+                          staticType: null
+                          token: a @52
+                        type: TypeName
+                          name: SimpleIdentifier
+                            staticElement: dart:core::@class::String
+                            staticType: null
+                            token: String @45
+                          type: String
+                  returnType: TypeName
                     name: SimpleIdentifier
-                      staticElement: dart:core::@class::String
+                      staticElement: dart:core::@class::int
                       staticType: null
-                      token: String
-                    type: String
-            returnType: TypeName
-              name: SimpleIdentifier
-                staticElement: dart:core::@class::int
-                staticType: null
-                token: int
-              type: int
-            type: int Function(String)
-''',
-        withResolvedAst: true);
+                      token: int @32
+                    type: int
+                  type: int Function(String)
+              leftBracket: < @0
+              rightBracket: > @0
+        constructors
+          synthetic @-1
+''');
   }
 
   test_genericFunction_asTypeArgument_ofAnnotation_topLevelVariable() async {
@@ -8062,62 +17172,76 @@
 @A<int Function(String a)>()
 var v = 0;
 ''');
-    checkElementText(
-        library,
-        r'''
-class A {
-  const A();
-}
-  typeParameters
-    T
-      bound: null
-      defaultType: dynamic
-int v;
-  metadata
-    Annotation
-      arguments: ArgumentList
-      element: ConstructorMember
-        base: self::@class::A::@constructor::•
-        substitution: {T: dynamic}
-      name: SimpleIdentifier
-        staticElement: self::@class::A
-        staticType: null
-        token: A
-      typeArguments: TypeArgumentList
-        arguments
-          GenericFunctionType
-            declaredElement: GenericFunctionTypeElement
-              parameters
-                a
-                  kind: required positional
-                  type: String
-              returnType: int
-              type: int Function(String)
-            functionKeyword: Function
-            parameters: FormalParameterList
-              parameters
-                SimpleFormalParameter
-                  declaredElement: a@-1
-                  declaredElementType: String
-                  identifier: SimpleIdentifier
-                    staticElement: <null>
-                    staticType: null
-                    token: a
-                  type: TypeName
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        constructors
+          const @21
+    topLevelVariables
+      static v @62
+        metadata
+          Annotation
+            arguments: ArgumentList
+              leftParenthesis: ( @55
+              rightParenthesis: ) @56
+            atSign.offset: 29
+            element: ConstructorMember
+              base: self::@class::A::@constructor::•
+              substitution: {T: dynamic}
+            name: SimpleIdentifier
+              staticElement: self::@class::A
+              staticType: null
+              token: A @30
+            typeArguments: TypeArgumentList
+              arguments
+                GenericFunctionType
+                  declaredElement: GenericFunctionTypeElement
+                    parameters
+                      a
+                        kind: required positional
+                        type: String
+                    returnType: int
+                    type: int Function(String)
+                  functionKeyword: Function @0
+                  parameters: FormalParameterList
+                    parameters
+                      SimpleFormalParameter
+                        declaredElement: a@-1
+                        declaredElementType: String
+                        identifier: SimpleIdentifier
+                          staticElement: <null>
+                          staticType: null
+                          token: a @52
+                        type: TypeName
+                          name: SimpleIdentifier
+                            staticElement: dart:core::@class::String
+                            staticType: null
+                            token: String @45
+                          type: String
+                  returnType: TypeName
                     name: SimpleIdentifier
-                      staticElement: dart:core::@class::String
+                      staticElement: dart:core::@class::int
                       staticType: null
-                      token: String
-                    type: String
-            returnType: TypeName
-              name: SimpleIdentifier
-                staticElement: dart:core::@class::int
-                staticType: null
-                token: int
-              type: int
-            type: int Function(String)
-''',
-        withResolvedAst: true);
+                      token: int @32
+                    type: int
+                  type: int Function(String)
+              leftBracket: < @0
+              rightBracket: > @0
+        type: int
+    accessors
+      synthetic static get v @62
+        returnType: int
+      synthetic static set v @62
+        parameters
+          requiredPositional _v @62
+            type: int
+        returnType: void
+''');
   }
 
   test_genericFunction_asTypeArgument_parameters_optionalNamed() async {
@@ -8128,73 +17252,81 @@
 
 const v = A<String Function({int? a})>();
 ''');
-    checkElementText(
-        library,
-        r'''
-class A {
-  const A();
-}
-  typeParameters
-    T
-      bound: null
-      defaultType: dynamic
-const A<String Function({int? a})> v;
-  constantInitializer
-    InstanceCreationExpression
-      argumentList: ArgumentList
-      constructorName: ConstructorName
-        staticElement: ConstructorMember
-          base: self::@class::A::@constructor::•
-          substitution: {T: String Function({int? a})}
-        type: TypeName
-          name: SimpleIdentifier
-            staticElement: self::@class::A
-            staticType: null
-            token: A
-          type: A<String Function({int? a})>
-          typeArguments: TypeArgumentList
-            arguments
-              GenericFunctionType
-                declaredElement: GenericFunctionTypeElement
-                  parameters
-                    a
-                      kind: optional named
-                      type: int?
-                  returnType: String
-                  type: String Function({int? a})
-                functionKeyword: Function
-                parameters: FormalParameterList
-                  parameters
-                    DefaultFormalParameter
-                      declaredElement: a@-1
-                      declaredElementType: int?
-                      identifier: SimpleIdentifier
-                        staticElement: <null>
-                        staticType: null
-                        token: a
-                      parameter: SimpleFormalParameter
-                        declaredElement: a@-1
-                        declaredElementType: int?
-                        identifier: SimpleIdentifier
-                          staticElement: <null>
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        constructors
+          const @21
+    topLevelVariables
+      static const v @35
+        type: A<String Function({int? a})>
+        constantInitializer
+          InstanceCreationExpression
+            argumentList: ArgumentList
+              leftParenthesis: ( @67
+              rightParenthesis: ) @68
+            constructorName: ConstructorName
+              staticElement: ConstructorMember
+                base: self::@class::A::@constructor::•
+                substitution: {T: String Function({int? a})}
+              type: TypeName
+                name: SimpleIdentifier
+                  staticElement: self::@class::A
+                  staticType: null
+                  token: A @39
+                type: A<String Function({int? a})>
+                typeArguments: TypeArgumentList
+                  arguments
+                    GenericFunctionType
+                      declaredElement: GenericFunctionTypeElement
+                        parameters
+                          a
+                            kind: optional named
+                            type: int?
+                        returnType: String
+                        type: String Function({int? a})
+                      functionKeyword: Function @0
+                      parameters: FormalParameterList
+                        parameters
+                          DefaultFormalParameter
+                            declaredElement: a@-1
+                            declaredElementType: int?
+                            identifier: SimpleIdentifier
+                              staticElement: <null>
+                              staticType: null
+                              token: a @63
+                            parameter: SimpleFormalParameter
+                              declaredElement: a@-1
+                              declaredElementType: int?
+                              identifier: SimpleIdentifier
+                                staticElement: <null>
+                                staticType: null
+                                token: a @63
+                              type: TypeName
+                                name: SimpleIdentifier
+                                  staticElement: dart:core::@class::int
+                                  staticType: null
+                                  token: int @58
+                                type: int?
+                      returnType: TypeName
+                        name: SimpleIdentifier
+                          staticElement: dart:core::@class::String
                           staticType: null
-                          token: a
-                        type: TypeName
-                          name: SimpleIdentifier
-                            staticElement: dart:core::@class::int
-                            staticType: null
-                            token: int
-                          type: int?
-                returnType: TypeName
-                  name: SimpleIdentifier
-                    staticElement: dart:core::@class::String
-                    staticType: null
-                    token: String
-                  type: String
-                type: String Function({int? a})
-      staticType: A<String Function({int? a})>
-''',
-        withResolvedAst: true);
+                          token: String @41
+                        type: String
+                      type: String Function({int? a})
+                  leftBracket: < @0
+                  rightBracket: > @0
+            staticType: A<String Function({int? a})>
+    accessors
+      synthetic static get v @35
+        returnType: A<String Function({int? a})>
+''');
   }
 
   test_genericFunction_asTypeArgument_parameters_optionalPositional() async {
@@ -8205,73 +17337,81 @@
 
 const v = A<String Function([int? a])>();
 ''');
-    checkElementText(
-        library,
-        r'''
-class A {
-  const A();
-}
-  typeParameters
-    T
-      bound: null
-      defaultType: dynamic
-const A<String Function([int?])> v;
-  constantInitializer
-    InstanceCreationExpression
-      argumentList: ArgumentList
-      constructorName: ConstructorName
-        staticElement: ConstructorMember
-          base: self::@class::A::@constructor::•
-          substitution: {T: String Function([int?])}
-        type: TypeName
-          name: SimpleIdentifier
-            staticElement: self::@class::A
-            staticType: null
-            token: A
-          type: A<String Function([int?])>
-          typeArguments: TypeArgumentList
-            arguments
-              GenericFunctionType
-                declaredElement: GenericFunctionTypeElement
-                  parameters
-                    a
-                      kind: optional positional
-                      type: int?
-                  returnType: String
-                  type: String Function([int?])
-                functionKeyword: Function
-                parameters: FormalParameterList
-                  parameters
-                    DefaultFormalParameter
-                      declaredElement: a@-1
-                      declaredElementType: int?
-                      identifier: SimpleIdentifier
-                        staticElement: <null>
-                        staticType: null
-                        token: a
-                      parameter: SimpleFormalParameter
-                        declaredElement: a@-1
-                        declaredElementType: int?
-                        identifier: SimpleIdentifier
-                          staticElement: <null>
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        constructors
+          const @21
+    topLevelVariables
+      static const v @35
+        type: A<String Function([int?])>
+        constantInitializer
+          InstanceCreationExpression
+            argumentList: ArgumentList
+              leftParenthesis: ( @67
+              rightParenthesis: ) @68
+            constructorName: ConstructorName
+              staticElement: ConstructorMember
+                base: self::@class::A::@constructor::•
+                substitution: {T: String Function([int?])}
+              type: TypeName
+                name: SimpleIdentifier
+                  staticElement: self::@class::A
+                  staticType: null
+                  token: A @39
+                type: A<String Function([int?])>
+                typeArguments: TypeArgumentList
+                  arguments
+                    GenericFunctionType
+                      declaredElement: GenericFunctionTypeElement
+                        parameters
+                          a
+                            kind: optional positional
+                            type: int?
+                        returnType: String
+                        type: String Function([int?])
+                      functionKeyword: Function @0
+                      parameters: FormalParameterList
+                        parameters
+                          DefaultFormalParameter
+                            declaredElement: a@-1
+                            declaredElementType: int?
+                            identifier: SimpleIdentifier
+                              staticElement: <null>
+                              staticType: null
+                              token: a @63
+                            parameter: SimpleFormalParameter
+                              declaredElement: a@-1
+                              declaredElementType: int?
+                              identifier: SimpleIdentifier
+                                staticElement: <null>
+                                staticType: null
+                                token: a @63
+                              type: TypeName
+                                name: SimpleIdentifier
+                                  staticElement: dart:core::@class::int
+                                  staticType: null
+                                  token: int @58
+                                type: int?
+                      returnType: TypeName
+                        name: SimpleIdentifier
+                          staticElement: dart:core::@class::String
                           staticType: null
-                          token: a
-                        type: TypeName
-                          name: SimpleIdentifier
-                            staticElement: dart:core::@class::int
-                            staticType: null
-                            token: int
-                          type: int?
-                returnType: TypeName
-                  name: SimpleIdentifier
-                    staticElement: dart:core::@class::String
-                    staticType: null
-                    token: String
-                  type: String
-                type: String Function([int?])
-      staticType: A<String Function([int?])>
-''',
-        withResolvedAst: true);
+                          token: String @41
+                        type: String
+                      type: String Function([int?])
+                  leftBracket: < @0
+                  rightBracket: > @0
+            staticType: A<String Function([int?])>
+    accessors
+      synthetic static get v @35
+        returnType: A<String Function([int?])>
+''');
   }
 
   test_genericFunction_asTypeArgument_parameters_requiredNamed() async {
@@ -8282,74 +17422,82 @@
 
 const v = A<String Function({required int a})>();
 ''');
-    checkElementText(
-        library,
-        r'''
-class A {
-  const A();
-}
-  typeParameters
-    T
-      bound: null
-      defaultType: dynamic
-const A<String Function({required int a})> v;
-  constantInitializer
-    InstanceCreationExpression
-      argumentList: ArgumentList
-      constructorName: ConstructorName
-        staticElement: ConstructorMember
-          base: self::@class::A::@constructor::•
-          substitution: {T: String Function({required int a})}
-        type: TypeName
-          name: SimpleIdentifier
-            staticElement: self::@class::A
-            staticType: null
-            token: A
-          type: A<String Function({required int a})>
-          typeArguments: TypeArgumentList
-            arguments
-              GenericFunctionType
-                declaredElement: GenericFunctionTypeElement
-                  parameters
-                    a
-                      kind: required named
-                      type: int
-                  returnType: String
-                  type: String Function({required int a})
-                functionKeyword: Function
-                parameters: FormalParameterList
-                  parameters
-                    DefaultFormalParameter
-                      declaredElement: a@-1
-                      declaredElementType: int
-                      identifier: SimpleIdentifier
-                        staticElement: <null>
-                        staticType: null
-                        token: a
-                      parameter: SimpleFormalParameter
-                        declaredElement: a@-1
-                        declaredElementType: int
-                        identifier: SimpleIdentifier
-                          staticElement: <null>
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        constructors
+          const @21
+    topLevelVariables
+      static const v @35
+        type: A<String Function({required int a})>
+        constantInitializer
+          InstanceCreationExpression
+            argumentList: ArgumentList
+              leftParenthesis: ( @75
+              rightParenthesis: ) @76
+            constructorName: ConstructorName
+              staticElement: ConstructorMember
+                base: self::@class::A::@constructor::•
+                substitution: {T: String Function({required int a})}
+              type: TypeName
+                name: SimpleIdentifier
+                  staticElement: self::@class::A
+                  staticType: null
+                  token: A @39
+                type: A<String Function({required int a})>
+                typeArguments: TypeArgumentList
+                  arguments
+                    GenericFunctionType
+                      declaredElement: GenericFunctionTypeElement
+                        parameters
+                          a
+                            kind: required named
+                            type: int
+                        returnType: String
+                        type: String Function({required int a})
+                      functionKeyword: Function @0
+                      parameters: FormalParameterList
+                        parameters
+                          DefaultFormalParameter
+                            declaredElement: a@-1
+                            declaredElementType: int
+                            identifier: SimpleIdentifier
+                              staticElement: <null>
+                              staticType: null
+                              token: a @71
+                            parameter: SimpleFormalParameter
+                              declaredElement: a@-1
+                              declaredElementType: int
+                              identifier: SimpleIdentifier
+                                staticElement: <null>
+                                staticType: null
+                                token: a @71
+                              requiredKeyword: required @0
+                              type: TypeName
+                                name: SimpleIdentifier
+                                  staticElement: dart:core::@class::int
+                                  staticType: null
+                                  token: int @67
+                                type: int
+                      returnType: TypeName
+                        name: SimpleIdentifier
+                          staticElement: dart:core::@class::String
                           staticType: null
-                          token: a
-                        requiredKeyword: required
-                        type: TypeName
-                          name: SimpleIdentifier
-                            staticElement: dart:core::@class::int
-                            staticType: null
-                            token: int
-                          type: int
-                returnType: TypeName
-                  name: SimpleIdentifier
-                    staticElement: dart:core::@class::String
-                    staticType: null
-                    token: String
-                  type: String
-                type: String Function({required int a})
-      staticType: A<String Function({required int a})>
-''',
-        withResolvedAst: true);
+                          token: String @41
+                        type: String
+                      type: String Function({required int a})
+                  leftBracket: < @0
+                  rightBracket: > @0
+            staticType: A<String Function({required int a})>
+    accessors
+      synthetic static get v @35
+        returnType: A<String Function({required int a})>
+''');
   }
 
   test_genericFunction_asTypeArgument_parameters_requiredPositional() async {
@@ -8360,66 +17508,74 @@
 
 const v = A<String Function(int a)>();
 ''');
-    checkElementText(
-        library,
-        r'''
-class A {
-  const A();
-}
-  typeParameters
-    T
-      bound: null
-      defaultType: dynamic
-const A<String Function(int)> v;
-  constantInitializer
-    InstanceCreationExpression
-      argumentList: ArgumentList
-      constructorName: ConstructorName
-        staticElement: ConstructorMember
-          base: self::@class::A::@constructor::•
-          substitution: {T: String Function(int)}
-        type: TypeName
-          name: SimpleIdentifier
-            staticElement: self::@class::A
-            staticType: null
-            token: A
-          type: A<String Function(int)>
-          typeArguments: TypeArgumentList
-            arguments
-              GenericFunctionType
-                declaredElement: GenericFunctionTypeElement
-                  parameters
-                    a
-                      kind: required positional
-                      type: int
-                  returnType: String
-                  type: String Function(int)
-                functionKeyword: Function
-                parameters: FormalParameterList
-                  parameters
-                    SimpleFormalParameter
-                      declaredElement: a@-1
-                      declaredElementType: int
-                      identifier: SimpleIdentifier
-                        staticElement: <null>
-                        staticType: null
-                        token: a
-                      type: TypeName
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        constructors
+          const @21
+    topLevelVariables
+      static const v @35
+        type: A<String Function(int)>
+        constantInitializer
+          InstanceCreationExpression
+            argumentList: ArgumentList
+              leftParenthesis: ( @64
+              rightParenthesis: ) @65
+            constructorName: ConstructorName
+              staticElement: ConstructorMember
+                base: self::@class::A::@constructor::•
+                substitution: {T: String Function(int)}
+              type: TypeName
+                name: SimpleIdentifier
+                  staticElement: self::@class::A
+                  staticType: null
+                  token: A @39
+                type: A<String Function(int)>
+                typeArguments: TypeArgumentList
+                  arguments
+                    GenericFunctionType
+                      declaredElement: GenericFunctionTypeElement
+                        parameters
+                          a
+                            kind: required positional
+                            type: int
+                        returnType: String
+                        type: String Function(int)
+                      functionKeyword: Function @0
+                      parameters: FormalParameterList
+                        parameters
+                          SimpleFormalParameter
+                            declaredElement: a@-1
+                            declaredElementType: int
+                            identifier: SimpleIdentifier
+                              staticElement: <null>
+                              staticType: null
+                              token: a @61
+                            type: TypeName
+                              name: SimpleIdentifier
+                                staticElement: dart:core::@class::int
+                                staticType: null
+                                token: int @57
+                              type: int
+                      returnType: TypeName
                         name: SimpleIdentifier
-                          staticElement: dart:core::@class::int
+                          staticElement: dart:core::@class::String
                           staticType: null
-                          token: int
-                        type: int
-                returnType: TypeName
-                  name: SimpleIdentifier
-                    staticElement: dart:core::@class::String
-                    staticType: null
-                    token: String
-                  type: String
-                type: String Function(int)
-      staticType: A<String Function(int)>
-''',
-        withResolvedAst: true);
+                          token: String @41
+                        type: String
+                      type: String Function(int)
+                  leftBracket: < @0
+                  rightBracket: > @0
+            staticType: A<String Function(int)>
+    accessors
+      synthetic static get v @35
+        returnType: A<String Function(int)>
+''');
   }
 
   test_genericFunction_boundOf_typeParameter_ofMixin() async {
@@ -8427,8 +17583,18 @@
 mixin B<X extends void Function()> {}
 ''');
     checkElementText(library, r'''
-mixin B<X extends void Function() = void Function()> on Object {
-}
+library
+  definingUnit
+    mixins
+      mixin B @6
+        typeParameters
+          covariant X @8
+            bound: void Function()
+            defaultType: void Function()
+        superclassConstraints
+          Object
+        constructors
+          synthetic @-1
 ''');
   }
 
@@ -8439,13 +17605,33 @@
 class B = A<void Function()> with M;
 ''');
     checkElementText(library, r'''
-class A<T> {
-}
-class alias B extends A<void Function()> with M {
-  synthetic B() : super();
-}
-mixin M on Object {
-}
+library
+  definingUnit
+    classes
+      class A @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+      class alias B @31
+        supertype: A<void Function()>
+        mixins
+          M
+        constructors
+          synthetic @-1
+            constantInitializers
+              SuperConstructorInvocation
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticElement: self::@class::A::@constructor::•
+    mixins
+      mixin M @20
+        superclassConstraints
+          Object
+        constructors
+          synthetic @-1
 ''');
   }
 
@@ -8455,8 +17641,28 @@
 typedef F2<V2> = V2 Function();
 ''');
     checkElementText(library, r'''
-typedef F1 = dynamic Function<V1>(V1 Function() );
-typedef F2<V2> = V2 Function();
+library
+  definingUnit
+    typeAliases
+      F1 @8
+        aliasedType: dynamic Function<V1>(V1 Function())
+        aliasedElement: GenericFunctionTypeElement
+          typeParameters
+            covariant V1 @-1
+          parameters
+            requiredPositional @-1
+              type: V1 Function()
+                aliasElement: self::@typeAlias::F2
+                aliasArguments
+                  V1
+          returnType: dynamic
+      F2 @43
+        typeParameters
+          covariant V2 @46
+            defaultType: dynamic
+        aliasedType: V2 Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: V2
 ''');
   }
 
@@ -8490,7 +17696,20 @@
 typedef F<X extends F> = Function(F);
 ''');
     checkElementText(library, r'''
-notSimplyBounded typedef F<X extends dynamic Function()> = dynamic Function(dynamic Function() );
+library
+  definingUnit
+    typeAliases
+      notSimplyBounded F @8
+        typeParameters
+          unrelated X @10
+            bound: dynamic Function()
+            defaultType: dynamic
+        aliasedType: dynamic Function(dynamic Function())
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional @-1
+              type: dynamic Function()
+          returnType: dynamic
 ''');
   }
 
@@ -8499,7 +17718,14 @@
 Future<int> get foo async => 0;
 ''');
     checkElementText(library, r'''
-Future<int> get foo async {}
+library
+  definingUnit
+    topLevelVariables
+      synthetic static foo @-1
+        type: Future<int>
+    accessors
+      get foo @16 async
+        returnType: Future<int>
 ''');
   }
 
@@ -8509,8 +17735,16 @@
 Stream<int> get foo async* {}
 ''');
     checkElementText(library, r'''
-import 'dart:async';
-Stream<int> get foo async* {}
+library
+  imports
+    dart:async
+  definingUnit
+    topLevelVariables
+      synthetic static foo @-1
+        type: Stream<int>
+    accessors
+      get foo @37 async*
+        returnType: Stream<int>
 ''');
   }
 
@@ -8522,17 +17756,29 @@
  */
 get x => null;''');
     checkElementText(library, r'''
-/**
- * Docs
- */
-dynamic get x {}
+library
+  definingUnit
+    topLevelVariables
+      synthetic static x @-1
+        type: dynamic
+    accessors
+      get x @64
+        documentationComment: /**\n * Docs\n */
+        returnType: dynamic
 ''');
   }
 
   test_getter_external() async {
     var library = await checkLibrary('external int get x;');
     checkElementText(library, r'''
-external int get x;
+library
+  definingUnit
+    topLevelVariables
+      synthetic static x @-1
+        type: int
+    accessors
+      external get x @17
+        returnType: int
 ''');
   }
 
@@ -8540,12 +17786,28 @@
     var library = await checkLibrary(
         'class C extends D { get f => null; } abstract class D { int get f; }');
     checkElementText(library, r'''
-class C extends D {
-  int get f {}
-}
-abstract class D {
-  int get f;
-}
+library
+  definingUnit
+    classes
+      class C @6
+        supertype: D
+        fields
+          synthetic f @-1
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          get f @24
+            returnType: int
+      abstract class D @52
+        fields
+          synthetic f @-1
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          abstract get f @64
+            returnType: int
 ''');
   }
 
@@ -8554,15 +17816,32 @@
 Iterator<int> get foo sync* {}
 ''');
     checkElementText(library, r'''
-Iterator<int> get foo sync* {}
+library
+  definingUnit
+    topLevelVariables
+      synthetic static foo @-1
+        type: Iterator<int>
+    accessors
+      get foo @18 sync*
+        returnType: Iterator<int>
 ''');
   }
 
   test_getters() async {
     var library = await checkLibrary('int get x => null; get y => null;');
     checkElementText(library, r'''
-int get x {}
-dynamic get y {}
+library
+  definingUnit
+    topLevelVariables
+      synthetic static x @-1
+        type: int
+      synthetic static y @-1
+        type: dynamic
+    accessors
+      get x @8
+        returnType: int
+      get y @23
+        returnType: dynamic
 ''');
   }
 
@@ -8575,13 +17854,51 @@
 const x = C.named(42);
 ''');
     checkElementText(library, r'''
-class C {
-  final Object x;
-  const C.named(final Object this.x);
-}
-const C x =
-        C/*location: test.dart;C*/.
-        named/*location: test.dart;C;named*/(42);
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          final x @25
+            type: Object
+        constructors
+          const named @38
+            periodOffset: 37
+            nameEnd: 43
+            parameters
+              requiredPositional final this.x @49
+                type: Object
+        accessors
+          synthetic get x @25
+            returnType: Object
+    topLevelVariables
+      static const x @61
+        type: C
+        constantInitializer
+          InstanceCreationExpression
+            argumentList: ArgumentList
+              arguments
+                IntegerLiteral
+                  literal: 42 @73
+                  staticType: int
+              leftParenthesis: ( @72
+              rightParenthesis: ) @75
+            constructorName: ConstructorName
+              name: SimpleIdentifier
+                staticElement: self::@class::C::@constructor::named
+                staticType: null
+                token: named @67
+              staticElement: self::@class::C::@constructor::named
+              type: TypeName
+                name: SimpleIdentifier
+                  staticElement: self::@class::C
+                  staticType: null
+                  token: C @65
+                type: C
+            staticType: C
+    accessors
+      synthetic static get x @61
+        returnType: C
 ''');
   }
 
@@ -8589,8 +17906,19 @@
     var library =
         await checkLibrary('int get x => 0; void set x(int value) {}');
     checkElementText(library, r'''
-int get x {}
-void set x(int value) {}
+library
+  definingUnit
+    topLevelVariables
+      synthetic static x @-1
+        type: int
+    accessors
+      get x @8
+        returnType: int
+      set x @25
+        parameters
+          requiredPositional value @31
+            type: int
+        returnType: void
 ''');
   }
 
@@ -8598,8 +17926,19 @@
     var library =
         await checkLibrary('void set x(int value) {} int get x => 0;');
     checkElementText(library, r'''
-void set x(int value) {}
-int get x {}
+library
+  definingUnit
+    topLevelVariables
+      synthetic static x @-1
+        type: int
+    accessors
+      set x @9
+        parameters
+          requiredPositional value @15
+            type: int
+        returnType: void
+      get x @33
+        returnType: int
 ''');
   }
 
@@ -8618,9 +17957,15 @@
 class B extends A {}
 ''');
     checkElementText(library, r'''
-import 'foo.dart';
-class B extends A {
-}
+library
+  imports
+    foo.dart
+  definingUnit
+    classes
+      class B @104
+        supertype: A
+        constructors
+          synthetic @-1
 ''');
     var typeA = library.definingCompilationUnit.getType('B')!.supertype!;
     expect(typeA.element.source.shortName, 'foo.dart');
@@ -8642,9 +17987,15 @@
 class B extends A {}
 ''');
     checkElementText(library, r'''
-import 'foo_io.dart';
-class B extends A {
-}
+library
+  imports
+    foo_io.dart
+  definingUnit
+    classes
+      class B @104
+        supertype: A
+        constructors
+          synthetic @-1
 ''');
     var typeA = library.definingCompilationUnit.getType('B')!.supertype!;
     expect(typeA.element.source.shortName, 'foo_io.dart');
@@ -8666,9 +18017,15 @@
 class B extends A {}
 ''');
     checkElementText(library, r'''
-import 'foo_io.dart';
-class B extends A {
-}
+library
+  imports
+    foo_io.dart
+  definingUnit
+    classes
+      class B @124
+        supertype: A
+        constructors
+          synthetic @-1
 ''');
     var typeA = library.definingCompilationUnit.getType('B')!.supertype!;
     expect(typeA.element.source.shortName, 'foo_io.dart');
@@ -8690,9 +18047,15 @@
 class B extends A {}
 ''');
     checkElementText(library, r'''
-import 'foo_html.dart';
-class B extends A {
-}
+library
+  imports
+    foo_html.dart
+  definingUnit
+    classes
+      class B @104
+        supertype: A
+        constructors
+          synthetic @-1
 ''');
     var typeA = library.definingCompilationUnit.getType('B')!.supertype!;
     expect(typeA.element.source.shortName, 'foo_html.dart');
@@ -8714,9 +18077,15 @@
 class B extends A {}
 ''');
     checkElementText(library, r'''
-import 'foo_html.dart';
-class B extends A {
-}
+library
+  imports
+    foo_html.dart
+  definingUnit
+    classes
+      class B @124
+        supertype: A
+        constructors
+          synthetic @-1
 ''');
     var typeA = library.definingCompilationUnit.getType('B')!.supertype!;
     expect(typeA.element.source.shortName, 'foo_html.dart');
@@ -8727,31 +18096,38 @@
 import 'dart:core';
 import 'dart:math';
 ''');
-    expect(library.imports, hasLength(2));
-    expect(library.imports[0].uri, 'dart:core');
-    expect(library.imports[1].uri, 'dart:math');
+    checkElementText(library, r'''
+library
+  imports
+    dart:core
+    dart:math
+  definingUnit
+''');
   }
 
   test_import_dartCore_implicit() async {
     var library = await checkLibrary('''
 import 'dart:math';
 ''');
-    expect(library.imports, hasLength(2));
-    expect(library.imports[0].uri, 'dart:math');
-    expect(library.imports[1].uri, 'dart:core');
+    checkElementText(library, r'''
+library
+  imports
+    dart:math
+  definingUnit
+''');
   }
 
   test_import_deferred() async {
-    addLibrarySource('/a.dart', 'f() {}');
+    testFile = convertPath('/home/test/lib/test.dart');
+    addLibrarySource('/home/test/lib/a.dart', 'f() {}');
     var library = await checkLibrary('''
 import 'a.dart' deferred as p;
-main() {
-  p.f();
-  }
 ''');
     checkElementText(library, r'''
-import 'a.dart' deferred as p;
-dynamic main() {}
+library
+  imports
+    package:test/a.dart deferred as p @28
+  definingUnit
 ''');
   }
 
@@ -8766,12 +18142,16 @@
 export 'dart:math';
 ''');
     checkElementText(library, r'''
-import 'dart:async' as i1;
-import 'dart:async' as i2;
-import 'dart:async' as i3;
-export 'dart:math';
-export 'dart:math';
-export 'dart:math';
+library
+  imports
+    dart:async as i1 @23
+    dart:async as i2 @70
+    dart:async as i3 @117
+  exports
+    dart:math
+    dart:math
+    dart:math
+  definingUnit
 ''');
   }
 
@@ -8781,8 +18161,23 @@
 import 'dart:async' hide Stream, Completer; Future f;
 ''');
     checkElementText(library, r'''
-import 'dart:async' hide Stream, Completer;
-Future<dynamic> f;
+library
+  imports
+    dart:async
+      combinators
+        hide: Stream, Completer
+  definingUnit
+    topLevelVariables
+      static f @51
+        type: Future<dynamic>
+    accessors
+      synthetic static get f @51
+        returnType: Future<dynamic>
+      synthetic static set f @51
+        parameters
+          requiredPositional _f @51
+            type: Future<dynamic>
+        returnType: void
 ''');
   }
 
@@ -8792,9 +18187,26 @@
 import 'ht:';
 ''');
     checkElementText(library, r'''
-@
-        foo/*location: null*/
-import '<unresolved>';
+library
+  metadata
+    Annotation
+      atSign.offset: 0
+      element: <null>
+      name: SimpleIdentifier
+        staticElement: <null>
+        staticType: null
+        token: foo @-1
+  imports
+    <unresolved>
+      metadata
+        Annotation
+          atSign.offset: 0
+          element: <null>
+          name: SimpleIdentifier
+            staticElement: <null>
+            staticType: null
+            token: foo @-1
+  definingUnit
 ''');
   }
 
@@ -8805,8 +18217,24 @@
 Future f;
 ''');
     checkElementText(library, r'''
-import 'dart:async' hide Stream show Future;
-Future<dynamic> f;
+library
+  imports
+    dart:async
+      combinators
+        hide: Stream
+        show: Future
+  definingUnit
+    topLevelVariables
+      static f @52
+        type: Future<dynamic>
+    accessors
+      synthetic static get f @52
+        returnType: Future<dynamic>
+      synthetic static set f @52
+        parameters
+          requiredPositional _f @52
+            type: Future<dynamic>
+        returnType: void
 ''');
   }
 
@@ -8818,8 +18246,21 @@
     expect(library.imports[0].prefix!.nameLength, 1);
 
     checkElementText(library, r'''
-import 'a.dart' as a;
-C c;
+library
+  imports
+    a.dart as a @19
+  definingUnit
+    topLevelVariables
+      static c @26
+        type: C
+    accessors
+      synthetic static get c @26
+        returnType: C
+      synthetic static set c @26
+        parameters
+          requiredPositional _c @26
+            type: C
+        returnType: void
 ''');
   }
 
@@ -8833,11 +18274,18 @@
     expect(library.imports[0].importedLibrary!.location, library.location);
     expect(library.imports[1].importedLibrary!.isDartCore, true);
     checkElementText(library, r'''
-import 'test.dart' as p;
-class C {
-}
-class D extends C {
-}
+library
+  imports
+    test.dart as p @22
+  definingUnit
+    classes
+      class C @31
+        constructors
+          synthetic @-1
+      class D @42
+        supertype: C
+        constructors
+          synthetic @-1
 ''');
   }
 
@@ -8849,8 +18297,21 @@
     addLibrarySource(destinationPath, 'class C {}');
     var library = await checkLibrary('import "/a.dart"; C c;');
     checkElementText(library, r'''
-import 'a.dart';
-C c;
+library
+  imports
+    a.dart
+  definingUnit
+    topLevelVariables
+      static c @20
+        type: C
+    accessors
+      synthetic static get c @20
+        returnType: C
+      synthetic static set c @20
+        parameters
+          requiredPositional _c @20
+            type: C
+        returnType: void
 ''');
   }
 
@@ -8862,9 +18323,32 @@
 Stream s;
 ''');
     checkElementText(library, r'''
-import 'dart:async' show Future, Stream;
-Future<dynamic> f;
-Stream<dynamic> s;
+library
+  imports
+    dart:async
+      combinators
+        show: Future, Stream
+  definingUnit
+    topLevelVariables
+      static f @48
+        type: Future<dynamic>
+      static s @58
+        type: Stream<dynamic>
+    accessors
+      synthetic static get f @48
+        returnType: Future<dynamic>
+      synthetic static set f @48
+        parameters
+          requiredPositional _f @48
+            type: Future<dynamic>
+        returnType: void
+      synthetic static get s @58
+        returnType: Stream<dynamic>
+      synthetic static set s @58
+        parameters
+          requiredPositional _s @58
+            type: Stream<dynamic>
+        returnType: void
 ''');
   }
 
@@ -8891,10 +18375,31 @@
     var library =
         await checkLibrary('import "a.dart"; import "b.dart"; C c; D d;');
     checkElementText(library, r'''
-import 'a.dart';
-import 'b.dart';
-C c;
-D d;
+library
+  imports
+    a.dart
+    b.dart
+  definingUnit
+    topLevelVariables
+      static c @36
+        type: C
+      static d @41
+        type: D
+    accessors
+      synthetic static get c @36
+        returnType: C
+      synthetic static set c @36
+        parameters
+          requiredPositional _c @36
+            type: C
+        returnType: void
+      synthetic static get d @41
+        returnType: D
+      synthetic static set d @41
+        parameters
+          requiredPositional _d @41
+            type: D
+        returnType: void
 ''');
   }
 
@@ -8908,17 +18413,73 @@
 D<int,U> f<U>() => null;
 const x = const C(f);
 ''');
-    checkElementText(library, '''
-typedef F<T> = D<T, U> Function<U>();
-class C<V> {
-  const C(D<V, U> Function<U>() f);
-}
-class D<T, U> {
-}
-const C<int> x = const
-        C/*location: test.dart;C*/(
-        f/*location: test.dart;f*/);
-D<int, U> f<U>() {}
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @43
+        typeParameters
+          covariant V @45
+            defaultType: dynamic
+        constructors
+          const @58
+            parameters
+              requiredPositional f @65
+                type: D<V, U> Function<U>()
+                  aliasElement: self::@typeAlias::F
+                  aliasArguments
+                    V
+      class D @77
+        typeParameters
+          covariant T @79
+            defaultType: dynamic
+          covariant U @81
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+    typeAliases
+      F @8
+        typeParameters
+          covariant T @10
+            defaultType: dynamic
+        aliasedType: D<T, U> Function<U>()
+        aliasedElement: GenericFunctionTypeElement
+          typeParameters
+            covariant U @-1
+          returnType: D<T, U>
+    topLevelVariables
+      static const x @118
+        type: C<int>
+        constantInitializer
+          InstanceCreationExpression
+            argumentList: ArgumentList
+              arguments
+                SimpleIdentifier
+                  staticElement: self::@function::f
+                  staticType: D<int, U> Function<U>()
+                  token: f @130
+              leftParenthesis: ( @129
+              rightParenthesis: ) @131
+            constructorName: ConstructorName
+              staticElement: ConstructorMember
+                base: self::@class::C::@constructor::•
+                substitution: {V: int}
+              type: TypeName
+                name: SimpleIdentifier
+                  staticElement: self::@class::C
+                  staticType: null
+                  token: C @128
+                type: C<int>
+            keyword: const @122
+            staticType: C<int>
+    accessors
+      synthetic static get x @118
+        returnType: C<int>
+    functions
+      f @96
+        typeParameters
+          covariant U @98
+        returnType: D<int, U>
 ''');
   }
 
@@ -8932,17 +18493,61 @@
 D<T> f<T>() => null;
 const x = const C(f);
 ''');
-    checkElementText(library, '''
-typedef F = D<T> Function<T>();
-class C {
-  const C(D<T> Function<T>() f);
-}
-class D<T> {
-}
-const C x = const
-        C/*location: test.dart;C*/(
-        f/*location: test.dart;f*/);
-D<T> f<T>() {}
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @38
+        constructors
+          const @50
+            parameters
+              requiredPositional f @54
+                type: D<T> Function<T>()
+                  aliasElement: self::@typeAlias::F
+      class D @66
+        typeParameters
+          covariant T @68
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+    typeAliases
+      F @8
+        aliasedType: D<T> Function<T>()
+        aliasedElement: GenericFunctionTypeElement
+          typeParameters
+            covariant T @-1
+          returnType: D<T>
+    topLevelVariables
+      static const x @101
+        type: C
+        constantInitializer
+          InstanceCreationExpression
+            argumentList: ArgumentList
+              arguments
+                SimpleIdentifier
+                  staticElement: self::@function::f
+                  staticType: D<T> Function<T>()
+                  token: f @113
+              leftParenthesis: ( @112
+              rightParenthesis: ) @114
+            constructorName: ConstructorName
+              staticElement: self::@class::C::@constructor::•
+              type: TypeName
+                name: SimpleIdentifier
+                  staticElement: self::@class::C
+                  staticType: null
+                  token: C @111
+                type: C
+            keyword: const @105
+            staticType: C
+    accessors
+      synthetic static get x @101
+        returnType: C
+    functions
+      f @79
+        typeParameters
+          covariant T @81
+        returnType: D<T>
 ''');
   }
 
@@ -8958,15 +18563,38 @@
 
 var s = new S(new B());
 ''');
-    checkElementText(library, '''
-class A {
-}
-class B extends A {
-}
-class S<T extends A = A> {
-  S(T _);
-}
-S<B> s;
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          synthetic @-1
+      class B @18
+        supertype: A
+        constructors
+          synthetic @-1
+      class S @40
+        typeParameters
+          covariant T @42
+            bound: A
+            defaultType: A
+        constructors
+          @59
+            parameters
+              requiredPositional _ @63
+                type: T
+    topLevelVariables
+      static s @74
+        type: S<B>
+    accessors
+      synthetic static get s @74
+        returnType: S<B>
+      synthetic static set s @74
+        parameters
+          requiredPositional _s @74
+            type: S<B>
+        returnType: void
 ''');
   }
 
@@ -8984,20 +18612,65 @@
 var a = new A();
 var x = a.b.c ??= new D();
 ''');
-    checkElementText(library, '''
-class A {
-  B b;
-}
-class B {
-  C get c {}
-  void set c(C value) {}
-}
-class C {
-}
-class D extends C {
-}
-A a;
-C x;
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        fields
+          b @14
+            type: B
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get b @14
+            returnType: B
+          synthetic set b @14
+            parameters
+              requiredPositional _b @14
+                type: B
+            returnType: void
+      class B @25
+        fields
+          synthetic c @-1
+            type: C
+        constructors
+          synthetic @-1
+        accessors
+          get c @37
+            returnType: C
+          set c @59
+            parameters
+              requiredPositional value @63
+                type: C
+            returnType: void
+      class C @81
+        constructors
+          synthetic @-1
+      class D @92
+        supertype: C
+        constructors
+          synthetic @-1
+    topLevelVariables
+      static a @111
+        type: A
+      static x @128
+        type: C
+    accessors
+      synthetic static get a @111
+        returnType: A
+      synthetic static set a @111
+        parameters
+          requiredPositional _a @111
+            type: A
+        returnType: void
+      synthetic static get x @128
+        returnType: C
+      synthetic static set x @128
+        parameters
+          requiredPositional _x @128
+            type: C
+        returnType: void
 ''');
   }
 
@@ -9008,10 +18681,38 @@
 var y = [3];
 var z = x.toList();
 ''');
-    checkElementText(library, '''
-Iterable<String> x;
-List<int> y;
-List<String> z;
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static x @4
+        type: Iterable<String>
+      static y @40
+        type: List<int>
+      static z @53
+        type: List<String>
+    accessors
+      synthetic static get x @4
+        returnType: Iterable<String>
+      synthetic static set x @4
+        parameters
+          requiredPositional _x @4
+            type: Iterable<String>
+        returnType: void
+      synthetic static get y @40
+        returnType: List<int>
+      synthetic static set y @40
+        parameters
+          requiredPositional _y @40
+            type: List<int>
+        returnType: void
+      synthetic static get z @53
+        returnType: List<String>
+      synthetic static set z @53
+        parameters
+          requiredPositional _z @53
+            type: List<String>
+        returnType: void
 ''');
   }
 
@@ -9023,12 +18724,44 @@
 var x = <C>[];
 var y = x.map((c) => c.p);
 ''');
-    checkElementText(library, '''
-class C {
-  int p;
-}
-List<C> x;
-Iterable<int> y;
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          p @16
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get p @16
+            returnType: int
+          synthetic set p @16
+            parameters
+              requiredPositional _p @16
+                type: int
+            returnType: void
+    topLevelVariables
+      static x @25
+        type: List<C>
+      static y @40
+        type: Iterable<int>
+    accessors
+      synthetic static get x @25
+        returnType: List<C>
+      synthetic static set x @25
+        parameters
+          requiredPositional _x @25
+            type: List<C>
+        returnType: void
+      synthetic static get y @40
+        returnType: Iterable<int>
+      synthetic static set y @40
+        parameters
+          requiredPositional _y @40
+            type: Iterable<int>
+        returnType: void
 ''');
   }
 
@@ -9041,7 +18774,14 @@
 }
 ''');
     checkElementText(library, r'''
-dynamic f<U, V>() {}
+library
+  definingUnit
+    functions
+      f @0
+        typeParameters
+          covariant U @2
+          covariant V @5
+        returnType: dynamic
 ''');
   }
 
@@ -9055,10 +18795,23 @@
 }
 ''');
     checkElementText(library, r'''
-class C<U, V> {
-  final dynamic x;
-  C();
-}
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          covariant U @8
+            defaultType: dynamic
+          covariant V @11
+            defaultType: dynamic
+        fields
+          final x @24
+            type: dynamic
+        constructors
+          @29
+        accessors
+          synthetic get x @24
+            returnType: dynamic
 ''');
   }
 
@@ -9071,9 +18824,23 @@
 }
 ''');
     checkElementText(library, r'''
-class C<U, V> {
-  dynamic get x {}
-}
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          covariant U @8
+            defaultType: dynamic
+          covariant V @11
+            defaultType: dynamic
+        fields
+          synthetic x @-1
+            type: dynamic
+        constructors
+          synthetic @-1
+        accessors
+          get x @22
+            returnType: dynamic
 ''');
   }
 
@@ -9089,9 +18856,21 @@
 }
 ''');
     checkElementText(library, r'''
-class C<T> {
-  dynamic f<U, V>() {}
-}
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+        methods
+          f @15
+            typeParameters
+              covariant U @17
+              covariant V @20
+            returnType: dynamic
 ''');
   }
 
@@ -9106,9 +18885,26 @@
 }
 ''');
     checkElementText(library, r'''
-class C<U, V> {
-  void set x(dynamic value) {}
-}
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          covariant U @8
+            defaultType: dynamic
+          covariant V @11
+            defaultType: dynamic
+        fields
+          synthetic x @-1
+            type: dynamic
+        constructors
+          synthetic @-1
+        accessors
+          set x @27
+            parameters
+              requiredPositional value @29
+                type: dynamic
+            returnType: void
 ''');
   }
 
@@ -9121,7 +18917,13 @@
 }
 ''');
     checkElementText(library, r'''
-dynamic f<T>() {}
+library
+  definingUnit
+    functions
+      f @0
+        typeParameters
+          covariant T @2
+        returnType: dynamic
 ''');
   }
 
@@ -9134,7 +18936,13 @@
 }
 ''');
     checkElementText(library, r'''
-dynamic f<T>() {}
+library
+  definingUnit
+    functions
+      f @0
+        typeParameters
+          covariant T @2
+        returnType: dynamic
 ''');
   }
 
@@ -9148,11 +18956,25 @@
 }
 ''');
     checkElementText(library, r'''
-class A {
-  static final int foo;
-  static final int Function(double) bar;
-  static int Function(double) baz() {}
-}
+library
+  definingUnit
+    classes
+      class A @6
+        fields
+          static final foo @25
+            type: int
+          static final bar @56
+            type: int Function(double)
+        constructors
+          synthetic @-1
+        accessors
+          synthetic static get foo @25
+            returnType: int
+          synthetic static get bar @56
+            returnType: int Function(double)
+        methods
+          static baz @100
+            returnType: int Function(double)
 ''');
   }
 
@@ -9164,10 +18986,49 @@
 var d = 4;
 ''');
     checkElementText(library, r'''
-dynamic a/*error: dependencyCycle*/;
-dynamic b/*error: dependencyCycle*/;
-dynamic c/*error: dependencyCycle*/;
-int d;
+library
+  definingUnit
+    topLevelVariables
+      static a @4
+        typeInferenceError: dependencyCycle
+        type: dynamic
+      static b @19
+        typeInferenceError: dependencyCycle
+        type: dynamic
+      static c @34
+        typeInferenceError: dependencyCycle
+        type: dynamic
+      static d @49
+        type: int
+    accessors
+      synthetic static get a @4
+        returnType: dynamic
+      synthetic static set a @4
+        parameters
+          requiredPositional _a @4
+            type: dynamic
+        returnType: void
+      synthetic static get b @19
+        returnType: dynamic
+      synthetic static set b @19
+        parameters
+          requiredPositional _b @19
+            type: dynamic
+        returnType: void
+      synthetic static get c @34
+        returnType: dynamic
+      synthetic static set c @34
+        parameters
+          requiredPositional _c @34
+            type: dynamic
+        returnType: void
+      synthetic static get d @49
+        returnType: int
+      synthetic static set d @49
+        parameters
+          requiredPositional _d @49
+            type: int
+        returnType: void
 ''');
   }
 
@@ -9176,13 +19037,46 @@
         ' class C extends D { var v; }'
         ' abstract class D { F get v; }');
     checkElementText(library, r'''
-typedef F = int Function(String s);
-class C extends D {
-  int Function(String) v;
-}
-abstract class D {
-  int Function(String) get v;
-}
+library
+  definingUnit
+    classes
+      class C @31
+        supertype: D
+        fields
+          v @49
+            type: int Function(String)
+              aliasElement: self::@typeAlias::F
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get v @49
+            returnType: int Function(String)
+              aliasElement: self::@typeAlias::F
+          synthetic set v @49
+            parameters
+              requiredPositional _v @49
+                type: int Function(String)
+                  aliasElement: self::@typeAlias::F
+            returnType: void
+      abstract class D @69
+        fields
+          synthetic v @-1
+            type: int Function(String)
+              aliasElement: self::@typeAlias::F
+        constructors
+          synthetic @-1
+        accessors
+          abstract get v @79
+            returnType: int Function(String)
+              aliasElement: self::@typeAlias::F
+    typeAliases
+      functionTypeAliasBased F @12
+        aliasedType: int Function(String)
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional s @-1
+              type: String
+          returnType: int
 ''');
   }
 
@@ -9193,8 +19087,21 @@
 var x = f();
 ''');
     checkElementText(library, r'''
-import 'a.dart';
-int x;
+library
+  imports
+    a.dart
+  definingUnit
+    topLevelVariables
+      static x @21
+        type: int
+    accessors
+      synthetic static get x @21
+        returnType: int
+      synthetic static set x @21
+        parameters
+          requiredPositional _x @21
+            type: int
+        returnType: void
 ''');
   }
 
@@ -9205,8 +19112,21 @@
 var x = f();
 ''');
     checkElementText(library, r'''
-import 'a.dart';
-int? x;
+library
+  imports
+    a.dart
+  definingUnit
+    topLevelVariables
+      static x @21
+        type: int?
+    accessors
+      synthetic static get x @21
+        returnType: int?
+      synthetic static set x @21
+        parameters
+          requiredPositional _x @21
+            type: int?
+        returnType: void
 ''');
   }
 
@@ -9217,8 +19137,21 @@
 var x = f();
 ''');
     checkElementText(library, r'''
-import 'a.dart';
-void Function() x;
+library
+  imports
+    a.dart
+  definingUnit
+    topLevelVariables
+      static x @21
+        type: void Function()
+    accessors
+      synthetic static get x @21
+        returnType: void Function()
+      synthetic static set x @21
+        parameters
+          requiredPositional _x @21
+            type: void Function()
+        returnType: void
 ''');
   }
 
@@ -9229,8 +19162,21 @@
 var x = f();
 ''');
     checkElementText(library, r'''
-import 'a.dart';
-void Function()? x;
+library
+  imports
+    a.dart
+  definingUnit
+    topLevelVariables
+      static x @21
+        type: void Function()?
+    accessors
+      synthetic static get x @21
+        returnType: void Function()?
+      synthetic static set x @21
+        parameters
+          requiredPositional _x @21
+            type: void Function()?
+        returnType: void
 ''');
   }
 
@@ -9244,12 +19190,41 @@
 }
 ''');
     checkElementText(library, r'''
-class C<T> extends D<int, T> {
-  Map<T, int> v;
-}
-abstract class D<U, V> {
-  Map<V, U> get v;
-}
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        supertype: D<int, T>
+        fields
+          v @37
+            type: Map<T, int>
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get v @37
+            returnType: Map<T, int>
+          synthetic set v @37
+            parameters
+              requiredPositional _v @37
+                type: Map<T, int>
+            returnType: void
+      abstract class D @57
+        typeParameters
+          covariant U @59
+            defaultType: dynamic
+          covariant V @62
+            defaultType: dynamic
+        fields
+          synthetic v @-1
+            type: Map<V, U>
+        constructors
+          synthetic @-1
+        accessors
+          abstract get v @83
+            returnType: Map<V, U>
 ''');
   }
 
@@ -9260,9 +19235,37 @@
 var v = h((y) {});
 ''');
     checkElementText(library, r'''
-typedef F = void Function(int Function(String) g/*(String s)*/);
-dynamic v;
-dynamic h(void Function(int Function(String)) f) {}
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased F @13
+        aliasedType: void Function(int Function(String))
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional g @-1
+              type: int Function(String)
+              parameters
+                requiredPositional s @-1
+                  type: String
+          returnType: void
+    topLevelVariables
+      static v @53
+        type: dynamic
+    accessors
+      synthetic static get v @53
+        returnType: dynamic
+      synthetic static set v @53
+        parameters
+          requiredPositional _v @53
+            type: dynamic
+        returnType: void
+    functions
+      h @33
+        parameters
+          requiredPositional f @37
+            type: void Function(int Function(String))
+              aliasElement: self::@typeAlias::F
+        returnType: dynamic
 ''');
   }
 
@@ -9275,12 +19278,45 @@
   void f(int x, W g(V s));
 }''');
     checkElementText(library, r'''
-class C<T, U> extends D<U, int> {
-  void f(int x, int Function(U) g) {}
-}
-abstract class D<V, W> {
-  void f(int x, W Function(V) g/*(V s)*/);
-}
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+          covariant U @11
+            defaultType: dynamic
+        supertype: D<U, int>
+        constructors
+          synthetic @-1
+        methods
+          f @41
+            parameters
+              requiredPositional x @47
+                type: int
+              requiredPositional g @50
+                type: int Function(U)
+            returnType: void
+      abstract class D @73
+        typeParameters
+          covariant V @75
+            defaultType: dynamic
+          covariant W @78
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+        methods
+          abstract f @90
+            parameters
+              requiredPositional x @96
+                type: int
+              requiredPositional g @101
+                type: W Function(V)
+                parameters
+                  requiredPositional s @105
+                    type: V
+            returnType: void
 ''');
   }
 
@@ -9301,10 +19337,23 @@
 }
 ''');
     checkElementText(library, r'''
-import 'a.dart';
-class C extends D {
-  void f(int x, int Function(String) g) {}
-}
+library
+  imports
+    a.dart
+  definingUnit
+    classes
+      class C @23
+        supertype: D
+        constructors
+          synthetic @-1
+        methods
+          f @44
+            parameters
+              requiredPositional x @50
+                type: int
+              requiredPositional g @53
+                type: int Function(String)
+            returnType: void
 ''');
   }
 
@@ -9312,12 +19361,35 @@
     var library = await checkLibrary('class C extends D { void f(int x, g) {} }'
         ' abstract class D { void f(int x, int g(String s)); }');
     checkElementText(library, r'''
-class C extends D {
-  void f(int x, int Function(String) g) {}
-}
-abstract class D {
-  void f(int x, int Function(String) g/*(String s)*/);
-}
+library
+  definingUnit
+    classes
+      class C @6
+        supertype: D
+        constructors
+          synthetic @-1
+        methods
+          f @25
+            parameters
+              requiredPositional x @31
+                type: int
+              requiredPositional g @34
+                type: int Function(String)
+            returnType: void
+      abstract class D @57
+        constructors
+          synthetic @-1
+        methods
+          abstract f @66
+            parameters
+              requiredPositional x @72
+                type: int
+              requiredPositional g @79
+                type: int Function(String)
+                parameters
+                  requiredPositional s @88
+                    type: String
+            returnType: void
 ''');
   }
 
@@ -9327,8 +19399,30 @@
 var v = f((x, y) {});
 ''');
     checkElementText(library, r'''
-dynamic v;
-dynamic f(void Function(int, void Function()) g/*(int x, void Function() h)*/) {}
+library
+  definingUnit
+    topLevelVariables
+      static v @40
+        type: dynamic
+    accessors
+      synthetic static get v @40
+        returnType: dynamic
+      synthetic static set v @40
+        parameters
+          requiredPositional _v @40
+            type: dynamic
+        returnType: void
+    functions
+      f @0
+        parameters
+          requiredPositional g @7
+            type: void Function(int, void Function())
+            parameters
+              requiredPositional x @13
+                type: int
+              requiredPositional h @21
+                type: void Function()
+        returnType: dynamic
 ''');
   }
 
@@ -9338,8 +19432,30 @@
 var v = f(g: (x, y) {});
 ''');
     checkElementText(library, r'''
-dynamic v;
-dynamic f({void Function(int, void Function()) g/*(int x, void Function() h)*/}) {}
+library
+  definingUnit
+    topLevelVariables
+      static v @42
+        type: dynamic
+    accessors
+      synthetic static get v @42
+        returnType: dynamic
+      synthetic static set v @42
+        parameters
+          requiredPositional _v @42
+            type: dynamic
+        returnType: void
+    functions
+      f @0
+        parameters
+          optionalNamed g @8
+            type: void Function(int, void Function())
+            parameters
+              requiredPositional x @14
+                type: int
+              requiredPositional h @22
+                type: void Function()
+        returnType: dynamic
 ''');
   }
 
@@ -9347,12 +19463,37 @@
     var library = await checkLibrary('class C extends D { void set f(g) {} }'
         ' abstract class D { void set f(int g(String s)); }');
     checkElementText(library, r'''
-class C extends D {
-  void set f(int Function(String) g) {}
-}
-abstract class D {
-  void set f(int Function(String) g/*(String s)*/);
-}
+library
+  definingUnit
+    classes
+      class C @6
+        supertype: D
+        fields
+          synthetic f @-1
+            type: int Function(String)
+        constructors
+          synthetic @-1
+        accessors
+          set f @29
+            parameters
+              requiredPositional g @31
+                type: int Function(String)
+            returnType: void
+      abstract class D @54
+        fields
+          synthetic f @-1
+            type: int Function(String)
+        constructors
+          synthetic @-1
+        accessors
+          abstract set f @67
+            parameters
+              requiredPositional g @73
+                type: int Function(String)
+                parameters
+                  requiredPositional s @82
+                    type: String
+            returnType: void
 ''');
   }
 
@@ -9370,10 +19511,21 @@
 }
   ''');
     checkElementText(library, r'''
-import 'a.dart';
-class B extends A {
-  dynamic m(Stream<dynamic> p) {}
-}
+library
+  imports
+    a.dart
+  definingUnit
+    classes
+      class B @23
+        supertype: A
+        constructors
+          synthetic @-1
+        methods
+          m @39
+            parameters
+              requiredPositional p @41
+                type: Stream<dynamic>
+            returnType: dynamic
 ''');
     ClassElement b = library.definingCompilationUnit.classes[0];
     ParameterElement p = b.methods[0].parameters[0];
@@ -9396,12 +19548,35 @@
 var a2 = A.named();
 ''');
     checkElementText(library, r'''
-class A {
-  A();
-  A.named();
-}
-A a1;
-A a2;
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          @12
+          named @21
+            periodOffset: 20
+            nameEnd: 26
+    topLevelVariables
+      static a1 @36
+        type: A
+      static a2 @50
+        type: A
+    accessors
+      synthetic static get a1 @36
+        returnType: A
+      synthetic static set a1 @36
+        parameters
+          requiredPositional _a1 @36
+            type: A
+        returnType: void
+      synthetic static get a2 @50
+        returnType: A
+      synthetic static set a2 @50
+        parameters
+          requiredPositional _a2 @50
+            type: A
+        returnType: void
 ''');
   }
 
@@ -9418,9 +19593,30 @@
 var a2 = foo.A.named();
 ''');
     checkElementText(library, r'''
-import 'foo.dart' as foo;
-A a1;
-A a2;
+library
+  imports
+    foo.dart as foo @21
+  definingUnit
+    topLevelVariables
+      static a1 @30
+        type: A
+      static a2 @48
+        type: A
+    accessors
+      synthetic static get a1 @30
+        returnType: A
+      synthetic static set a1 @30
+        parameters
+          requiredPositional _a1 @30
+            type: A
+        returnType: void
+      synthetic static get a2 @48
+        returnType: A
+      synthetic static set a2 @48
+        parameters
+          requiredPositional _a2 @48
+            type: A
+        returnType: void
 ''');
   }
 
@@ -9433,9 +19629,36 @@
 var v = [f, g];
 ''');
     checkElementText(library, r'''
-List<Object Function(int Function(String))> v;
-int f(int Function(String) x/*(String y)*/) {}
-String g(int Function(String) x/*(String y)*/) {}
+library
+  definingUnit
+    topLevelVariables
+      static v @71
+        type: List<Object Function(int Function(String))>
+    accessors
+      synthetic static get v @71
+        returnType: List<Object Function(int Function(String))>
+      synthetic static set v @71
+        parameters
+          requiredPositional _v @71
+            type: List<Object Function(int Function(String))>
+        returnType: void
+    functions
+      f @4
+        parameters
+          requiredPositional x @10
+            type: int Function(String)
+            parameters
+              requiredPositional y @19
+                type: String
+        returnType: int
+      g @39
+        parameters
+          requiredPositional x @45
+            type: int Function(String)
+            parameters
+              requiredPositional y @54
+                type: String
+        returnType: String
 ''');
   }
 
@@ -9456,31 +19679,80 @@
 }
 ''');
     checkElementText(library, r'''
-abstract class A {
-  int m();
-}
-abstract class B {
-  String m();
-}
-abstract class C implements A, B {
-}
-abstract class D extends C {
-  dynamic f;
-}
+library
+  definingUnit
+    classes
+      abstract class A @15
+        constructors
+          synthetic @-1
+        methods
+          abstract m @25
+            returnType: int
+      abstract class B @48
+        constructors
+          synthetic @-1
+        methods
+          abstract m @61
+            returnType: String
+      abstract class C @84
+        interfaces
+          A
+          B
+        constructors
+          synthetic @-1
+      abstract class D @121
+        supertype: C
+        fields
+          f @141
+            type: dynamic
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get f @141
+            returnType: dynamic
+          synthetic set f @141
+            parameters
+              requiredPositional _f @141
+                type: dynamic
+            returnType: void
 ''');
   }
 
   test_initializer_executable_with_return_type_from_closure() async {
     var library = await checkLibrary('var v = () => 0;');
     checkElementText(library, r'''
-int Function() v;
+library
+  definingUnit
+    topLevelVariables
+      static v @4
+        type: int Function()
+    accessors
+      synthetic static get v @4
+        returnType: int Function()
+      synthetic static set v @4
+        parameters
+          requiredPositional _v @4
+            type: int Function()
+        returnType: void
 ''');
   }
 
   test_initializer_executable_with_return_type_from_closure_await_dynamic() async {
     var library = await checkLibrary('var v = (f) async => await f;');
     checkElementText(library, r'''
-Future<dynamic> Function(dynamic) v;
+library
+  definingUnit
+    topLevelVariables
+      static v @4
+        type: Future<dynamic> Function(dynamic)
+    accessors
+      synthetic static get v @4
+        returnType: Future<dynamic> Function(dynamic)
+      synthetic static set v @4
+        parameters
+          requiredPositional _v @4
+            type: Future<dynamic> Function(dynamic)
+        returnType: void
 ''');
   }
 
@@ -9491,8 +19763,21 @@
 ''');
     // The analyzer type system over-flattens - see dartbug.com/31887
     checkElementText(library, r'''
-import 'dart:async';
-Future<int> Function(Future<Future<Future<int>>>) v;
+library
+  imports
+    dart:async
+  definingUnit
+    topLevelVariables
+      static v @25
+        type: Future<int> Function(Future<Future<Future<int>>>)
+    accessors
+      synthetic static get v @25
+        returnType: Future<int> Function(Future<Future<Future<int>>>)
+      synthetic static set v @25
+        parameters
+          requiredPositional _v @25
+            type: Future<int> Function(Future<Future<Future<int>>>)
+        returnType: void
 ''');
   }
 
@@ -9502,8 +19787,21 @@
 var v = (Future<int> f) async => await f;
 ''');
     checkElementText(library, r'''
-import 'dart:async';
-Future<int> Function(Future<int>) v;
+library
+  imports
+    dart:async
+  definingUnit
+    topLevelVariables
+      static v @25
+        type: Future<int> Function(Future<int>)
+    accessors
+      synthetic static get v @25
+        returnType: Future<int> Function(Future<int>)
+      synthetic static set v @25
+        parameters
+          requiredPositional _v @25
+            type: Future<int> Function(Future<int>)
+        returnType: void
 ''');
   }
 
@@ -9513,8 +19811,21 @@
 var v = (Future f) async => await f;
 ''');
     checkElementText(library, r'''
-import 'dart:async';
-Future<dynamic> Function(Future<dynamic>) v;
+library
+  imports
+    dart:async
+  definingUnit
+    topLevelVariables
+      static v @25
+        type: Future<dynamic> Function(Future<dynamic>)
+    accessors
+      synthetic static get v @25
+        returnType: Future<dynamic> Function(Future<dynamic>)
+      synthetic static set v @25
+        parameters
+          requiredPositional _v @25
+            type: Future<dynamic> Function(Future<dynamic>)
+        returnType: void
 ''');
   }
 
@@ -9525,9 +19836,23 @@
 }
 ''');
     checkElementText(library, r'''
-class C {
-  int Function() v;
-}
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          v @16
+            type: int Function()
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get v @16
+            returnType: int Function()
+          synthetic set v @16
+            parameters
+              requiredPositional _v @16
+                type: int Function()
+            returnType: void
 ''');
   }
 
@@ -9539,7 +19864,11 @@
 }
 ''');
     checkElementText(library, r'''
-void f() {}
+library
+  definingUnit
+    functions
+      f @5
+        returnType: void
 ''');
   }
 
@@ -9570,16 +19899,41 @@
 }
 ''');
     checkElementText(library, r'''
-import 'legacy.dart';
-class X1 extends LegacyDefault* {
-  bool* ==(dynamic other) {}
-}
-class X2 extends LegacyObject* {
-  bool* ==(Object* other) {}
-}
-class X3 extends LegacyInt* {
-  bool* ==(int* other) {}
-}
+library
+  imports
+    legacy.dart
+  definingUnit
+    classes
+      class X1 @28
+        supertype: LegacyDefault*
+        constructors
+          synthetic @-1
+        methods
+          == @71
+            parameters
+              requiredPositional other @74
+                type: dynamic
+            returnType: bool*
+      class X2 @99
+        supertype: LegacyObject*
+        constructors
+          synthetic @-1
+        methods
+          == @140
+            parameters
+              requiredPositional other @143
+                type: Object*
+            returnType: bool*
+      class X3 @168
+        supertype: LegacyInt*
+        constructors
+          synthetic @-1
+        methods
+          == @206
+            parameters
+              requiredPositional other @209
+                type: int*
+            returnType: bool*
 ''');
   }
 
@@ -9622,17 +19976,48 @@
 }
 ''');
     checkElementText(library, r'''
-import 'legacy.dart';
-import 'nullSafe.dart';
-class X1 extends LegacyDefault* implements NullSafeDefault* {
-  bool* ==(dynamic other) {}
-}
-class X2 extends LegacyObject* implements NullSafeObject* {
-  bool* ==(Object* other) {}
-}
-class X3 extends LegacyInt* implements NullSafeInt* {
-  bool* ==(int* other) {}
-}
+library
+  imports
+    legacy.dart
+    nullSafe.dart
+  definingUnit
+    classes
+      class X1 @67
+        supertype: LegacyDefault*
+        interfaces
+          NullSafeDefault*
+        constructors
+          synthetic @-1
+        methods
+          == @136
+            parameters
+              requiredPositional other @139
+                type: dynamic
+            returnType: bool*
+      class X2 @164
+        supertype: LegacyObject*
+        interfaces
+          NullSafeObject*
+        constructors
+          synthetic @-1
+        methods
+          == @231
+            parameters
+              requiredPositional other @234
+                type: Object*
+            returnType: bool*
+      class X3 @259
+        supertype: LegacyInt*
+        interfaces
+          NullSafeInt*
+        constructors
+          synthetic @-1
+        methods
+          == @320
+            parameters
+              requiredPositional other @323
+                type: int*
+            returnType: bool*
 ''');
   }
 
@@ -9661,16 +20046,41 @@
 }
 ''');
     checkElementText(library, r'''
-import 'nullSafe.dart';
-class X1 extends NullSafeDefault {
-  bool ==(Object other) {}
-}
-class X2 extends NullSafeObject {
-  bool ==(Object other) {}
-}
-class X3 extends NullSafeInt {
-  bool ==(int other) {}
-}
+library
+  imports
+    nullSafe.dart
+  definingUnit
+    classes
+      class X1 @30
+        supertype: NullSafeDefault
+        constructors
+          synthetic @-1
+        methods
+          == @74
+            parameters
+              requiredPositional other @77
+                type: Object
+            returnType: bool
+      class X2 @102
+        supertype: NullSafeObject
+        constructors
+          synthetic @-1
+        methods
+          == @145
+            parameters
+              requiredPositional other @148
+                type: Object
+            returnType: bool
+      class X3 @173
+        supertype: NullSafeInt
+        constructors
+          synthetic @-1
+        methods
+          == @213
+            parameters
+              requiredPositional other @216
+                type: int
+            returnType: bool
 ''');
   }
 
@@ -9680,9 +20090,30 @@
 C c;
 ''');
     checkElementText(library, r'''
-notSimplyBounded class C<S extends num = num, T extends C<S, T> = C<num, dynamic>> {
-}
-C<num, C<num, dynamic>> c;
+library
+  definingUnit
+    classes
+      notSimplyBounded class C @6
+        typeParameters
+          covariant S @8
+            bound: num
+            defaultType: num
+          covariant T @23
+            bound: C<S, T>
+            defaultType: C<num, dynamic>
+        constructors
+          synthetic @-1
+    topLevelVariables
+      static c @47
+        type: C<num, C<num, dynamic>>
+    accessors
+      synthetic static get c @47
+        returnType: C<num, C<num, dynamic>>
+      synthetic static set c @47
+        parameters
+          requiredPositional _c @47
+            type: C<num, C<num, dynamic>>
+        returnType: void
 ''');
   }
 
@@ -9696,13 +20127,50 @@
 }
 ''');
     checkElementText(library, r'''
-notSimplyBounded class C<T extends C<T> = C<dynamic>> {
-}
-class B {
-  C<C<Object?>> c3;
-}
-C<C<dynamic>> c;
-C<C<Object?>> c2;
+library
+  definingUnit
+    classes
+      notSimplyBounded class C @6
+        typeParameters
+          covariant T @8
+            bound: C<T>
+            defaultType: C<dynamic>
+        constructors
+          synthetic @-1
+      class B @56
+        fields
+          c3 @66
+            type: C<C<Object?>>
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get c3 @66
+            returnType: C<C<Object?>>
+          synthetic set c3 @66
+            parameters
+              requiredPositional _c3 @66
+                type: C<C<Object?>>
+            returnType: void
+    topLevelVariables
+      static c @29
+        type: C<C<dynamic>>
+      static c2 @36
+        type: C<C<Object?>>
+    accessors
+      synthetic static get c @29
+        returnType: C<C<dynamic>>
+      synthetic static set c @29
+        parameters
+          requiredPositional _c @29
+            type: C<C<dynamic>>
+        returnType: void
+      synthetic static get c2 @36
+        returnType: C<C<Object?>>
+      synthetic static set c2 @36
+        parameters
+          requiredPositional _c2 @36
+            type: C<C<Object?>>
+        returnType: void
 ''');
   }
 
@@ -9717,13 +20185,50 @@
 }
 ''');
     checkElementText(library, r'''
-notSimplyBounded class C<T extends C<T*>* = C<dynamic>*> {
-}
-class B {
-  C<C<dynamic>*>* c3;
-}
-C<C<dynamic>*>* c;
-C<C<dynamic>*>* c2;
+library
+  definingUnit
+    classes
+      notSimplyBounded class C @6
+        typeParameters
+          covariant T @8
+            bound: C<T*>*
+            defaultType: C<dynamic>*
+        constructors
+          synthetic @-1
+      class B @56
+        fields
+          c3 @66
+            type: C<C<dynamic>*>*
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get c3 @66
+            returnType: C<C<dynamic>*>*
+          synthetic set c3 @66
+            parameters
+              requiredPositional _c3 @66
+                type: C<C<dynamic>*>*
+            returnType: void
+    topLevelVariables
+      static c @29
+        type: C<C<dynamic>*>*
+      static c2 @36
+        type: C<C<dynamic>*>*
+    accessors
+      synthetic static get c @29
+        returnType: C<C<dynamic>*>*
+      synthetic static set c @29
+        parameters
+          requiredPositional _c @29
+            type: C<C<dynamic>*>*
+        returnType: void
+      synthetic static get c2 @36
+        returnType: C<C<dynamic>*>*
+      synthetic static set c2 @36
+        parameters
+          requiredPositional _c2 @36
+            type: C<C<dynamic>*>*
+        returnType: void
 ''');
   }
 
@@ -9733,9 +20238,30 @@
 C c;
 ''');
     checkElementText(library, r'''
-notSimplyBounded class C<T extends C<T, U> = C<dynamic, num>, U extends num = num> {
-}
-C<C<dynamic, num>, num> c;
+library
+  definingUnit
+    classes
+      notSimplyBounded class C @6
+        typeParameters
+          covariant T @8
+            bound: C<T, U>
+            defaultType: C<dynamic, num>
+          covariant U @27
+            bound: num
+            defaultType: num
+        constructors
+          synthetic @-1
+    topLevelVariables
+      static c @47
+        type: C<C<dynamic, num>, num>
+    accessors
+      synthetic static get c @47
+        returnType: C<C<dynamic, num>, num>
+      synthetic static set c @47
+        parameters
+          requiredPositional _c @47
+            type: C<C<dynamic, num>, num>
+        returnType: void
 ''');
   }
 
@@ -9754,10 +20280,20 @@
 }
 ''');
     checkElementText(library, r'''
-import 'b.dart';
-class C {
-  O Function(O) f() {}
-}
+library
+  imports
+    b.dart
+  definingUnit
+    classes
+      class C @23
+        constructors
+          synthetic @-1
+        methods
+          f @31
+            returnType: O Function(O)
+              aliasElement: a.dart::@typeAlias::F
+              aliasArguments
+                O
 ''');
   }
 
@@ -9767,8 +20303,40 @@
 F f;
 ''');
     checkElementText(library, r'''
-typedef F<T extends num = num> = dynamic Function(T p);
-dynamic Function(num) f;
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased F @8
+        typeParameters
+          contravariant T @10
+            bound: num
+            defaultType: num
+        aliasedType: dynamic Function(T)
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional p @-1
+              type: T
+          returnType: dynamic
+    topLevelVariables
+      static f @33
+        type: dynamic Function(num)
+          aliasElement: self::@typeAlias::F
+          aliasArguments
+            num
+    accessors
+      synthetic static get f @33
+        returnType: dynamic Function(num)
+          aliasElement: self::@typeAlias::F
+          aliasArguments
+            num
+      synthetic static set f @33
+        parameters
+          requiredPositional _f @33
+            type: dynamic Function(num)
+              aliasElement: self::@typeAlias::F
+              aliasArguments
+                num
+        returnType: void
 ''');
   }
 
@@ -9779,11 +20347,36 @@
 B b;
 ''');
     checkElementText(library, r'''
-class A<T> {
-}
-notSimplyBounded class B<T extends int Function() = int Function(), U extends A<T> = A<int Function()>> {
-}
-B<int Function(), A<int Function()>> b;
+library
+  definingUnit
+    classes
+      class A @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+      notSimplyBounded class B @20
+        typeParameters
+          covariant T @22
+            bound: int Function()
+            defaultType: int Function()
+          covariant U @48
+            bound: A<T>
+            defaultType: A<int Function()>
+        constructors
+          synthetic @-1
+    topLevelVariables
+      static b @69
+        type: B<int Function(), A<int Function()>>
+    accessors
+      synthetic static get b @69
+        returnType: B<int Function(), A<int Function()>>
+      synthetic static set b @69
+        parameters
+          requiredPositional _b @69
+            type: B<int Function(), A<int Function()>>
+        returnType: void
 ''');
   }
 
@@ -9793,8 +20386,42 @@
 F f;
 ''');
     checkElementText(library, r'''
-typedef F<T extends num = num> = S Function<S>(T p);
-S Function<S>(num) f;
+library
+  definingUnit
+    typeAliases
+      F @8
+        typeParameters
+          contravariant T @10
+            bound: num
+            defaultType: num
+        aliasedType: S Function<S>(T)
+        aliasedElement: GenericFunctionTypeElement
+          typeParameters
+            covariant S @-1
+          parameters
+            requiredPositional p @-1
+              type: T
+          returnType: S
+    topLevelVariables
+      static f @49
+        type: S Function<S>(num)
+          aliasElement: self::@typeAlias::F
+          aliasArguments
+            num
+    accessors
+      synthetic static get f @49
+        returnType: S Function<S>(num)
+          aliasElement: self::@typeAlias::F
+          aliasArguments
+            num
+      synthetic static set f @49
+        parameters
+          requiredPositional _f @49
+            type: S Function<S>(num)
+              aliasElement: self::@typeAlias::F
+              aliasArguments
+                num
+        returnType: void
 ''');
   }
 
@@ -9806,11 +20433,29 @@
 class B<T extends num> {}
 ''');
     checkElementText(library, r'''
-class A<R extends B<num> = B<num>> {
-  final List<B<num>> values;
-}
-class B<T extends num = num> {
-}
+library
+  definingUnit
+    classes
+      class A @6
+        typeParameters
+          covariant R @8
+            bound: B<num>
+            defaultType: B<num>
+        fields
+          final values @31
+            type: List<B<num>>
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get values @31
+            returnType: List<B<num>>
+      class B @55
+        typeParameters
+          covariant T @57
+            bound: num
+            defaultType: num
+        constructors
+          synthetic @-1
 ''');
   }
 
@@ -9820,9 +20465,27 @@
 C c;
 ''');
     checkElementText(library, r'''
-class C<T extends num = num> {
-}
-C<num> c;
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          covariant T @8
+            bound: num
+            defaultType: num
+        constructors
+          synthetic @-1
+    topLevelVariables
+      static c @28
+        type: C<num>
+    accessors
+      synthetic static get c @28
+        returnType: C<num>
+      synthetic static set c @28
+        parameters
+          requiredPositional _c @28
+            type: C<num>
+        returnType: void
 ''');
   }
 
@@ -9838,33 +20501,36 @@
 @a.A.named
 class C {}
 ''');
-    checkElementText(
-        library,
-        r'''
-import 'package:test/a.dart' as a;
-class C {
-}
-  metadata
-    Annotation
-      constructorName: SimpleIdentifier
-        staticElement: package:test/a.dart::@class::A::@constructor::named
-        staticType: null
-        token: named
-      element: package:test/a.dart::@class::A::@constructor::named
-      name: PrefixedIdentifier
-        identifier: SimpleIdentifier
-          staticElement: package:test/a.dart::@class::A
-          staticType: null
-          token: A
-        period: .
-        prefix: SimpleIdentifier
-          staticElement: self::@prefix::a
-          staticType: null
-          token: a
-        staticElement: package:test/a.dart::@class::A
-        staticType: null
-''',
-        withResolvedAst: true);
+    checkElementText(library, r'''
+library
+  imports
+    package:test/a.dart as a @19
+  definingUnit
+    classes
+      class C @39
+        metadata
+          Annotation
+            atSign.offset: 22
+            constructorName: SimpleIdentifier
+              staticElement: package:test/a.dart::@class::A::@constructor::named
+              staticType: null
+              token: named @27
+            element: package:test/a.dart::@class::A::@constructor::named
+            name: PrefixedIdentifier
+              identifier: SimpleIdentifier
+                staticElement: package:test/a.dart::@class::A
+                staticType: null
+                token: A @25
+              period: . @0
+              prefix: SimpleIdentifier
+                staticElement: self::@prefix::a
+                staticType: null
+                token: a @23
+              staticElement: package:test/a.dart::@class::A
+              staticType: null
+        constructors
+          synthetic @-1
+''');
   }
 
   test_invalid_annotation_unprefixed_constructor() async {
@@ -9879,29 +20545,32 @@
 @A.named
 class C {}
 ''');
-    checkElementText(
-        library,
-        r'''
-import 'package:test/a.dart';
-class C {
-}
-  metadata
-    Annotation
-      element: package:test/a.dart::@class::A::@constructor::named
-      name: PrefixedIdentifier
-        identifier: SimpleIdentifier
-          staticElement: package:test/a.dart::@class::A::@constructor::named
-          staticType: null
-          token: named
-        period: .
-        prefix: SimpleIdentifier
-          staticElement: package:test/a.dart::@class::A
-          staticType: null
-          token: A
-        staticElement: package:test/a.dart::@class::A::@constructor::named
-        staticType: null
-''',
-        withResolvedAst: true);
+    checkElementText(library, r'''
+library
+  imports
+    package:test/a.dart
+  definingUnit
+    classes
+      class C @32
+        metadata
+          Annotation
+            atSign.offset: 17
+            element: package:test/a.dart::@class::A::@constructor::named
+            name: PrefixedIdentifier
+              identifier: SimpleIdentifier
+                staticElement: package:test/a.dart::@class::A::@constructor::named
+                staticType: null
+                token: named @20
+              period: . @0
+              prefix: SimpleIdentifier
+                staticElement: package:test/a.dart::@class::A
+                staticType: null
+                token: A @18
+              staticElement: package:test/a.dart::@class::A::@constructor::named
+              staticType: null
+        constructors
+          synthetic @-1
+''');
   }
 
   test_invalid_importPrefix_asTypeArgument() async {
@@ -9912,10 +20581,25 @@
 }
 ''');
     checkElementText(library, r'''
-import 'dart:async' as ppp;
-class C {
-  List<dynamic> v;
-}
+library
+  imports
+    dart:async as ppp @23
+  definingUnit
+    classes
+      class C @34
+        fields
+          v @50
+            type: List<dynamic>
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get v @50
+            returnType: List<dynamic>
+          synthetic set v @50
+            parameters
+              requiredPositional _v @50
+                type: List<dynamic>
+            returnType: void
 ''');
   }
 
@@ -9928,10 +20612,22 @@
 foo([p = V]) {}
 ''');
     checkElementText(library, r'''
-import 'a.dart';
-import 'b.dart';
-dynamic foo([dynamic p =
-        V/*location: null*/]) {}
+library
+  imports
+    a.dart
+    b.dart
+  definingUnit
+    functions
+      foo @34
+        parameters
+          optionalPositional p @39
+            type: dynamic
+            constantInitializer
+              SimpleIdentifier
+                staticElement: <null>
+                staticType: dynamic
+                token: V @-1
+        returnType: dynamic
 ''');
   }
 
@@ -9947,9 +20643,21 @@
 foo([p = V]) {}
 ''');
     checkElementText(library, r'''
-import 'c.dart';
-dynamic foo([dynamic p =
-        V/*location: a.dart;V*/]) {}
+library
+  imports
+    c.dart
+  definingUnit
+    functions
+      foo @17
+        parameters
+          optionalPositional p @22
+            type: dynamic
+            constantInitializer
+              SimpleIdentifier
+                staticElement: a.dart::@function::V
+                staticType: dynamic Function()
+                token: V @-1
+        returnType: dynamic
 ''');
   }
 
@@ -9960,10 +20668,32 @@
 var V;
 ''');
     checkElementText(library, r'''
-dynamic V;
-dynamic foo([dynamic p =
-        V/*location: test.dart;V?*/]) {}
-dynamic V() {}
+library
+  definingUnit
+    topLevelVariables
+      static V @27
+        type: dynamic
+    accessors
+      synthetic static get V @27
+        returnType: dynamic
+      synthetic static set V @27
+        parameters
+          requiredPositional _V @27
+            type: dynamic
+        returnType: void
+    functions
+      foo @0
+        parameters
+          optionalPositional p @5
+            type: dynamic
+            constantInitializer
+              SimpleIdentifier
+                staticElement: self::@getter::V
+                staticType: dynamic
+                token: V @-1
+        returnType: dynamic
+      V @16
+        returnType: dynamic
 ''');
   }
 
@@ -9975,10 +20705,30 @@
 }
 ''');
     checkElementText(library, r'''
-class C {
-  int foo;
-  void set bar(final dynamic this.foo) {}
-}
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          foo @16
+            type: int
+          synthetic bar @-1
+            type: dynamic
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get foo @16
+            returnType: int
+          synthetic set foo @16
+            parameters
+              requiredPositional _foo @16
+                type: int
+            returnType: void
+          set bar @32
+            parameters
+              requiredPositional final this.foo @41
+                type: dynamic
+            returnType: void
 ''');
   }
 
@@ -9989,9 +20739,21 @@
 }
 ''');
     checkElementText(library, r'''
-class C {
-  void set x(final dynamic this.x) {}
-}
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          synthetic x @-1
+            type: dynamic
+        constructors
+          synthetic @-1
+        accessors
+          set x @16
+            parameters
+              requiredPositional final this.x @23
+                type: dynamic
+            returnType: void
 ''');
   }
 
@@ -10014,26 +20776,30 @@
 part ':[invaliduri]';
 ''');
     checkElementText(library, r'''
-import '<unresolved>';
-import '<unresolved>';
-import 'a1.dart';
-import '<unresolved>';
-import '<unresolved>';
-export '<unresolved>';
-export '<unresolved>';
-export 'a2.dart';
-export '<unresolved>';
-export '<unresolved>';
-part 'a3.dart';
---------------------
-unit: a3.dart
-
+library
+  imports
+    <unresolved>
+    <unresolved>
+    a1.dart
+    <unresolved>
+    <unresolved>
+  exports
+    <unresolved>
+    <unresolved>
+    a2.dart
+    <unresolved>
+    <unresolved>
+  definingUnit
+  parts
+    a3.dart
 ''');
   }
 
   test_library() async {
     var library = await checkLibrary('');
     checkElementText(library, r'''
+library
+  definingUnit
 ''');
   }
 
@@ -10044,9 +20810,11 @@
 library test;
 ''');
     checkElementText(library, r'''
-/// aaa
-/// bbb
-library test;
+library
+  name: test
+  nameOffset: 24
+  documentationComment: /// aaa\n/// bbb
+  definingUnit
 ''');
   }
 
@@ -10058,25 +20826,31 @@
  */
 library test;''');
     checkElementText(library, r'''
-/**
- * aaa
- * bbb
- */
-library test;
+library
+  name: test
+  nameOffset: 30
+  documentationComment: /**\n * aaa\n * bbb\n */
+  definingUnit
 ''');
   }
 
   test_library_name_with_spaces() async {
     var library = await checkLibrary('library foo . bar ;');
     checkElementText(library, r'''
-library foo.bar;
+library
+  name: foo.bar
+  nameOffset: 8
+  definingUnit
 ''');
   }
 
   test_library_named() async {
     var library = await checkLibrary('library foo.bar;');
     checkElementText(library, r'''
-library foo.bar;
+library
+  name: foo.bar
+  nameOffset: 8
+  definingUnit
 ''');
   }
 
@@ -10090,7 +20864,11 @@
 }
 ''');
     checkElementText(library, r'''
-dynamic f() {}
+library
+  definingUnit
+    functions
+      f @0
+        returnType: dynamic
 ''');
   }
 
@@ -10103,9 +20881,12 @@
 }
 ''');
     checkElementText(library, r'''
-class C {
-  C();
-}
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          @12
 ''');
   }
 
@@ -10118,9 +20899,15 @@
 }
 ''');
     checkElementText(library, r'''
-class C {
-  dynamic m() {}
-}
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          synthetic @-1
+        methods
+          m @12
+            returnType: dynamic
 ''');
   }
 
@@ -10131,7 +20918,14 @@
 }
 ''');
     checkElementText(library, r'''
-dynamic get g {}
+library
+  definingUnit
+    topLevelVariables
+      synthetic static g @-1
+        type: dynamic
+    accessors
+      get g @4
+        returnType: dynamic
 ''');
   }
 
@@ -10148,9 +20942,12 @@
 }
 ''', allowErrors: true);
     checkElementText(library, r'''
-class C {
-  C();
-}
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          @12
 ''');
   }
 
@@ -10167,9 +20964,15 @@
 }
 ''', allowErrors: true);
     checkElementText(library, r'''
-class C {
-  dynamic m() {}
-}
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          synthetic @-1
+        methods
+          m @12
+            returnType: dynamic
 ''');
   }
 
@@ -10184,15 +20987,23 @@
 }
 ''', allowErrors: true);
     checkElementText(library, r'''
-dynamic main() {}
+library
+  definingUnit
+    functions
+      main @0
+        returnType: dynamic
 ''');
   }
 
   test_main_class() async {
     var library = await checkLibrary('class main {}');
     checkElementText(library, r'''
-class main {
-}
+library
+  definingUnit
+    classes
+      class main @6
+        constructors
+          synthetic @-1
 ''');
   }
 
@@ -10200,13 +21011,27 @@
     var library =
         await checkLibrary('class main = C with D; class C {} class D {}');
     checkElementText(library, r'''
-class alias main extends C with D {
-  synthetic main() : super();
-}
-class C {
-}
-class D {
-}
+library
+  definingUnit
+    classes
+      class alias main @6
+        supertype: C
+        mixins
+          D
+        constructors
+          synthetic @-1
+            constantInitializers
+              SuperConstructorInvocation
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticElement: self::@class::C::@constructor::•
+      class C @29
+        constructors
+          synthetic @-1
+      class D @40
+        constructors
+          synthetic @-1
 ''');
   }
 
@@ -10214,7 +21039,10 @@
     addLibrarySource('/a.dart', 'class main = C with D; class C {} class D {}');
     var library = await checkLibrary('export "a.dart";');
     checkElementText(library, r'''
-export 'a.dart';
+library
+  exports
+    a.dart
+  definingUnit
 ''');
   }
 
@@ -10222,14 +21050,24 @@
     addLibrarySource('/a.dart', 'class main {}');
     var library = await checkLibrary('export "a.dart";');
     checkElementText(library, r'''
-export 'a.dart';
+library
+  exports
+    a.dart
+  definingUnit
 ''');
   }
 
   test_main_getter() async {
     var library = await checkLibrary('get main => null;');
     checkElementText(library, r'''
-dynamic get main {}
+library
+  definingUnit
+    topLevelVariables
+      synthetic static main @-1
+        type: dynamic
+    accessors
+      get main @4
+        returnType: dynamic
 ''');
   }
 
@@ -10237,14 +21075,23 @@
     addLibrarySource('/a.dart', 'get main => null;');
     var library = await checkLibrary('export "a.dart";');
     checkElementText(library, r'''
-export 'a.dart';
+library
+  exports
+    a.dart
+  definingUnit
 ''');
   }
 
   test_main_typedef() async {
     var library = await checkLibrary('typedef main();');
     checkElementText(library, r'''
-typedef main = dynamic Function();
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased main @8
+        aliasedType: dynamic Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: dynamic
 ''');
   }
 
@@ -10252,14 +21099,29 @@
     addLibrarySource('/a.dart', 'typedef main();');
     var library = await checkLibrary('export "a.dart";');
     checkElementText(library, r'''
-export 'a.dart';
+library
+  exports
+    a.dart
+  definingUnit
 ''');
   }
 
   test_main_variable() async {
     var library = await checkLibrary('var main;');
     checkElementText(library, r'''
-dynamic main;
+library
+  definingUnit
+    topLevelVariables
+      static main @4
+        type: dynamic
+    accessors
+      synthetic static get main @4
+        returnType: dynamic
+      synthetic static set main @4
+        parameters
+          requiredPositional _main @4
+            type: dynamic
+        returnType: void
 ''');
   }
 
@@ -10267,7 +21129,10 @@
     addLibrarySource('/a.dart', 'var main;');
     var library = await checkLibrary('export "a.dart";');
     checkElementText(library, r'''
-export 'a.dart';
+library
+  exports
+    a.dart
+  definingUnit
 ''');
   }
 
@@ -10279,10 +21144,17 @@
 }
 ''');
     checkElementText(library, r'''
-import 'dart:async';
-class C {
-  Future<dynamic> f() async {}
-}
+library
+  imports
+    dart:async
+  definingUnit
+    classes
+      class C @27
+        constructors
+          synthetic @-1
+        methods
+          f @40 async
+            returnType: Future<dynamic>
 ''');
   }
 
@@ -10294,10 +21166,17 @@
 }
 ''');
     checkElementText(library, r'''
-import 'dart:async';
-class C {
-  Stream<dynamic> f() async* {}
-}
+library
+  imports
+    dart:async
+  definingUnit
+    classes
+      class C @27
+        constructors
+          synthetic @-1
+        methods
+          f @40 async*
+            returnType: Stream<dynamic>
 ''');
   }
 
@@ -10310,9 +21189,15 @@
 }
 ''');
     checkElementText(library, r'''
-class C {
-  Iterable<int> f() sync* {}
-}
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          synthetic @-1
+        methods
+          f @26 sync*
+            returnType: Iterable<int>
 ''');
   }
 
@@ -10329,26 +21214,43 @@
         as FieldElement;
     expect(x.metadata, hasLength(1));
     // Check details.
-    checkElementText(
-        library,
-        r'''
-class C {
-  int x;
-    metadata
-      Annotation
-        element: self::@getter::a
-        name: SimpleIdentifier
-          staticElement: self::@getter::a
-          staticType: null
-          token: a
-}
-const int a;
-  constantInitializer
-    IntegerLiteral
-      literal: 0
-      staticType: int
-''',
-        withResolvedAst: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @19
+        fields
+          x @34
+            metadata
+              Annotation
+                atSign.offset: 25
+                element: self::@getter::a
+                name: SimpleIdentifier
+                  staticElement: self::@getter::a
+                  staticType: null
+                  token: a @26
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get x @34
+            returnType: int
+          synthetic set x @34
+            parameters
+              requiredPositional _x @34
+                type: int
+            returnType: void
+    topLevelVariables
+      static const a @6
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 0 @10
+            staticType: int
+    accessors
+      synthetic static get a @6
+        returnType: int
+''');
   }
 
   test_metadata_class_scope() async {
@@ -10362,49 +21264,64 @@
   void bar() {}
 }
 ''');
-    checkElementText(
-        library,
-        r'''
-class C {
-  static const int foo;
-    constantInitializer
-      IntegerLiteral
-        literal: 1
-        staticType: int
-  void bar() {}
-    metadata
-      Annotation
-        element: self::@class::C::@getter::foo
-        name: SimpleIdentifier
-          staticElement: self::@class::C::@getter::foo
-          staticType: null
-          token: foo
-}
-  metadata
-    Annotation
-      element: self::@getter::foo
-      name: SimpleIdentifier
-        staticElement: self::@getter::foo
-        staticType: null
-        token: foo
-  typeParameters
-    T
-      bound: null
-      defaultType: dynamic
-      metadata
-        Annotation
-          element: self::@getter::foo
-          name: SimpleIdentifier
-            staticElement: self::@getter::foo
-            staticType: null
-            token: foo
-const int foo;
-  constantInitializer
-    IntegerLiteral
-      literal: 0
-      staticType: int
-''',
-        withResolvedAst: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @27
+        metadata
+          Annotation
+            atSign.offset: 16
+            element: self::@getter::foo
+            name: SimpleIdentifier
+              staticElement: self::@getter::foo
+              staticType: null
+              token: foo @17
+        typeParameters
+          covariant T @34
+            defaultType: dynamic
+            metadata
+              Annotation
+                atSign.offset: 29
+                element: self::@getter::foo
+                name: SimpleIdentifier
+                  staticElement: self::@getter::foo
+                  staticType: null
+                  token: foo @30
+        fields
+          static const foo @54
+            type: int
+            constantInitializer
+              IntegerLiteral
+                literal: 1 @60
+                staticType: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic static get foo @54
+            returnType: int
+        methods
+          bar @77
+            metadata
+              Annotation
+                atSign.offset: 65
+                element: self::@class::C::@getter::foo
+                name: SimpleIdentifier
+                  staticElement: self::@class::C::@getter::foo
+                  staticType: null
+                  token: foo @66
+            returnType: void
+    topLevelVariables
+      static const foo @6
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 0 @12
+            staticType: int
+    accessors
+      synthetic static get foo @6
+        returnType: int
+''');
   }
 
   test_metadata_classDeclaration() async {
@@ -10415,14 +21332,45 @@
 @b
 class C {}''');
     checkElementText(library, r'''
-@
-        a/*location: test.dart;a?*/
-@
-        b/*location: test.dart;b?*/
-class C {
-}
-const dynamic a = null;
-const dynamic b = null;
+library
+  definingUnit
+    classes
+      class C @44
+        metadata
+          Annotation
+            atSign.offset: 32
+            element: self::@getter::a
+            name: SimpleIdentifier
+              staticElement: self::@getter::a
+              staticType: null
+              token: a @33
+          Annotation
+            atSign.offset: 35
+            element: self::@getter::b
+            name: SimpleIdentifier
+              staticElement: self::@getter::b
+              staticType: null
+              token: b @36
+        constructors
+          synthetic @-1
+    topLevelVariables
+      static const a @6
+        type: dynamic
+        constantInitializer
+          NullLiteral
+            literal: null @0
+            staticType: null
+      static const b @22
+        type: dynamic
+        constantInitializer
+          NullLiteral
+            literal: null @0
+            staticType: null
+    accessors
+      synthetic static get a @6
+        returnType: dynamic
+      synthetic static get b @22
+        returnType: dynamic
 ''');
   }
 
@@ -10430,16 +21378,45 @@
     var library = await checkLibrary(
         'const a = null; @a class C = D with E; class D {} class E {}');
     checkElementText(library, r'''
-@
-        a/*location: test.dart;a?*/
-class alias C extends D with E {
-  synthetic C() : super();
-}
-class D {
-}
-class E {
-}
-const dynamic a = null;
+library
+  definingUnit
+    classes
+      class alias C @25
+        metadata
+          Annotation
+            atSign.offset: 16
+            element: self::@getter::a
+            name: SimpleIdentifier
+              staticElement: self::@getter::a
+              staticType: null
+              token: a @17
+        supertype: D
+        mixins
+          E
+        constructors
+          synthetic @-1
+            constantInitializers
+              SuperConstructorInvocation
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticElement: self::@class::D::@constructor::•
+      class D @45
+        constructors
+          synthetic @-1
+      class E @56
+        constructors
+          synthetic @-1
+    topLevelVariables
+      static const a @6
+        type: dynamic
+        constantInitializer
+          NullLiteral
+            literal: null @0
+            staticType: null
+    accessors
+      synthetic static get a @6
+        returnType: dynamic
 ''');
   }
 
@@ -10452,36 +21429,45 @@
 @A.named(0)
 class C {}
 ''');
-    checkElementText(
-        library,
-        r'''
-class A {
-  const A.named(int _);
-}
-class C {
-}
-  metadata
-    Annotation
-      arguments: ArgumentList
-        arguments
-          IntegerLiteral
-            literal: 0
-            staticType: int
-      element: self::@class::A::@constructor::named
-      name: PrefixedIdentifier
-        identifier: SimpleIdentifier
-          staticElement: self::@class::A::@constructor::named
-          staticType: null
-          token: named
-        period: .
-        prefix: SimpleIdentifier
-          staticElement: self::@class::A
-          staticType: null
-          token: A
-        staticElement: self::@class::A::@constructor::named
-        staticType: null
-''',
-        withResolvedAst: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          const named @20
+            periodOffset: 19
+            nameEnd: 25
+            parameters
+              requiredPositional _ @30
+                type: int
+      class C @54
+        metadata
+          Annotation
+            arguments: ArgumentList
+              arguments
+                IntegerLiteral
+                  literal: 0 @45
+                  staticType: int
+              leftParenthesis: ( @44
+              rightParenthesis: ) @46
+            atSign.offset: 36
+            element: self::@class::A::@constructor::named
+            name: PrefixedIdentifier
+              identifier: SimpleIdentifier
+                staticElement: self::@class::A::@constructor::named
+                staticType: null
+                token: named @39
+              period: . @0
+              prefix: SimpleIdentifier
+                staticElement: self::@class::A
+                staticType: null
+                token: A @37
+              staticElement: self::@class::A::@constructor::named
+              staticType: null
+        constructors
+          synthetic @-1
+''');
   }
 
   test_metadata_constructor_call_named_generic_inference() async {
@@ -10494,46 +21480,54 @@
 @A.named(0)
 class C {}
 ''');
-    checkElementText(
-        library,
-        r'''
-class A {
-  const A.named(T _);
-}
-  typeParameters
-    T
-      bound: null
-      defaultType: dynamic
-class C {
-}
-  metadata
-    Annotation
-      arguments: ArgumentList
-        arguments
-          IntegerLiteral
-            literal: 0
-            staticType: int
-      element: ConstructorMember
-        base: self::@class::A::@constructor::named
-        substitution: {T: int}
-      name: PrefixedIdentifier
-        identifier: SimpleIdentifier
-          staticElement: ConstructorMember
-            base: self::@class::A::@constructor::named
-            substitution: {T: int}
-          staticType: null
-          token: named
-        period: .
-        prefix: SimpleIdentifier
-          staticElement: self::@class::A
-          staticType: null
-          token: A
-        staticElement: ConstructorMember
-          base: self::@class::A::@constructor::named
-          substitution: {T: int}
-        staticType: null
-''',
-        withResolvedAst: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        constructors
+          const named @23
+            periodOffset: 22
+            nameEnd: 28
+            parameters
+              requiredPositional _ @31
+                type: T
+      class C @56
+        metadata
+          Annotation
+            arguments: ArgumentList
+              arguments
+                IntegerLiteral
+                  literal: 0 @47
+                  staticType: int
+              leftParenthesis: ( @46
+              rightParenthesis: ) @48
+            atSign.offset: 38
+            element: ConstructorMember
+              base: self::@class::A::@constructor::named
+              substitution: {T: int}
+            name: PrefixedIdentifier
+              identifier: SimpleIdentifier
+                staticElement: ConstructorMember
+                  base: self::@class::A::@constructor::named
+                  substitution: {T: int}
+                staticType: null
+                token: named @41
+              period: . @0
+              prefix: SimpleIdentifier
+                staticElement: self::@class::A
+                staticType: null
+                token: A @39
+              staticElement: ConstructorMember
+                base: self::@class::A::@constructor::named
+                substitution: {T: int}
+              staticType: null
+        constructors
+          synthetic @-1
+''');
   }
 
   test_metadata_constructor_call_named_generic_typeArguments() async {
@@ -10546,44 +21540,51 @@
 @A<int>.named()
 class C {}
 ''');
-    checkElementText(
-        library,
-        r'''
-class A {
-  const A.named();
-}
-  typeParameters
-    T
-      bound: null
-      defaultType: dynamic
-class C {
-}
-  metadata
-    Annotation
-      arguments: ArgumentList
-      constructorName: SimpleIdentifier
-        staticElement: ConstructorMember
-          base: self::@class::A::@constructor::named
-          substitution: {T: int}
-        staticType: null
-        token: named
-      element: ConstructorMember
-        base: self::@class::A::@constructor::named
-        substitution: {T: int}
-      name: SimpleIdentifier
-        staticElement: self::@class::A
-        staticType: null
-        token: A
-      typeArguments: TypeArgumentList
-        arguments
-          TypeName
-            name: SimpleIdentifier
-              staticElement: dart:core::@class::int
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        constructors
+          const named @23
+            periodOffset: 22
+            nameEnd: 28
+      class C @57
+        metadata
+          Annotation
+            arguments: ArgumentList
+              leftParenthesis: ( @48
+              rightParenthesis: ) @49
+            atSign.offset: 35
+            constructorName: SimpleIdentifier
+              staticElement: ConstructorMember
+                base: self::@class::A::@constructor::named
+                substitution: {T: int}
               staticType: null
-              token: int
-            type: int
-''',
-        withResolvedAst: true);
+              token: named @43
+            element: ConstructorMember
+              base: self::@class::A::@constructor::named
+              substitution: {T: int}
+            name: SimpleIdentifier
+              staticElement: self::@class::A
+              staticType: null
+              token: A @36
+            typeArguments: TypeArgumentList
+              arguments
+                TypeName
+                  name: SimpleIdentifier
+                    staticElement: dart:core::@class::int
+                    staticType: null
+                    token: int @38
+                  type: int
+              leftBracket: < @0
+              rightBracket: > @0
+        constructors
+          synthetic @-1
+''');
   }
 
   test_metadata_constructor_call_named_generic_typeArguments_disabledGenericMetadata() async {
@@ -10595,44 +21596,51 @@
 @A<int>.named()
 class C {}
 ''');
-    checkElementText(
-        library,
-        r'''
-class A {
-  const A.named();
-}
-  typeParameters
-    T
-      bound: null
-      defaultType: dynamic
-class C {
-}
-  metadata
-    Annotation
-      arguments: ArgumentList
-      constructorName: SimpleIdentifier
-        staticElement: ConstructorMember
-          base: self::@class::A::@constructor::named
-          substitution: {T: dynamic}
-        staticType: null
-        token: named
-      element: ConstructorMember
-        base: self::@class::A::@constructor::named
-        substitution: {T: dynamic}
-      name: SimpleIdentifier
-        staticElement: self::@class::A
-        staticType: null
-        token: A
-      typeArguments: TypeArgumentList
-        arguments
-          TypeName
-            name: SimpleIdentifier
-              staticElement: dart:core::@class::int
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        constructors
+          const named @23
+            periodOffset: 22
+            nameEnd: 28
+      class C @57
+        metadata
+          Annotation
+            arguments: ArgumentList
+              leftParenthesis: ( @48
+              rightParenthesis: ) @49
+            atSign.offset: 35
+            constructorName: SimpleIdentifier
+              staticElement: ConstructorMember
+                base: self::@class::A::@constructor::named
+                substitution: {T: dynamic}
               staticType: null
-              token: int
-            type: int
-''',
-        withResolvedAst: true);
+              token: named @43
+            element: ConstructorMember
+              base: self::@class::A::@constructor::named
+              substitution: {T: dynamic}
+            name: SimpleIdentifier
+              staticElement: self::@class::A
+              staticType: null
+              token: A @36
+            typeArguments: TypeArgumentList
+              arguments
+                TypeName
+                  name: SimpleIdentifier
+                    staticElement: dart:core::@class::int
+                    staticType: null
+                    token: int @38
+                  type: int
+              leftBracket: < @0
+              rightBracket: > @0
+        constructors
+          synthetic @-1
+''');
   }
 
   test_metadata_constructor_call_named_prefixed() async {
@@ -10647,38 +21655,43 @@
 @foo.A.named(0)
 class C {}
 ''');
-    checkElementText(
-        library,
-        r'''
-import 'package:test/foo.dart' as foo;
-class C {
-}
-  metadata
-    Annotation
-      arguments: ArgumentList
-        arguments
-          IntegerLiteral
-            literal: 0
-            staticType: int
-      constructorName: SimpleIdentifier
-        staticElement: package:test/foo.dart::@class::A::@constructor::named
-        staticType: null
-        token: named
-      element: package:test/foo.dart::@class::A::@constructor::named
-      name: PrefixedIdentifier
-        identifier: SimpleIdentifier
-          staticElement: package:test/foo.dart::@class::A
-          staticType: null
-          token: A
-        period: .
-        prefix: SimpleIdentifier
-          staticElement: self::@prefix::foo
-          staticType: null
-          token: foo
-        staticElement: package:test/foo.dart::@class::A
-        staticType: null
-''',
-        withResolvedAst: true);
+    checkElementText(library, r'''
+library
+  imports
+    package:test/foo.dart as foo @21
+  definingUnit
+    classes
+      class C @48
+        metadata
+          Annotation
+            arguments: ArgumentList
+              arguments
+                IntegerLiteral
+                  literal: 0 @39
+                  staticType: int
+              leftParenthesis: ( @38
+              rightParenthesis: ) @40
+            atSign.offset: 26
+            constructorName: SimpleIdentifier
+              staticElement: package:test/foo.dart::@class::A::@constructor::named
+              staticType: null
+              token: named @33
+            element: package:test/foo.dart::@class::A::@constructor::named
+            name: PrefixedIdentifier
+              identifier: SimpleIdentifier
+                staticElement: package:test/foo.dart::@class::A
+                staticType: null
+                token: A @31
+              period: . @0
+              prefix: SimpleIdentifier
+                staticElement: self::@prefix::foo
+                staticType: null
+                token: foo @27
+              staticElement: package:test/foo.dart::@class::A
+              staticType: null
+        constructors
+          synthetic @-1
+''');
   }
 
   test_metadata_constructor_call_named_prefixed_generic_inference() async {
@@ -10694,42 +21707,47 @@
 @foo.A.named(0)
 class C {}
 ''');
-    checkElementText(
-        library,
-        r'''
-import 'package:test/foo.dart' as foo;
-class C {
-}
-  metadata
-    Annotation
-      arguments: ArgumentList
-        arguments
-          IntegerLiteral
-            literal: 0
-            staticType: int
-      constructorName: SimpleIdentifier
-        staticElement: ConstructorMember
-          base: package:test/foo.dart::@class::A::@constructor::named
-          substitution: {T: int}
-        staticType: null
-        token: named
-      element: ConstructorMember
-        base: package:test/foo.dart::@class::A::@constructor::named
-        substitution: {T: int}
-      name: PrefixedIdentifier
-        identifier: SimpleIdentifier
-          staticElement: package:test/foo.dart::@class::A
-          staticType: null
-          token: A
-        period: .
-        prefix: SimpleIdentifier
-          staticElement: self::@prefix::foo
-          staticType: null
-          token: foo
-        staticElement: package:test/foo.dart::@class::A
-        staticType: null
-''',
-        withResolvedAst: true);
+    checkElementText(library, r'''
+library
+  imports
+    package:test/foo.dart as foo @21
+  definingUnit
+    classes
+      class C @48
+        metadata
+          Annotation
+            arguments: ArgumentList
+              arguments
+                IntegerLiteral
+                  literal: 0 @39
+                  staticType: int
+              leftParenthesis: ( @38
+              rightParenthesis: ) @40
+            atSign.offset: 26
+            constructorName: SimpleIdentifier
+              staticElement: ConstructorMember
+                base: package:test/foo.dart::@class::A::@constructor::named
+                substitution: {T: int}
+              staticType: null
+              token: named @33
+            element: ConstructorMember
+              base: package:test/foo.dart::@class::A::@constructor::named
+              substitution: {T: int}
+            name: PrefixedIdentifier
+              identifier: SimpleIdentifier
+                staticElement: package:test/foo.dart::@class::A
+                staticType: null
+                token: A @31
+              period: . @0
+              prefix: SimpleIdentifier
+                staticElement: self::@prefix::foo
+                staticType: null
+                token: foo @27
+              staticElement: package:test/foo.dart::@class::A
+              staticType: null
+        constructors
+          synthetic @-1
+''');
   }
 
   test_metadata_constructor_call_named_prefixed_generic_typeArguments() async {
@@ -10745,46 +21763,53 @@
 @foo.A<int>.named()
 class C {}
 ''');
-    checkElementText(
-        library,
-        r'''
-import 'package:test/foo.dart' as foo;
-class C {
-}
-  metadata
-    Annotation
-      arguments: ArgumentList
-      constructorName: SimpleIdentifier
-        staticElement: ConstructorMember
-          base: package:test/foo.dart::@class::A::@constructor::named
-          substitution: {T: int}
-        staticType: null
-        token: named
-      element: ConstructorMember
-        base: package:test/foo.dart::@class::A::@constructor::named
-        substitution: {T: int}
-      name: PrefixedIdentifier
-        identifier: SimpleIdentifier
-          staticElement: package:test/foo.dart::@class::A
-          staticType: null
-          token: A
-        period: .
-        prefix: SimpleIdentifier
-          staticElement: self::@prefix::foo
-          staticType: null
-          token: foo
-        staticElement: package:test/foo.dart::@class::A
-        staticType: null
-      typeArguments: TypeArgumentList
-        arguments
-          TypeName
-            name: SimpleIdentifier
-              staticElement: dart:core::@class::int
+    checkElementText(library, r'''
+library
+  imports
+    package:test/foo.dart as foo @21
+  definingUnit
+    classes
+      class C @52
+        metadata
+          Annotation
+            arguments: ArgumentList
+              leftParenthesis: ( @43
+              rightParenthesis: ) @44
+            atSign.offset: 26
+            constructorName: SimpleIdentifier
+              staticElement: ConstructorMember
+                base: package:test/foo.dart::@class::A::@constructor::named
+                substitution: {T: int}
               staticType: null
-              token: int
-            type: int
-''',
-        withResolvedAst: true);
+              token: named @38
+            element: ConstructorMember
+              base: package:test/foo.dart::@class::A::@constructor::named
+              substitution: {T: int}
+            name: PrefixedIdentifier
+              identifier: SimpleIdentifier
+                staticElement: package:test/foo.dart::@class::A
+                staticType: null
+                token: A @31
+              period: . @0
+              prefix: SimpleIdentifier
+                staticElement: self::@prefix::foo
+                staticType: null
+                token: foo @27
+              staticElement: package:test/foo.dart::@class::A
+              staticType: null
+            typeArguments: TypeArgumentList
+              arguments
+                TypeName
+                  name: SimpleIdentifier
+                    staticElement: dart:core::@class::int
+                    staticType: null
+                    token: int @33
+                  type: int
+              leftBracket: < @0
+              rightBracket: > @0
+        constructors
+          synthetic @-1
+''');
   }
 
   test_metadata_constructor_call_named_synthetic_ofClassAlias_generic() async {
@@ -10800,55 +21825,69 @@
 @C.named()
 class D {}
 ''');
-    checkElementText(
-        library,
-        r'''
-class A {
-  const A.named();
-}
-class alias C extends A with B {
-  synthetic const C.named();
-    constantInitializers
-      SuperConstructorInvocation
-        argumentList: ArgumentList
-        constructorName: SimpleIdentifier
-          staticElement: self::@class::A::@constructor::named
-          staticType: null
-          token: named
-        staticElement: self::@class::A::@constructor::named
-}
-  typeParameters
-    T
-      bound: null
-      defaultType: dynamic
-class D {
-}
-  metadata
-    Annotation
-      arguments: ArgumentList
-      element: ConstructorMember
-        base: self::@class::C::@constructor::named
-        substitution: {T: dynamic}
-      name: PrefixedIdentifier
-        identifier: SimpleIdentifier
-          staticElement: ConstructorMember
-            base: self::@class::C::@constructor::named
-            substitution: {T: dynamic}
-          staticType: null
-          token: named
-        period: .
-        prefix: SimpleIdentifier
-          staticElement: self::@class::C
-          staticType: null
-          token: C
-        staticElement: ConstructorMember
-          base: self::@class::C::@constructor::named
-          substitution: {T: dynamic}
-        staticType: null
-mixin B on Object {
-}
-''',
-        withResolvedAst: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          const named @20
+            periodOffset: 19
+            nameEnd: 25
+      class alias C @50
+        typeParameters
+          covariant T @52
+            defaultType: dynamic
+        supertype: A
+        mixins
+          B
+        constructors
+          synthetic const named @-1
+            constantInitializers
+              SuperConstructorInvocation
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                constructorName: SimpleIdentifier
+                  staticElement: self::@class::A::@constructor::named
+                  staticType: null
+                  token: named @-1
+                staticElement: self::@class::A::@constructor::named
+      class D @85
+        metadata
+          Annotation
+            arguments: ArgumentList
+              leftParenthesis: ( @76
+              rightParenthesis: ) @77
+            atSign.offset: 68
+            element: ConstructorMember
+              base: self::@class::C::@constructor::named
+              substitution: {T: dynamic}
+            name: PrefixedIdentifier
+              identifier: SimpleIdentifier
+                staticElement: ConstructorMember
+                  base: self::@class::C::@constructor::named
+                  substitution: {T: dynamic}
+                staticType: null
+                token: named @71
+              period: . @0
+              prefix: SimpleIdentifier
+                staticElement: self::@class::C
+                staticType: null
+                token: C @69
+              staticElement: ConstructorMember
+                base: self::@class::C::@constructor::named
+                substitution: {T: dynamic}
+              staticType: null
+        constructors
+          synthetic @-1
+    mixins
+      mixin B @38
+        superclassConstraints
+          Object
+        constructors
+          synthetic @-1
+''');
   }
 
   test_metadata_constructor_call_unnamed() async {
@@ -10860,28 +21899,35 @@
 @A(0)
 class C {}
 ''');
-    checkElementText(
-        library,
-        r'''
-class A {
-  const A(int _);
-}
-class C {
-}
-  metadata
-    Annotation
-      arguments: ArgumentList
-        arguments
-          IntegerLiteral
-            literal: 0
-            staticType: int
-      element: self::@class::A::@constructor::•
-      name: SimpleIdentifier
-        staticElement: self::@class::A
-        staticType: null
-        token: A
-''',
-        withResolvedAst: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          const @18
+            parameters
+              requiredPositional _ @24
+                type: int
+      class C @42
+        metadata
+          Annotation
+            arguments: ArgumentList
+              arguments
+                IntegerLiteral
+                  literal: 0 @33
+                  staticType: int
+              leftParenthesis: ( @32
+              rightParenthesis: ) @34
+            atSign.offset: 30
+            element: self::@class::A::@constructor::•
+            name: SimpleIdentifier
+              staticElement: self::@class::A
+              staticType: null
+              token: A @31
+        constructors
+          synthetic @-1
+''');
   }
 
   test_metadata_constructor_call_unnamed_generic_inference() async {
@@ -10894,34 +21940,40 @@
 @A(0)
 class C {}
 ''');
-    checkElementText(
-        library,
-        r'''
-class A {
-  const A(T _);
-}
-  typeParameters
-    T
-      bound: null
-      defaultType: dynamic
-class C {
-}
-  metadata
-    Annotation
-      arguments: ArgumentList
-        arguments
-          IntegerLiteral
-            literal: 0
-            staticType: int
-      element: ConstructorMember
-        base: self::@class::A::@constructor::•
-        substitution: {T: int}
-      name: SimpleIdentifier
-        staticElement: self::@class::A
-        staticType: null
-        token: A
-''',
-        withResolvedAst: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        constructors
+          const @21
+            parameters
+              requiredPositional _ @25
+                type: T
+      class C @44
+        metadata
+          Annotation
+            arguments: ArgumentList
+              arguments
+                IntegerLiteral
+                  literal: 0 @35
+                  staticType: int
+              leftParenthesis: ( @34
+              rightParenthesis: ) @36
+            atSign.offset: 32
+            element: ConstructorMember
+              base: self::@class::A::@constructor::•
+              substitution: {T: int}
+            name: SimpleIdentifier
+              staticElement: self::@class::A
+              staticType: null
+              token: A @33
+        constructors
+          synthetic @-1
+''');
   }
 
   test_metadata_constructor_call_unnamed_generic_typeArguments() async {
@@ -10934,38 +21986,43 @@
 @A<int>()
 class C {}
 ''');
-    checkElementText(
-        library,
-        r'''
-class A {
-  const A();
-}
-  typeParameters
-    T
-      bound: null
-      defaultType: dynamic
-class C {
-}
-  metadata
-    Annotation
-      arguments: ArgumentList
-      element: ConstructorMember
-        base: self::@class::A::@constructor::•
-        substitution: {T: int}
-      name: SimpleIdentifier
-        staticElement: self::@class::A
-        staticType: null
-        token: A
-      typeArguments: TypeArgumentList
-        arguments
-          TypeName
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        constructors
+          const @21
+      class C @45
+        metadata
+          Annotation
+            arguments: ArgumentList
+              leftParenthesis: ( @36
+              rightParenthesis: ) @37
+            atSign.offset: 29
+            element: ConstructorMember
+              base: self::@class::A::@constructor::•
+              substitution: {T: int}
             name: SimpleIdentifier
-              staticElement: dart:core::@class::int
+              staticElement: self::@class::A
               staticType: null
-              token: int
-            type: int
-''',
-        withResolvedAst: true);
+              token: A @30
+            typeArguments: TypeArgumentList
+              arguments
+                TypeName
+                  name: SimpleIdentifier
+                    staticElement: dart:core::@class::int
+                    staticType: null
+                    token: int @32
+                  type: int
+              leftBracket: < @0
+              rightBracket: > @0
+        constructors
+          synthetic @-1
+''');
   }
 
   test_metadata_constructor_call_unnamed_prefixed() async {
@@ -10973,34 +22030,39 @@
     addLibrarySource('/home/test/lib/foo.dart', 'class A { const A(_); }');
     var library =
         await checkLibrary('import "foo.dart" as foo; @foo.A(0) class C {}');
-    checkElementText(
-        library,
-        r'''
-import 'package:test/foo.dart' as foo;
-class C {
-}
-  metadata
-    Annotation
-      arguments: ArgumentList
-        arguments
-          IntegerLiteral
-            literal: 0
-            staticType: int
-      element: package:test/foo.dart::@class::A::@constructor::•
-      name: PrefixedIdentifier
-        identifier: SimpleIdentifier
-          staticElement: package:test/foo.dart::@class::A
-          staticType: null
-          token: A
-        period: .
-        prefix: SimpleIdentifier
-          staticElement: self::@prefix::foo
-          staticType: null
-          token: foo
-        staticElement: package:test/foo.dart::@class::A
-        staticType: null
-''',
-        withResolvedAst: true);
+    checkElementText(library, r'''
+library
+  imports
+    package:test/foo.dart as foo @21
+  definingUnit
+    classes
+      class C @42
+        metadata
+          Annotation
+            arguments: ArgumentList
+              arguments
+                IntegerLiteral
+                  literal: 0 @33
+                  staticType: int
+              leftParenthesis: ( @32
+              rightParenthesis: ) @34
+            atSign.offset: 26
+            element: package:test/foo.dart::@class::A::@constructor::•
+            name: PrefixedIdentifier
+              identifier: SimpleIdentifier
+                staticElement: package:test/foo.dart::@class::A
+                staticType: null
+                token: A @31
+              period: . @0
+              prefix: SimpleIdentifier
+                staticElement: self::@prefix::foo
+                staticType: null
+                token: foo @27
+              staticElement: package:test/foo.dart::@class::A
+              staticType: null
+        constructors
+          synthetic @-1
+''');
   }
 
   test_metadata_constructor_call_unnamed_prefixed_generic_inference() async {
@@ -11016,36 +22078,41 @@
 @foo.A(0)
 class C {}
 ''');
-    checkElementText(
-        library,
-        r'''
-import 'package:test/foo.dart' as foo;
-class C {
-}
-  metadata
-    Annotation
-      arguments: ArgumentList
-        arguments
-          IntegerLiteral
-            literal: 0
-            staticType: int
-      element: ConstructorMember
-        base: package:test/foo.dart::@class::A::@constructor::•
-        substitution: {T: int}
-      name: PrefixedIdentifier
-        identifier: SimpleIdentifier
-          staticElement: package:test/foo.dart::@class::A
-          staticType: null
-          token: A
-        period: .
-        prefix: SimpleIdentifier
-          staticElement: self::@prefix::foo
-          staticType: null
-          token: foo
-        staticElement: package:test/foo.dart::@class::A
-        staticType: null
-''',
-        withResolvedAst: true);
+    checkElementText(library, r'''
+library
+  imports
+    package:test/foo.dart as foo @21
+  definingUnit
+    classes
+      class C @42
+        metadata
+          Annotation
+            arguments: ArgumentList
+              arguments
+                IntegerLiteral
+                  literal: 0 @33
+                  staticType: int
+              leftParenthesis: ( @32
+              rightParenthesis: ) @34
+            atSign.offset: 26
+            element: ConstructorMember
+              base: package:test/foo.dart::@class::A::@constructor::•
+              substitution: {T: int}
+            name: PrefixedIdentifier
+              identifier: SimpleIdentifier
+                staticElement: package:test/foo.dart::@class::A
+                staticType: null
+                token: A @31
+              period: . @0
+              prefix: SimpleIdentifier
+                staticElement: self::@prefix::foo
+                staticType: null
+                token: foo @27
+              staticElement: package:test/foo.dart::@class::A
+              staticType: null
+        constructors
+          synthetic @-1
+''');
   }
 
   test_metadata_constructor_call_unnamed_prefixed_generic_typeArguments() async {
@@ -11061,40 +22128,47 @@
 @foo.A<int>()
 class C {}
 ''');
-    checkElementText(
-        library,
-        r'''
-import 'package:test/foo.dart' as foo;
-class C {
-}
-  metadata
-    Annotation
-      arguments: ArgumentList
-      element: ConstructorMember
-        base: package:test/foo.dart::@class::A::@constructor::•
-        substitution: {T: int}
-      name: PrefixedIdentifier
-        identifier: SimpleIdentifier
-          staticElement: package:test/foo.dart::@class::A
-          staticType: null
-          token: A
-        period: .
-        prefix: SimpleIdentifier
-          staticElement: self::@prefix::foo
-          staticType: null
-          token: foo
-        staticElement: package:test/foo.dart::@class::A
-        staticType: null
-      typeArguments: TypeArgumentList
-        arguments
-          TypeName
-            name: SimpleIdentifier
-              staticElement: dart:core::@class::int
+    checkElementText(library, r'''
+library
+  imports
+    package:test/foo.dart as foo @21
+  definingUnit
+    classes
+      class C @46
+        metadata
+          Annotation
+            arguments: ArgumentList
+              leftParenthesis: ( @37
+              rightParenthesis: ) @38
+            atSign.offset: 26
+            element: ConstructorMember
+              base: package:test/foo.dart::@class::A::@constructor::•
+              substitution: {T: int}
+            name: PrefixedIdentifier
+              identifier: SimpleIdentifier
+                staticElement: package:test/foo.dart::@class::A
+                staticType: null
+                token: A @31
+              period: . @0
+              prefix: SimpleIdentifier
+                staticElement: self::@prefix::foo
+                staticType: null
+                token: foo @27
+              staticElement: package:test/foo.dart::@class::A
               staticType: null
-              token: int
-            type: int
-''',
-        withResolvedAst: true);
+            typeArguments: TypeArgumentList
+              arguments
+                TypeName
+                  name: SimpleIdentifier
+                    staticElement: dart:core::@class::int
+                    staticType: null
+                    token: int @33
+                  type: int
+              leftBracket: < @0
+              rightBracket: > @0
+        constructors
+          synthetic @-1
+''');
   }
 
   test_metadata_constructor_call_unnamed_synthetic_ofClassAlias_generic() async {
@@ -11110,52 +22184,84 @@
 @C()
 class D {}
 ''');
-    checkElementText(
-        library,
-        r'''
-class A {
-  const A();
-}
-class alias C extends A with B {
-  synthetic const C();
-    constantInitializers
-      SuperConstructorInvocation
-        argumentList: ArgumentList
-        staticElement: self::@class::A::@constructor::•
-}
-  typeParameters
-    T
-      bound: null
-      defaultType: dynamic
-class D {
-}
-  metadata
-    Annotation
-      arguments: ArgumentList
-      element: ConstructorMember
-        base: self::@class::C::@constructor::•
-        substitution: {T: dynamic}
-      name: SimpleIdentifier
-        staticElement: self::@class::C
-        staticType: null
-        token: C
-mixin B on Object {
-}
-''',
-        withResolvedAst: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          const @18
+      class alias C @44
+        typeParameters
+          covariant T @46
+            defaultType: dynamic
+        supertype: A
+        mixins
+          B
+        constructors
+          synthetic const @-1
+            constantInitializers
+              SuperConstructorInvocation
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticElement: self::@class::A::@constructor::•
+      class D @73
+        metadata
+          Annotation
+            arguments: ArgumentList
+              leftParenthesis: ( @64
+              rightParenthesis: ) @65
+            atSign.offset: 62
+            element: ConstructorMember
+              base: self::@class::C::@constructor::•
+              substitution: {T: dynamic}
+            name: SimpleIdentifier
+              staticElement: self::@class::C
+              staticType: null
+              token: C @63
+        constructors
+          synthetic @-1
+    mixins
+      mixin B @32
+        superclassConstraints
+          Object
+        constructors
+          synthetic @-1
+''');
   }
 
   test_metadata_constructor_call_with_args() async {
     var library =
         await checkLibrary('class A { const A(x); } @A(null) class C {}');
     checkElementText(library, r'''
-class A {
-  const A(dynamic x);
-}
-@
-        A/*location: test.dart;A*/(null)
-class C {
-}
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          const @16
+            parameters
+              requiredPositional x @18
+                type: dynamic
+      class C @39
+        metadata
+          Annotation
+            arguments: ArgumentList
+              arguments
+                NullLiteral
+                  literal: null @0
+                  staticType: null
+              leftParenthesis: ( @26
+              rightParenthesis: ) @31
+            atSign.offset: 24
+            element: self::@class::A::@constructor::•
+            name: SimpleIdentifier
+              staticElement: self::@class::A
+              staticType: null
+              token: A @25
+        constructors
+          synthetic @-1
 ''');
   }
 
@@ -11163,52 +22269,108 @@
     var library =
         await checkLibrary('const a = null; class C { @a C.named(); }');
     checkElementText(library, r'''
-class C {
-  @
-        a/*location: test.dart;a?*/
-  C.named();
-}
-const dynamic a = null;
+library
+  definingUnit
+    classes
+      class C @22
+        constructors
+          named @31
+            metadata
+              Annotation
+                atSign.offset: 26
+                element: self::@getter::a
+                name: SimpleIdentifier
+                  staticElement: self::@getter::a
+                  staticType: null
+                  token: a @27
+            periodOffset: 30
+            nameEnd: 36
+    topLevelVariables
+      static const a @6
+        type: dynamic
+        constantInitializer
+          NullLiteral
+            literal: null @0
+            staticType: null
+    accessors
+      synthetic static get a @6
+        returnType: dynamic
 ''');
   }
 
   test_metadata_constructorDeclaration_unnamed() async {
     var library = await checkLibrary('const a = null; class C { @a C(); }');
     checkElementText(library, r'''
-class C {
-  @
-        a/*location: test.dart;a?*/
-  C();
-}
-const dynamic a = null;
+library
+  definingUnit
+    classes
+      class C @22
+        constructors
+          @29
+            metadata
+              Annotation
+                atSign.offset: 26
+                element: self::@getter::a
+                name: SimpleIdentifier
+                  staticElement: self::@getter::a
+                  staticType: null
+                  token: a @27
+    topLevelVariables
+      static const a @6
+        type: dynamic
+        constantInitializer
+          NullLiteral
+            literal: null @0
+            staticType: null
+    accessors
+      synthetic static get a @6
+        returnType: dynamic
 ''');
   }
 
   test_metadata_enumConstantDeclaration() async {
     var library = await checkLibrary('const a = 42; enum E { @a v }');
-    checkElementText(
-        library,
-        r'''
-enum E {
-  synthetic final int index;
-  synthetic static const List<E> values;
-  static const E v;
-    metadata
-      Annotation
-        element: self::@getter::a
-        name: SimpleIdentifier
-          staticElement: self::@getter::a
-          staticType: null
-          token: a
-  String toString() {}
-}
-const int a;
-  constantInitializer
-    IntegerLiteral
-      literal: 42
-      staticType: int
-''',
-        withResolvedAst: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    enums
+      enum E @19
+        fields
+          synthetic final index @-1
+            type: int
+          synthetic static const values @-1
+            type: List<E>
+          static const v @26
+            metadata
+              Annotation
+                atSign.offset: 23
+                element: self::@getter::a
+                name: SimpleIdentifier
+                  staticElement: self::@getter::a
+                  staticType: null
+                  token: a @24
+            type: E
+        accessors
+          synthetic get index @-1
+            returnType: int
+          synthetic static get values @-1
+            returnType: List<E>
+          synthetic static get v @-1
+            returnType: E
+        methods
+          toString @-1
+            returnType: String
+    topLevelVariables
+      static const a @6
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 42 @10
+            staticType: int
+    accessors
+      synthetic static get a @6
+        returnType: int
+''');
   }
 
   test_metadata_enumConstantDeclaration_instanceCreation() async {
@@ -11224,84 +22386,161 @@
   @A(300) c,
 }
 ''');
-    checkElementText(
-        library,
-        r'''
-enum E {
-  synthetic final int index;
-  synthetic static const List<E> values;
-  static const E a;
-    metadata
-      Annotation
-        arguments: ArgumentList
-          arguments
-            IntegerLiteral
-              literal: 100
-              staticType: int
-        element: self::@class::A::@constructor::•
-        name: SimpleIdentifier
-          staticElement: self::@class::A
-          staticType: null
-          token: A
-  static const E b;
-  static const E c;
-    metadata
-      Annotation
-        arguments: ArgumentList
-          arguments
-            IntegerLiteral
-              literal: 300
-              staticType: int
-        element: self::@class::A::@constructor::•
-        name: SimpleIdentifier
-          staticElement: self::@class::A
-          staticType: null
-          token: A
-  String toString() {}
-}
-class A {
-  final dynamic value;
-  const A(final dynamic this.value);
-}
-''',
-        withResolvedAst: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        fields
+          final value @26
+            type: dynamic
+        constructors
+          const @41
+            parameters
+              requiredPositional final this.value @48
+                type: dynamic
+        accessors
+          synthetic get value @26
+            returnType: dynamic
+    enums
+      enum E @64
+        fields
+          synthetic final index @-1
+            type: int
+          synthetic static const values @-1
+            type: List<E>
+          static const a @78
+            metadata
+              Annotation
+                arguments: ArgumentList
+                  arguments
+                    IntegerLiteral
+                      literal: 100 @73
+                      staticType: int
+                  leftParenthesis: ( @72
+                  rightParenthesis: ) @76
+                atSign.offset: 70
+                element: self::@class::A::@constructor::•
+                name: SimpleIdentifier
+                  staticElement: self::@class::A
+                  staticType: null
+                  token: A @71
+            type: E
+          static const b @83
+            type: E
+          static const c @96
+            metadata
+              Annotation
+                arguments: ArgumentList
+                  arguments
+                    IntegerLiteral
+                      literal: 300 @91
+                      staticType: int
+                  leftParenthesis: ( @90
+                  rightParenthesis: ) @94
+                atSign.offset: 88
+                element: self::@class::A::@constructor::•
+                name: SimpleIdentifier
+                  staticElement: self::@class::A
+                  staticType: null
+                  token: A @89
+            type: E
+        accessors
+          synthetic get index @-1
+            returnType: int
+          synthetic static get values @-1
+            returnType: List<E>
+          synthetic static get a @-1
+            returnType: E
+          synthetic static get b @-1
+            returnType: E
+          synthetic static get c @-1
+            returnType: E
+        methods
+          toString @-1
+            returnType: String
+''');
   }
 
   test_metadata_enumDeclaration() async {
     var library = await checkLibrary('const a = 42; @a enum E { v }');
-    checkElementText(
-        library,
-        r'''
-enum E {
-  synthetic final int index;
-  synthetic static const List<E> values;
-  static const E v;
-  String toString() {}
-}
-  metadata
-    Annotation
-      element: self::@getter::a
-      name: SimpleIdentifier
-        staticElement: self::@getter::a
-        staticType: null
-        token: a
-const int a;
-  constantInitializer
-    IntegerLiteral
-      literal: 42
-      staticType: int
-''',
-        withResolvedAst: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    enums
+      enum E @22
+        metadata
+          Annotation
+            atSign.offset: 14
+            element: self::@getter::a
+            name: SimpleIdentifier
+              staticElement: self::@getter::a
+              staticType: null
+              token: a @15
+        fields
+          synthetic final index @-1
+            type: int
+          synthetic static const values @-1
+            type: List<E>
+          static const v @26
+            type: E
+        accessors
+          synthetic get index @-1
+            returnType: int
+          synthetic static get values @-1
+            returnType: List<E>
+          synthetic static get v @-1
+            returnType: E
+        methods
+          toString @-1
+            returnType: String
+    topLevelVariables
+      static const a @6
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 42 @10
+            staticType: int
+    accessors
+      synthetic static get a @6
+        returnType: int
+''');
   }
 
   test_metadata_exportDirective() async {
     addLibrarySource('/foo.dart', '');
     var library = await checkLibrary('@a export "foo.dart"; const a = null;');
     checkElementText(library, r'''
-@
-        a/*location: test.dart;a?*/
-export 'foo.dart';
-const dynamic a = null;
+library
+  metadata
+    Annotation
+      atSign.offset: 0
+      element: self::@getter::a
+      name: SimpleIdentifier
+        staticElement: self::@getter::a
+        staticType: null
+        token: a @-1
+  exports
+    foo.dart
+      metadata
+        Annotation
+          atSign.offset: 0
+          element: self::@getter::a
+          name: SimpleIdentifier
+            staticElement: self::@getter::a
+            staticType: null
+            token: a @-1
+  definingUnit
+    topLevelVariables
+      static const a @28
+        type: dynamic
+        constantInitializer
+          NullLiteral
+            literal: null @0
+            staticType: null
+    accessors
+      synthetic static get a @28
+        returnType: dynamic
 ''');
   }
 
@@ -11316,49 +22555,62 @@
   void bar() {}
 }
 ''');
-    checkElementText(
-        library,
-        r'''
-extension E on int {
-  static const int foo;
-    constantInitializer
-      IntegerLiteral
-        literal: 1
-        staticType: int
-  void bar() {}
-    metadata
-      Annotation
-        element: self::@extension::E::@getter::foo
-        name: SimpleIdentifier
-          staticElement: self::@extension::E::@getter::foo
-          staticType: null
-          token: foo
-}
-  metadata
-    Annotation
-      element: self::@getter::foo
-      name: SimpleIdentifier
-        staticElement: self::@getter::foo
-        staticType: null
-        token: foo
-  typeParameters
-    T
-      bound: null
-      defaultType: null
-      metadata
-        Annotation
-          element: self::@getter::foo
-          name: SimpleIdentifier
-            staticElement: self::@getter::foo
-            staticType: null
-            token: foo
-const int foo;
-  constantInitializer
-    IntegerLiteral
-      literal: 0
-      staticType: int
-''',
-        withResolvedAst: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    extensions
+      E @31
+        metadata
+          Annotation
+            atSign.offset: 16
+            element: self::@getter::foo
+            name: SimpleIdentifier
+              staticElement: self::@getter::foo
+              staticType: null
+              token: foo @17
+        typeParameters
+          covariant T @38
+            metadata
+              Annotation
+                atSign.offset: 33
+                element: self::@getter::foo
+                name: SimpleIdentifier
+                  staticElement: self::@getter::foo
+                  staticType: null
+                  token: foo @34
+        extendedType: int
+        fields
+          static const foo @65
+            type: int
+            constantInitializer
+              IntegerLiteral
+                literal: 1 @71
+                staticType: int
+        accessors
+          synthetic static get foo @65
+            returnType: int
+        methods
+          bar @88
+            metadata
+              Annotation
+                atSign.offset: 76
+                element: self::@extension::E::@getter::foo
+                name: SimpleIdentifier
+                  staticElement: self::@extension::E::@getter::foo
+                  staticType: null
+                  token: foo @77
+            returnType: void
+    topLevelVariables
+      static const foo @6
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 0 @12
+            staticType: int
+    accessors
+      synthetic static get foo @6
+        returnType: int
+''');
   }
 
   test_metadata_extensionDeclaration() async {
@@ -11369,27 +22621,84 @@
 @Object()
 extension E on A {}''');
     checkElementText(library, r'''
-class A {
-}
-@
-        a/*location: test.dart;a?*/
-@
-        Object/*location: dart:core;Object*/()
-extension E on A {
-}
-const dynamic a = null;
+library
+  definingUnit
+    classes
+      class A @22
+        constructors
+          synthetic @-1
+    extensions
+      E @50
+        metadata
+          Annotation
+            atSign.offset: 27
+            element: self::@getter::a
+            name: SimpleIdentifier
+              staticElement: self::@getter::a
+              staticType: null
+              token: a @28
+          Annotation
+            arguments: ArgumentList
+              leftParenthesis: ( @37
+              rightParenthesis: ) @38
+            atSign.offset: 30
+            element: dart:core::@class::Object::@constructor::•
+            name: SimpleIdentifier
+              staticElement: dart:core::@class::Object
+              staticType: null
+              token: Object @31
+        extendedType: A
+    topLevelVariables
+      static const a @6
+        type: dynamic
+        constantInitializer
+          NullLiteral
+            literal: null @0
+            staticType: null
+    accessors
+      synthetic static get a @6
+        returnType: dynamic
 ''');
   }
 
   test_metadata_fieldDeclaration() async {
     var library = await checkLibrary('const a = null; class C { @a int x; }');
     checkElementText(library, r'''
-class C {
-  @
-        a/*location: test.dart;a?*/
-  int x;
-}
-const dynamic a = null;
+library
+  definingUnit
+    classes
+      class C @22
+        fields
+          x @33
+            metadata
+              Annotation
+                atSign.offset: 26
+                element: self::@getter::a
+                name: SimpleIdentifier
+                  staticElement: self::@getter::a
+                  staticType: null
+                  token: a @27
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get x @33
+            returnType: int
+          synthetic set x @33
+            parameters
+              requiredPositional _x @33
+                type: int
+            returnType: void
+    topLevelVariables
+      static const a @6
+        type: dynamic
+        constantInitializer
+          NullLiteral
+            literal: null @0
+            staticType: null
+    accessors
+      synthetic static get a @6
+        returnType: dynamic
 ''');
   }
 
@@ -11402,12 +22711,44 @@
 }
 ''');
     checkElementText(library, r'''
-class C {
-  dynamic x;
-  C(@
-        a/*location: test.dart;a?*/ final dynamic this.x);
-}
-const dynamic a = null;
+library
+  definingUnit
+    classes
+      class C @22
+        fields
+          x @32
+            type: dynamic
+        constructors
+          @37
+            parameters
+              requiredPositional final this.x @47
+                type: dynamic
+                metadata
+                  Annotation
+                    atSign.offset: 0
+                    element: self::@getter::a
+                    name: SimpleIdentifier
+                      staticElement: self::@getter::a
+                      staticType: null
+                      token: a @-1
+        accessors
+          synthetic get x @32
+            returnType: dynamic
+          synthetic set x @32
+            parameters
+              requiredPositional _x @32
+                type: dynamic
+            returnType: void
+    topLevelVariables
+      static const a @6
+        type: dynamic
+        constantInitializer
+          NullLiteral
+            literal: null @0
+            staticType: null
+    accessors
+      synthetic static get a @6
+        returnType: dynamic
 ''');
   }
 
@@ -11415,12 +22756,48 @@
     var library = await checkLibrary(
         'const a = null; class C { var x; C([@a this.x = null]); }');
     checkElementText(library, r'''
-class C {
-  dynamic x;
-  C([@
-        a/*location: test.dart;a?*/ final dynamic this.x = null]);
-}
-const dynamic a = null;
+library
+  definingUnit
+    classes
+      class C @22
+        fields
+          x @30
+            type: dynamic
+        constructors
+          @33
+            parameters
+              optionalPositional final this.x @44
+                type: dynamic
+                metadata
+                  Annotation
+                    atSign.offset: 0
+                    element: self::@getter::a
+                    name: SimpleIdentifier
+                      staticElement: self::@getter::a
+                      staticType: null
+                      token: a @-1
+                constantInitializer
+                  NullLiteral
+                    literal: null @0
+                    staticType: null
+        accessors
+          synthetic get x @30
+            returnType: dynamic
+          synthetic set x @30
+            parameters
+              requiredPositional _x @30
+                type: dynamic
+            returnType: void
+    topLevelVariables
+      static const a @6
+        type: dynamic
+        constantInitializer
+          NullLiteral
+            literal: null @0
+            staticType: null
+    accessors
+      synthetic static get a @6
+        returnType: dynamic
 ''');
   }
 
@@ -11431,58 +22808,191 @@
 f() {}
 ''');
     checkElementText(library, r'''
-const dynamic a = null;
-@
-        a/*location: test.dart;a?*/
-dynamic f() {}
+library
+  definingUnit
+    topLevelVariables
+      static const a @6
+        type: dynamic
+        constantInitializer
+          NullLiteral
+            literal: null @0
+            staticType: null
+    accessors
+      synthetic static get a @6
+        returnType: dynamic
+    functions
+      f @19
+        metadata
+          Annotation
+            atSign.offset: 16
+            element: self::@getter::a
+            name: SimpleIdentifier
+              staticElement: self::@getter::a
+              staticType: null
+              token: a @17
+        returnType: dynamic
 ''');
   }
 
   test_metadata_functionDeclaration_getter() async {
     var library = await checkLibrary('const a = null; @a get f => null;');
     checkElementText(library, r'''
-const dynamic a = null;
-@
-        a/*location: test.dart;a?*/
-dynamic get f {}
+library
+  definingUnit
+    topLevelVariables
+      static const a @6
+        type: dynamic
+        constantInitializer
+          NullLiteral
+            literal: null @0
+            staticType: null
+      synthetic static f @-1
+        type: dynamic
+    accessors
+      synthetic static get a @6
+        returnType: dynamic
+      get f @23
+        metadata
+          Annotation
+            atSign.offset: 16
+            element: self::@getter::a
+            name: SimpleIdentifier
+              staticElement: self::@getter::a
+              staticType: null
+              token: a @17
+        returnType: dynamic
 ''');
   }
 
   test_metadata_functionDeclaration_setter() async {
     var library = await checkLibrary('const a = null; @a set f(value) {}');
     checkElementText(library, r'''
-const dynamic a = null;
-@
-        a/*location: test.dart;a?*/
-void set f(dynamic value) {}
+library
+  definingUnit
+    topLevelVariables
+      static const a @6
+        type: dynamic
+        constantInitializer
+          NullLiteral
+            literal: null @0
+            staticType: null
+      synthetic static f @-1
+        type: dynamic
+    accessors
+      synthetic static get a @6
+        returnType: dynamic
+      set f @23
+        metadata
+          Annotation
+            atSign.offset: 16
+            element: self::@getter::a
+            name: SimpleIdentifier
+              staticElement: self::@getter::a
+              staticType: null
+              token: a @17
+        parameters
+          requiredPositional value @25
+            type: dynamic
+        returnType: void
 ''');
   }
 
   test_metadata_functionTypeAlias() async {
     var library = await checkLibrary('const a = null; @a typedef F();');
     checkElementText(library, r'''
-@
-        a/*location: test.dart;a?*/
-typedef F = dynamic Function();
-const dynamic a = null;
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased F @27
+        metadata
+          Annotation
+            atSign.offset: 0
+            element: self::@getter::a
+            name: SimpleIdentifier
+              staticElement: self::@getter::a
+              staticType: null
+              token: a @-1
+        aliasedType: dynamic Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: dynamic
+    topLevelVariables
+      static const a @6
+        type: dynamic
+        constantInitializer
+          NullLiteral
+            literal: null @0
+            staticType: null
+    accessors
+      synthetic static get a @6
+        returnType: dynamic
 ''');
   }
 
   test_metadata_functionTypedFormalParameter() async {
     var library = await checkLibrary('const a = null; f(@a g()) {}');
     checkElementText(library, r'''
-const dynamic a = null;
-dynamic f(@
-        a/*location: test.dart;a?*/ dynamic Function() g) {}
+library
+  definingUnit
+    topLevelVariables
+      static const a @6
+        type: dynamic
+        constantInitializer
+          NullLiteral
+            literal: null @0
+            staticType: null
+    accessors
+      synthetic static get a @6
+        returnType: dynamic
+    functions
+      f @16
+        parameters
+          requiredPositional g @21
+            type: dynamic Function()
+            metadata
+              Annotation
+                atSign.offset: 0
+                element: self::@getter::a
+                name: SimpleIdentifier
+                  staticElement: self::@getter::a
+                  staticType: null
+                  token: a @-1
+        returnType: dynamic
 ''');
   }
 
   test_metadata_functionTypedFormalParameter_withDefault() async {
     var library = await checkLibrary('const a = null; f([@a g() = null]) {}');
     checkElementText(library, r'''
-const dynamic a = null;
-dynamic f([@
-        a/*location: test.dart;a?*/ dynamic Function() g = null]) {}
+library
+  definingUnit
+    topLevelVariables
+      static const a @6
+        type: dynamic
+        constantInitializer
+          NullLiteral
+            literal: null @0
+            staticType: null
+    accessors
+      synthetic static get a @6
+        returnType: dynamic
+    functions
+      f @16
+        parameters
+          optionalPositional g @22
+            type: dynamic Function()
+            metadata
+              Annotation
+                atSign.offset: 0
+                element: self::@getter::a
+                name: SimpleIdentifier
+                  staticElement: self::@getter::a
+                  staticType: null
+                  token: a @-1
+            constantInitializer
+              NullLiteral
+                literal: null @0
+                staticType: null
+        returnType: dynamic
 ''');
   }
 
@@ -11494,13 +23004,46 @@
 @b
 typedef F = void Function();''');
     checkElementText(library, r'''
-@
-        a/*location: test.dart;a?*/
-@
-        b/*location: test.dart;b?*/
-typedef F = void Function();
-const dynamic a = null;
-const dynamic b = null;
+library
+  definingUnit
+    typeAliases
+      F @46
+        metadata
+          Annotation
+            atSign.offset: 0
+            element: self::@getter::a
+            name: SimpleIdentifier
+              staticElement: self::@getter::a
+              staticType: null
+              token: a @-1
+          Annotation
+            atSign.offset: 0
+            element: self::@getter::b
+            name: SimpleIdentifier
+              staticElement: self::@getter::b
+              staticType: null
+              token: b @-1
+        aliasedType: void Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: void
+    topLevelVariables
+      static const a @6
+        type: dynamic
+        constantInitializer
+          NullLiteral
+            literal: null @0
+            staticType: null
+      static const b @22
+        type: dynamic
+        constantInitializer
+          NullLiteral
+            literal: null @0
+            staticType: null
+    accessors
+      synthetic static get a @6
+        returnType: dynamic
+      synthetic static get b @22
+        returnType: dynamic
 ''');
   }
 
@@ -11510,24 +23053,38 @@
 import "dart:math";
 const a = 0;
 ''');
-    checkElementText(
-        library,
-        '''
-import 'dart:math';
+    checkElementText(library, r'''
+library
   metadata
     Annotation
+      atSign.offset: 0
       element: self::@getter::a
       name: SimpleIdentifier
         staticElement: self::@getter::a
         staticType: null
-        token: a
-const int a;
-  constantInitializer
-    IntegerLiteral
-      literal: 0
-      staticType: int
-''',
-        withResolvedAst: true);
+        token: a @-1
+  imports
+    dart:math
+      metadata
+        Annotation
+          atSign.offset: 0
+          element: self::@getter::a
+          name: SimpleIdentifier
+            staticElement: self::@getter::a
+            staticType: null
+            token: a @-1
+  definingUnit
+    topLevelVariables
+      static const a @29
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 0 @33
+            staticType: int
+    accessors
+      synthetic static get a @29
+        returnType: int
+''');
   }
 
   test_metadata_importDirective_hasShow() async {
@@ -11537,24 +23094,40 @@
 
 const a = 0;
 ''');
-    checkElementText(
-        library,
-        r'''
-import 'dart:math' show Random;
+    checkElementText(library, r'''
+library
   metadata
     Annotation
+      atSign.offset: 0
       element: self::@getter::a
       name: SimpleIdentifier
         staticElement: self::@getter::a
         staticType: null
-        token: a
-const int a;
-  constantInitializer
-    IntegerLiteral
-      literal: 0
-      staticType: int
-''',
-        withResolvedAst: true);
+        token: a @-1
+  imports
+    dart:math
+      metadata
+        Annotation
+          atSign.offset: 0
+          element: self::@getter::a
+          name: SimpleIdentifier
+            staticElement: self::@getter::a
+            staticType: null
+            token: a @-1
+      combinators
+        show: Random
+  definingUnit
+    topLevelVariables
+      static const a @42
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 0 @46
+            staticType: int
+    accessors
+      synthetic static get a @42
+        returnType: int
+''');
   }
 
   test_metadata_inAliasedElement_formalParameter() async {
@@ -11562,27 +23135,36 @@
 const a = 42;
 typedef F = void Function(@a int first)
 ''');
-    checkElementText(
-        library,
-        r'''
-typedef F = void Function(int first);
-  aliasedElement
-    parameters
-      first
-        metadata
-          Annotation
-            element: self::@getter::a
-            name: SimpleIdentifier
-              staticElement: self::@getter::a
-              staticType: null
-              token: a
-const int a;
-  constantInitializer
-    IntegerLiteral
-      literal: 42
-      staticType: int
-''',
-        withResolvedAst: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      F @22
+        aliasedType: void Function(int)
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional first @-1
+              type: int
+              metadata
+                Annotation
+                  atSign.offset: 0
+                  element: self::@getter::a
+                  name: SimpleIdentifier
+                    staticElement: self::@getter::a
+                    staticType: null
+                    token: a @-1
+          returnType: void
+    topLevelVariables
+      static const a @6
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 42 @10
+            staticType: int
+    accessors
+      synthetic static get a @6
+        returnType: int
+''');
   }
 
   test_metadata_inAliasedElement_formalParameter2() async {
@@ -11590,29 +23172,39 @@
 const a = 42;
 typedef F = void Function(int foo(@a int bar))
 ''');
-    checkElementText(
-        library,
-        r'''
-typedef F = void Function(int Function(int) foo);
-  aliasedElement
-    parameters
-      foo
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      F @22
+        aliasedType: void Function(int Function(int))
+        aliasedElement: GenericFunctionTypeElement
           parameters
-            bar
-              metadata
-                Annotation
-                  element: self::@getter::a
-                  name: SimpleIdentifier
-                    staticElement: self::@getter::a
-                    staticType: null
-                    token: a
-const int a;
-  constantInitializer
-    IntegerLiteral
-      literal: 42
-      staticType: int
-''',
-        withResolvedAst: true);
+            requiredPositional foo @-1
+              type: int Function(int)
+              parameters
+                requiredPositional bar @-1
+                  type: int
+                  metadata
+                    Annotation
+                      atSign.offset: 0
+                      element: self::@getter::a
+                      name: SimpleIdentifier
+                        staticElement: self::@getter::a
+                        staticType: null
+                        token: a @-1
+          returnType: void
+    topLevelVariables
+      static const a @6
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 42 @10
+            staticType: int
+    accessors
+      synthetic static get a @6
+        returnType: int
+''');
   }
 
   test_metadata_inAliasedElement_typeParameter() async {
@@ -11620,51 +23212,98 @@
 const a = 42;
 typedef F = void Function<@a T>(int first)
 ''');
-    checkElementText(
-        library,
-        r'''
-typedef F = void Function(int first);
-  aliasedElement
-    typeParameters
-      T
-        bound: null
-        defaultType: null
-        metadata
-          Annotation
-            element: self::@getter::a
-            name: SimpleIdentifier
-              staticElement: self::@getter::a
-              staticType: null
-              token: a
-    parameters
-      first
-const int a;
-  constantInitializer
-    IntegerLiteral
-      literal: 42
-      staticType: int
-''',
-        withResolvedAst: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      F @22
+        aliasedType: void Function<T>(int)
+        aliasedElement: GenericFunctionTypeElement
+          typeParameters
+            covariant T @-1
+              metadata
+                Annotation
+                  atSign.offset: 0
+                  element: self::@getter::a
+                  name: SimpleIdentifier
+                    staticElement: self::@getter::a
+                    staticType: null
+                    token: a @-1
+          parameters
+            requiredPositional first @-1
+              type: int
+          returnType: void
+    topLevelVariables
+      static const a @6
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 42 @10
+            staticType: int
+    accessors
+      synthetic static get a @6
+        returnType: int
+''');
   }
 
   test_metadata_invalid_classDeclaration() async {
     var library = await checkLibrary('f(_) {} @f(42) class C {}');
     checkElementText(library, r'''
-@
-        f/*location: test.dart;f*/(42)
-class C {
-}
-dynamic f(dynamic _) {}
+library
+  definingUnit
+    classes
+      class C @21
+        metadata
+          Annotation
+            arguments: ArgumentList
+              arguments
+                IntegerLiteral
+                  literal: 42 @11
+                  staticType: int
+              leftParenthesis: ( @10
+              rightParenthesis: ) @13
+            atSign.offset: 8
+            element: self::@function::f
+            name: SimpleIdentifier
+              staticElement: self::@function::f
+              staticType: null
+              token: f @9
+        constructors
+          synthetic @-1
+    functions
+      f @0
+        parameters
+          requiredPositional _ @2
+            type: dynamic
+        returnType: dynamic
 ''');
   }
 
   test_metadata_libraryDirective() async {
     var library = await checkLibrary('@a library L; const a = null;');
     checkElementText(library, r'''
-@
-        a/*location: test.dart;a?*/
-library L;
-const dynamic a = null;
+library
+  name: L
+  nameOffset: 11
+  metadata
+    Annotation
+      atSign.offset: 0
+      element: self::@getter::a
+      name: SimpleIdentifier
+        staticElement: self::@getter::a
+        staticType: null
+        token: a @-1
+  definingUnit
+    topLevelVariables
+      static const a @20
+        type: dynamic
+        constantInitializer
+          NullLiteral
+            literal: null @0
+            staticType: null
+    accessors
+      synthetic static get a @20
+        returnType: dynamic
 ''');
   }
 
@@ -11672,12 +23311,36 @@
     var library =
         await checkLibrary('const a = null; class C { @a get m => null; }');
     checkElementText(library, r'''
-class C {
-  @
-        a/*location: test.dart;a?*/
-  dynamic get m {}
-}
-const dynamic a = null;
+library
+  definingUnit
+    classes
+      class C @22
+        fields
+          synthetic m @-1
+            type: dynamic
+        constructors
+          synthetic @-1
+        accessors
+          get m @33
+            metadata
+              Annotation
+                atSign.offset: 26
+                element: self::@getter::a
+                name: SimpleIdentifier
+                  staticElement: self::@getter::a
+                  staticType: null
+                  token: a @27
+            returnType: dynamic
+    topLevelVariables
+      static const a @6
+        type: dynamic
+        constantInitializer
+          NullLiteral
+            literal: null @0
+            staticType: null
+    accessors
+      synthetic static get a @6
+        returnType: dynamic
 ''');
   }
 
@@ -11692,15 +23355,48 @@
 }
 ''');
     checkElementText(library, r'''
-class C {
-  @
-        a/*location: test.dart;a?*/
-  @
-        b/*location: test.dart;b?*/
-  dynamic m() {}
-}
-const dynamic a = null;
-const dynamic b = null;
+library
+  definingUnit
+    classes
+      class C @38
+        constructors
+          synthetic @-1
+        methods
+          m @54
+            metadata
+              Annotation
+                atSign.offset: 44
+                element: self::@getter::a
+                name: SimpleIdentifier
+                  staticElement: self::@getter::a
+                  staticType: null
+                  token: a @45
+              Annotation
+                atSign.offset: 49
+                element: self::@getter::b
+                name: SimpleIdentifier
+                  staticElement: self::@getter::b
+                  staticType: null
+                  token: b @50
+            returnType: dynamic
+    topLevelVariables
+      static const a @6
+        type: dynamic
+        constantInitializer
+          NullLiteral
+            literal: null @0
+            staticType: null
+      static const b @22
+        type: dynamic
+        constantInitializer
+          NullLiteral
+            literal: null @0
+            staticType: null
+    accessors
+      synthetic static get a @6
+        returnType: dynamic
+      synthetic static get b @22
+        returnType: dynamic
 ''');
   }
 
@@ -11715,15 +23411,50 @@
 }
 ''');
     checkElementText(library, r'''
-mixin M on Object {
-  @
-        a/*location: test.dart;a?*/
-  @
-        b/*location: test.dart;b?*/
-  dynamic m() {}
-}
-const dynamic a = null;
-const dynamic b = null;
+library
+  definingUnit
+    mixins
+      mixin M @38
+        superclassConstraints
+          Object
+        constructors
+          synthetic @-1
+        methods
+          m @54
+            metadata
+              Annotation
+                atSign.offset: 44
+                element: self::@getter::a
+                name: SimpleIdentifier
+                  staticElement: self::@getter::a
+                  staticType: null
+                  token: a @45
+              Annotation
+                atSign.offset: 49
+                element: self::@getter::b
+                name: SimpleIdentifier
+                  staticElement: self::@getter::b
+                  staticType: null
+                  token: b @50
+            returnType: dynamic
+    topLevelVariables
+      static const a @6
+        type: dynamic
+        constantInitializer
+          NullLiteral
+            literal: null @0
+            staticType: null
+      static const b @22
+        type: dynamic
+        constantInitializer
+          NullLiteral
+            literal: null @0
+            staticType: null
+    accessors
+      synthetic static get a @6
+        returnType: dynamic
+      synthetic static get b @22
+        returnType: dynamic
 ''');
   }
 
@@ -11736,12 +23467,39 @@
 }
 ''');
     checkElementText(library, r'''
-class C {
-  @
-        a/*location: test.dart;a?*/
-  void set m(dynamic value) {}
-}
-const dynamic a = null;
+library
+  definingUnit
+    classes
+      class C @22
+        fields
+          synthetic m @-1
+            type: dynamic
+        constructors
+          synthetic @-1
+        accessors
+          set m @37
+            metadata
+              Annotation
+                atSign.offset: 28
+                element: self::@getter::a
+                name: SimpleIdentifier
+                  staticElement: self::@getter::a
+                  staticType: null
+                  token: a @29
+            parameters
+              requiredPositional value @39
+                type: dynamic
+            returnType: void
+    topLevelVariables
+      static const a @6
+        type: dynamic
+        constantInitializer
+          NullLiteral
+            literal: null @0
+            staticType: null
+    accessors
+      synthetic static get a @6
+        returnType: dynamic
 ''');
   }
 
@@ -11756,49 +23514,66 @@
   void bar() {}
 }
 ''');
-    checkElementText(
-        library,
-        r'''
-mixin M on Object {
-  static const int foo;
-    constantInitializer
-      IntegerLiteral
-        literal: 1
-        staticType: int
-  void bar() {}
-    metadata
-      Annotation
-        element: self::@mixin::M::@getter::foo
-        name: SimpleIdentifier
-          staticElement: self::@mixin::M::@getter::foo
-          staticType: null
-          token: foo
-}
-  metadata
-    Annotation
-      element: self::@getter::foo
-      name: SimpleIdentifier
-        staticElement: self::@getter::foo
-        staticType: null
-        token: foo
-  typeParameters
-    T
-      bound: null
-      defaultType: dynamic
-      metadata
-        Annotation
-          element: self::@getter::foo
-          name: SimpleIdentifier
-            staticElement: self::@getter::foo
-            staticType: null
-            token: foo
-const int foo;
-  constantInitializer
-    IntegerLiteral
-      literal: 0
-      staticType: int
-''',
-        withResolvedAst: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    mixins
+      mixin M @27
+        metadata
+          Annotation
+            atSign.offset: 16
+            element: self::@getter::foo
+            name: SimpleIdentifier
+              staticElement: self::@getter::foo
+              staticType: null
+              token: foo @17
+        typeParameters
+          covariant T @34
+            defaultType: dynamic
+            metadata
+              Annotation
+                atSign.offset: 29
+                element: self::@getter::foo
+                name: SimpleIdentifier
+                  staticElement: self::@getter::foo
+                  staticType: null
+                  token: foo @30
+        superclassConstraints
+          Object
+        fields
+          static const foo @54
+            type: int
+            constantInitializer
+              IntegerLiteral
+                literal: 1 @60
+                staticType: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic static get foo @54
+            returnType: int
+        methods
+          bar @77
+            metadata
+              Annotation
+                atSign.offset: 65
+                element: self::@mixin::M::@getter::foo
+                name: SimpleIdentifier
+                  staticElement: self::@mixin::M::@getter::foo
+                  staticType: null
+                  token: foo @66
+            returnType: void
+    topLevelVariables
+      static const foo @6
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 0 @12
+            staticType: int
+    accessors
+      synthetic static get foo @6
+        returnType: int
+''');
   }
 
   test_metadata_mixinDeclaration() async {
@@ -11809,14 +23584,47 @@
 @b
 mixin M {}''');
     checkElementText(library, r'''
-@
-        a/*location: test.dart;a?*/
-@
-        b/*location: test.dart;b?*/
-mixin M on Object {
-}
-const dynamic a = null;
-const dynamic b = null;
+library
+  definingUnit
+    mixins
+      mixin M @44
+        metadata
+          Annotation
+            atSign.offset: 32
+            element: self::@getter::a
+            name: SimpleIdentifier
+              staticElement: self::@getter::a
+              staticType: null
+              token: a @33
+          Annotation
+            atSign.offset: 35
+            element: self::@getter::b
+            name: SimpleIdentifier
+              staticElement: self::@getter::b
+              staticType: null
+              token: b @36
+        superclassConstraints
+          Object
+        constructors
+          synthetic @-1
+    topLevelVariables
+      static const a @6
+        type: dynamic
+        constantInitializer
+          NullLiteral
+            literal: null @0
+            staticType: null
+      static const b @22
+        type: dynamic
+        constantInitializer
+          NullLiteral
+            literal: null @0
+            staticType: null
+    accessors
+      synthetic static get a @6
+        returnType: dynamic
+      synthetic static get b @22
+        returnType: dynamic
 ''');
   }
 
@@ -11827,44 +23635,43 @@
 @foo
 class A<@foo T> {}
 ''');
-    checkElementText(
-        library,
-        r'''
-class A {
-}
-  metadata
-    Annotation
-      atSign.offset: 16
-      element: self::@getter::foo
-      name: SimpleIdentifier
-        offset: 17
-        staticElement: self::@getter::foo
-        staticType: null
-        token: foo
-          offset: 17
-  typeParameters
-    T
-      bound: null
-      defaultType: dynamic
-      metadata
-        Annotation
-          atSign.offset: 29
-          element: self::@getter::foo
-          name: SimpleIdentifier
-            offset: 30
-            staticElement: self::@getter::foo
-            staticType: null
-            token: foo
-              offset: 30
-const int foo;
-  constantInitializer
-    IntegerLiteral
-      literal: 0
-        offset: 12
-      staticType: int
-''',
-        withResolvedAst: true,
-        withResolvedAstOffsets: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @27
+        metadata
+          Annotation
+            atSign.offset: 16
+            element: self::@getter::foo
+            name: SimpleIdentifier
+              staticElement: self::@getter::foo
+              staticType: null
+              token: foo @17
+        typeParameters
+          covariant T @34
+            defaultType: dynamic
+            metadata
+              Annotation
+                atSign.offset: 29
+                element: self::@getter::foo
+                name: SimpleIdentifier
+                  staticElement: self::@getter::foo
+                  staticType: null
+                  token: foo @30
+        constructors
+          synthetic @-1
+    topLevelVariables
+      static const foo @6
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 0 @12
+            staticType: int
+    accessors
+      synthetic static get foo @6
+        returnType: int
+''');
   }
 
   test_metadata_offsets_onClassConstructor() async {
@@ -11877,31 +23684,43 @@
 }
 ''');
     // TODO(scheglov) Enhance to show metadata on formal parameters?
-    checkElementText(
-        library,
-        r'''
-class A {
-  A(int a);
-    metadata
-      Annotation
-        atSign.offset: 28
-        element: self::@getter::foo
-        name: SimpleIdentifier
-          offset: 29
-          staticElement: self::@getter::foo
-          staticType: null
-          token: foo
-            offset: 29
-}
-const int foo;
-  constantInitializer
-    IntegerLiteral
-      literal: 0
-        offset: 12
-      staticType: int
-''',
-        withResolvedAst: true,
-        withResolvedAstOffsets: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @22
+        constructors
+          @35
+            metadata
+              Annotation
+                atSign.offset: 28
+                element: self::@getter::foo
+                name: SimpleIdentifier
+                  staticElement: self::@getter::foo
+                  staticType: null
+                  token: foo @29
+            parameters
+              requiredPositional a @46
+                type: int
+                metadata
+                  Annotation
+                    atSign.offset: 0
+                    element: self::@getter::foo
+                    name: SimpleIdentifier
+                      staticElement: self::@getter::foo
+                      staticType: null
+                      token: foo @-1
+    topLevelVariables
+      static const foo @6
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 0 @12
+            staticType: int
+    accessors
+      synthetic static get foo @6
+        returnType: int
+''');
   }
 
   test_metadata_offsets_onClassGetter() async {
@@ -11913,31 +23732,38 @@
   int get getter => 0;
 }
 ''');
-    checkElementText(
-        library,
-        r'''
-class A {
-  int get getter {}
-    metadata
-      Annotation
-        atSign.offset: 28
-        element: self::@getter::foo
-        name: SimpleIdentifier
-          offset: 29
-          staticElement: self::@getter::foo
-          staticType: null
-          token: foo
-            offset: 29
-}
-const int foo;
-  constantInitializer
-    IntegerLiteral
-      literal: 0
-        offset: 12
-      staticType: int
-''',
-        withResolvedAst: true,
-        withResolvedAstOffsets: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @22
+        fields
+          synthetic getter @-1
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          get getter @43
+            metadata
+              Annotation
+                atSign.offset: 28
+                element: self::@getter::foo
+                name: SimpleIdentifier
+                  staticElement: self::@getter::foo
+                  staticType: null
+                  token: foo @29
+            returnType: int
+    topLevelVariables
+      static const foo @6
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 0 @12
+            staticType: int
+    accessors
+      synthetic static get foo @6
+        returnType: int
+''');
   }
 
   test_metadata_offsets_onClassMethod() async {
@@ -11950,45 +23776,56 @@
 }
 ''');
     // TODO(scheglov) Enhance to show metadata on formal parameters?
-    checkElementText(
-        library,
-        r'''
-class A {
-  void method(int a) {}
-    typeParameters
-      T
-        bound: null
-        defaultType: null
-        metadata
-          Annotation
-            atSign.offset: 47
-            element: self::@getter::foo
-            name: SimpleIdentifier
-              offset: 48
-              staticElement: self::@getter::foo
-              staticType: null
-              token: foo
-                offset: 48
-    metadata
-      Annotation
-        atSign.offset: 28
-        element: self::@getter::foo
-        name: SimpleIdentifier
-          offset: 29
-          staticElement: self::@getter::foo
-          staticType: null
-          token: foo
-            offset: 29
-}
-const int foo;
-  constantInitializer
-    IntegerLiteral
-      literal: 0
-        offset: 12
-      staticType: int
-''',
-        withResolvedAst: true,
-        withResolvedAstOffsets: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @22
+        constructors
+          synthetic @-1
+        methods
+          method @40
+            metadata
+              Annotation
+                atSign.offset: 28
+                element: self::@getter::foo
+                name: SimpleIdentifier
+                  staticElement: self::@getter::foo
+                  staticType: null
+                  token: foo @29
+            typeParameters
+              covariant T @52
+                metadata
+                  Annotation
+                    atSign.offset: 47
+                    element: self::@getter::foo
+                    name: SimpleIdentifier
+                      staticElement: self::@getter::foo
+                      staticType: null
+                      token: foo @48
+            parameters
+              requiredPositional a @64
+                type: int
+                metadata
+                  Annotation
+                    atSign.offset: 0
+                    element: self::@getter::foo
+                    name: SimpleIdentifier
+                      staticElement: self::@getter::foo
+                      staticType: null
+                      token: foo @-1
+            returnType: void
+    topLevelVariables
+      static const foo @6
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 0 @12
+            staticType: int
+    accessors
+      synthetic static get foo @6
+        returnType: int
+''');
   }
 
   test_metadata_offsets_onClassSetter() async {
@@ -12001,31 +23838,49 @@
 }
 ''');
     // TODO(scheglov) Enhance to show metadata on formal parameters?
-    checkElementText(
-        library,
-        r'''
-class A {
-  void set setter(int a) {}
-    metadata
-      Annotation
-        atSign.offset: 28
-        element: self::@getter::foo
-        name: SimpleIdentifier
-          offset: 29
-          staticElement: self::@getter::foo
-          staticType: null
-          token: foo
-            offset: 29
-}
-const int foo;
-  constantInitializer
-    IntegerLiteral
-      literal: 0
-        offset: 12
-      staticType: int
-''',
-        withResolvedAst: true,
-        withResolvedAstOffsets: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @22
+        fields
+          synthetic setter @-1
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          set setter @39
+            metadata
+              Annotation
+                atSign.offset: 28
+                element: self::@getter::foo
+                name: SimpleIdentifier
+                  staticElement: self::@getter::foo
+                  staticType: null
+                  token: foo @29
+            parameters
+              requiredPositional a @55
+                type: int
+                metadata
+                  Annotation
+                    atSign.offset: 0
+                    element: self::@getter::foo
+                    name: SimpleIdentifier
+                      staticElement: self::@getter::foo
+                      staticType: null
+                      token: foo @-1
+            returnType: void
+    topLevelVariables
+      static const foo @6
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 0 @12
+            staticType: int
+    accessors
+      synthetic static get foo @6
+        returnType: int
+''');
   }
 
   test_metadata_offsets_onClassTypeAlias() async {
@@ -12038,53 +23893,61 @@
 @foo
 class B<@foo T> = A with M;
 ''');
-    checkElementText(
-        library,
-        r'''
-class A {
-}
-class alias B extends A with M {
-  synthetic B();
-    constantInitializers
-      SuperConstructorInvocation
-        argumentList: ArgumentList
-        staticElement: self::@class::A::@constructor::•
-}
-  metadata
-    Annotation
-      atSign.offset: 39
-      element: self::@getter::foo
-      name: SimpleIdentifier
-        offset: 40
-        staticElement: self::@getter::foo
-        staticType: null
-        token: foo
-          offset: 40
-  typeParameters
-    T
-      bound: null
-      defaultType: dynamic
-      metadata
-        Annotation
-          atSign.offset: 52
-          element: self::@getter::foo
-          name: SimpleIdentifier
-            offset: 53
-            staticElement: self::@getter::foo
-            staticType: null
-            token: foo
-              offset: 53
-mixin M on Object {
-}
-const int foo;
-  constantInitializer
-    IntegerLiteral
-      literal: 0
-        offset: 12
-      staticType: int
-''',
-        withResolvedAst: true,
-        withResolvedAstOffsets: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @22
+        constructors
+          synthetic @-1
+      class alias B @50
+        metadata
+          Annotation
+            atSign.offset: 39
+            element: self::@getter::foo
+            name: SimpleIdentifier
+              staticElement: self::@getter::foo
+              staticType: null
+              token: foo @40
+        typeParameters
+          covariant T @57
+            defaultType: dynamic
+            metadata
+              Annotation
+                atSign.offset: 52
+                element: self::@getter::foo
+                name: SimpleIdentifier
+                  staticElement: self::@getter::foo
+                  staticType: null
+                  token: foo @53
+        supertype: A
+        mixins
+          M
+        constructors
+          synthetic @-1
+            constantInitializers
+              SuperConstructorInvocation
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticElement: self::@class::A::@constructor::•
+    mixins
+      mixin M @33
+        superclassConstraints
+          Object
+        constructors
+          synthetic @-1
+    topLevelVariables
+      static const foo @6
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 0 @12
+            staticType: int
+    accessors
+      synthetic static get foo @6
+        returnType: int
+''');
   }
 
   test_metadata_offsets_onEnum() async {
@@ -12098,56 +23961,71 @@
   @foo e3,
 }
 ''');
-    checkElementText(
-        library,
-        r'''
-enum E {
-  synthetic final int index;
-  synthetic static const List<E> values;
-  static const E e1;
-    metadata
-      Annotation
-        atSign.offset: 32
-        element: self::@getter::foo
-        name: SimpleIdentifier
-          offset: 33
-          staticElement: self::@getter::foo
-          staticType: null
-          token: foo
-            offset: 33
-  static const E e2;
-  static const E e3;
-    metadata
-      Annotation
-        atSign.offset: 49
-        element: self::@getter::foo
-        name: SimpleIdentifier
-          offset: 50
-          staticElement: self::@getter::foo
-          staticType: null
-          token: foo
-            offset: 50
-  String toString() {}
-}
-  metadata
-    Annotation
-      atSign.offset: 16
-      element: self::@getter::foo
-      name: SimpleIdentifier
-        offset: 17
-        staticElement: self::@getter::foo
-        staticType: null
-        token: foo
-          offset: 17
-const int foo;
-  constantInitializer
-    IntegerLiteral
-      literal: 0
-        offset: 12
-      staticType: int
-''',
-        withResolvedAst: true,
-        withResolvedAstOffsets: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    enums
+      enum E @26
+        metadata
+          Annotation
+            atSign.offset: 16
+            element: self::@getter::foo
+            name: SimpleIdentifier
+              staticElement: self::@getter::foo
+              staticType: null
+              token: foo @17
+        fields
+          synthetic final index @-1
+            type: int
+          synthetic static const values @-1
+            type: List<E>
+          static const e1 @37
+            metadata
+              Annotation
+                atSign.offset: 32
+                element: self::@getter::foo
+                name: SimpleIdentifier
+                  staticElement: self::@getter::foo
+                  staticType: null
+                  token: foo @33
+            type: E
+          static const e2 @43
+            type: E
+          static const e3 @54
+            metadata
+              Annotation
+                atSign.offset: 49
+                element: self::@getter::foo
+                name: SimpleIdentifier
+                  staticElement: self::@getter::foo
+                  staticType: null
+                  token: foo @50
+            type: E
+        accessors
+          synthetic get index @-1
+            returnType: int
+          synthetic static get values @-1
+            returnType: List<E>
+          synthetic static get e1 @-1
+            returnType: E
+          synthetic static get e2 @-1
+            returnType: E
+          synthetic static get e3 @-1
+            returnType: E
+        methods
+          toString @-1
+            returnType: String
+    topLevelVariables
+      static const foo @6
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 0 @12
+            staticType: int
+    accessors
+      synthetic static get foo @6
+        returnType: int
+''');
   }
 
   test_metadata_offsets_onExtension() async {
@@ -12157,44 +24035,41 @@
 @foo
 extension E<@foo T> on List<T> {}
 ''');
-    checkElementText(
-        library,
-        r'''
-extension E on List<T> {
-}
-  metadata
-    Annotation
-      atSign.offset: 16
-      element: self::@getter::foo
-      name: SimpleIdentifier
-        offset: 17
-        staticElement: self::@getter::foo
-        staticType: null
-        token: foo
-          offset: 17
-  typeParameters
-    T
-      bound: null
-      defaultType: null
-      metadata
-        Annotation
-          atSign.offset: 33
-          element: self::@getter::foo
-          name: SimpleIdentifier
-            offset: 34
-            staticElement: self::@getter::foo
-            staticType: null
-            token: foo
-              offset: 34
-const int foo;
-  constantInitializer
-    IntegerLiteral
-      literal: 0
-        offset: 12
-      staticType: int
-''',
-        withResolvedAst: true,
-        withResolvedAstOffsets: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    extensions
+      E @31
+        metadata
+          Annotation
+            atSign.offset: 16
+            element: self::@getter::foo
+            name: SimpleIdentifier
+              staticElement: self::@getter::foo
+              staticType: null
+              token: foo @17
+        typeParameters
+          covariant T @38
+            metadata
+              Annotation
+                atSign.offset: 33
+                element: self::@getter::foo
+                name: SimpleIdentifier
+                  staticElement: self::@getter::foo
+                  staticType: null
+                  token: foo @34
+        extendedType: List<T>
+    topLevelVariables
+      static const foo @6
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 0 @12
+            staticType: int
+    accessors
+      synthetic static get foo @6
+        returnType: int
+''');
   }
 
   test_metadata_offsets_onFieldDeclaration() async {
@@ -12209,47 +24084,59 @@
   static const isConst = 2;
 }
 ''');
-    checkElementText(
-        library,
-        r'''
-class A {
-  static int isNotConst;
-    metadata
-      Annotation
-        atSign.offset: 28
-        element: self::@getter::foo
-        name: SimpleIdentifier
-          offset: 29
-          staticElement: self::@getter::foo
-          staticType: null
-          token: foo
-            offset: 29
-  static const int isConst;
-    metadata
-      Annotation
-        atSign.offset: 61
-        element: self::@getter::foo
-        name: SimpleIdentifier
-          offset: 62
-          staticElement: self::@getter::foo
-          staticType: null
-          token: foo
-            offset: 62
-    constantInitializer
-      IntegerLiteral
-        literal: 2
-          offset: 91
-        staticType: int
-}
-const int foo;
-  constantInitializer
-    IntegerLiteral
-      literal: 0
-        offset: 12
-      staticType: int
-''',
-        withResolvedAst: true,
-        withResolvedAstOffsets: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @22
+        fields
+          static isNotConst @42
+            metadata
+              Annotation
+                atSign.offset: 28
+                element: self::@getter::foo
+                name: SimpleIdentifier
+                  staticElement: self::@getter::foo
+                  staticType: null
+                  token: foo @29
+            type: int
+          static const isConst @81
+            metadata
+              Annotation
+                atSign.offset: 61
+                element: self::@getter::foo
+                name: SimpleIdentifier
+                  staticElement: self::@getter::foo
+                  staticType: null
+                  token: foo @62
+            type: int
+            constantInitializer
+              IntegerLiteral
+                literal: 2 @91
+                staticType: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic static get isNotConst @42
+            returnType: int
+          synthetic static set isNotConst @42
+            parameters
+              requiredPositional _isNotConst @42
+                type: int
+            returnType: void
+          synthetic static get isConst @81
+            returnType: int
+    topLevelVariables
+      static const foo @6
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 0 @12
+            staticType: int
+    accessors
+      synthetic static get foo @6
+        returnType: int
+''');
   }
 
   test_metadata_offsets_onMixin() async {
@@ -12259,44 +24146,45 @@
 @foo
 mixin A<@foo T> {}
 ''');
-    checkElementText(
-        library,
-        r'''
-mixin A on Object {
-}
-  metadata
-    Annotation
-      atSign.offset: 16
-      element: self::@getter::foo
-      name: SimpleIdentifier
-        offset: 17
-        staticElement: self::@getter::foo
-        staticType: null
-        token: foo
-          offset: 17
-  typeParameters
-    T
-      bound: null
-      defaultType: dynamic
-      metadata
-        Annotation
-          atSign.offset: 29
-          element: self::@getter::foo
-          name: SimpleIdentifier
-            offset: 30
-            staticElement: self::@getter::foo
-            staticType: null
-            token: foo
-              offset: 30
-const int foo;
-  constantInitializer
-    IntegerLiteral
-      literal: 0
-        offset: 12
-      staticType: int
-''',
-        withResolvedAst: true,
-        withResolvedAstOffsets: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    mixins
+      mixin A @27
+        metadata
+          Annotation
+            atSign.offset: 16
+            element: self::@getter::foo
+            name: SimpleIdentifier
+              staticElement: self::@getter::foo
+              staticType: null
+              token: foo @17
+        typeParameters
+          covariant T @34
+            defaultType: dynamic
+            metadata
+              Annotation
+                atSign.offset: 29
+                element: self::@getter::foo
+                name: SimpleIdentifier
+                  staticElement: self::@getter::foo
+                  staticType: null
+                  token: foo @30
+        superclassConstraints
+          Object
+        constructors
+          synthetic @-1
+    topLevelVariables
+      static const foo @6
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 0 @12
+            staticType: int
+    accessors
+      synthetic static get foo @6
+        returnType: int
+''');
   }
 
   test_metadata_offsets_onUnitFunction() async {
@@ -12307,43 +24195,52 @@
 void f<@foo T>(@foo int a) {}
 ''');
     // TODO(scheglov) Enhance to show metadata on formal parameters?
-    checkElementText(
-        library,
-        r'''
-const int foo;
-  constantInitializer
-    IntegerLiteral
-      literal: 0
-        offset: 12
-      staticType: int
-void f(int a) {}
-  typeParameters
-    T
-      bound: null
-      defaultType: null
-      metadata
-        Annotation
-          atSign.offset: 28
-          element: self::@getter::foo
-          name: SimpleIdentifier
-            offset: 29
-            staticElement: self::@getter::foo
-            staticType: null
-            token: foo
-              offset: 29
-  metadata
-    Annotation
-      atSign.offset: 16
-      element: self::@getter::foo
-      name: SimpleIdentifier
-        offset: 17
-        staticElement: self::@getter::foo
-        staticType: null
-        token: foo
-          offset: 17
-''',
-        withResolvedAst: true,
-        withResolvedAstOffsets: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const foo @6
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 0 @12
+            staticType: int
+    accessors
+      synthetic static get foo @6
+        returnType: int
+    functions
+      f @26
+        metadata
+          Annotation
+            atSign.offset: 16
+            element: self::@getter::foo
+            name: SimpleIdentifier
+              staticElement: self::@getter::foo
+              staticType: null
+              token: foo @17
+        typeParameters
+          covariant T @33
+            metadata
+              Annotation
+                atSign.offset: 28
+                element: self::@getter::foo
+                name: SimpleIdentifier
+                  staticElement: self::@getter::foo
+                  staticType: null
+                  token: foo @29
+        parameters
+          requiredPositional a @45
+            type: int
+            metadata
+              Annotation
+                atSign.offset: 0
+                element: self::@getter::foo
+                name: SimpleIdentifier
+                  staticElement: self::@getter::foo
+                  staticType: null
+                  token: foo @-1
+        returnType: void
+''');
   }
 
   test_metadata_offsets_onUnitGetter() async {
@@ -12353,29 +24250,32 @@
 @foo
 int get getter => 0;
 ''');
-    checkElementText(
-        library,
-        r'''
-const int foo;
-  constantInitializer
-    IntegerLiteral
-      literal: 0
-        offset: 12
-      staticType: int
-int get getter {}
-  metadata
-    Annotation
-      atSign.offset: 16
-      element: self::@getter::foo
-      name: SimpleIdentifier
-        offset: 17
-        staticElement: self::@getter::foo
-        staticType: null
-        token: foo
-          offset: 17
-''',
-        withResolvedAst: true,
-        withResolvedAstOffsets: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const foo @6
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 0 @12
+            staticType: int
+      synthetic static getter @-1
+        type: int
+    accessors
+      synthetic static get foo @6
+        returnType: int
+      get getter @29
+        metadata
+          Annotation
+            atSign.offset: 16
+            element: self::@getter::foo
+            name: SimpleIdentifier
+              staticElement: self::@getter::foo
+              staticType: null
+              token: foo @17
+        returnType: int
+''');
   }
 
   test_metadata_offsets_onUnitSetter() async {
@@ -12386,29 +24286,43 @@
 set setter(@foo int a) {}
 ''');
     // TODO(scheglov) Enhance to show metadata on formal parameters?
-    checkElementText(
-        library,
-        r'''
-const int foo;
-  constantInitializer
-    IntegerLiteral
-      literal: 0
-        offset: 12
-      staticType: int
-void set setter(int a) {}
-  metadata
-    Annotation
-      atSign.offset: 16
-      element: self::@getter::foo
-      name: SimpleIdentifier
-        offset: 17
-        staticElement: self::@getter::foo
-        staticType: null
-        token: foo
-          offset: 17
-''',
-        withResolvedAst: true,
-        withResolvedAstOffsets: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const foo @6
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 0 @12
+            staticType: int
+      synthetic static setter @-1
+        type: int
+    accessors
+      synthetic static get foo @6
+        returnType: int
+      set setter @25
+        metadata
+          Annotation
+            atSign.offset: 16
+            element: self::@getter::foo
+            name: SimpleIdentifier
+              staticElement: self::@getter::foo
+              staticType: null
+              token: foo @17
+        parameters
+          requiredPositional a @41
+            type: int
+            metadata
+              Annotation
+                atSign.offset: 0
+                element: self::@getter::foo
+                name: SimpleIdentifier
+                  staticElement: self::@getter::foo
+                  staticType: null
+                  token: foo @-1
+        returnType: void
+''');
   }
 
   test_metadata_offsets_onUnitVariable() async {
@@ -12421,45 +24335,53 @@
 @foo
 const isConst = 2;
 ''');
-    checkElementText(
-        library,
-        r'''
-const int foo;
-  constantInitializer
-    IntegerLiteral
-      literal: 0
-        offset: 12
-      staticType: int
-int isNotConst;
-  metadata
-    Annotation
-      atSign.offset: 16
-      element: self::@getter::foo
-      name: SimpleIdentifier
-        offset: 17
-        staticElement: self::@getter::foo
-        staticType: null
-        token: foo
-          offset: 17
-const int isConst;
-  metadata
-    Annotation
-      atSign.offset: 42
-      element: self::@getter::foo
-      name: SimpleIdentifier
-        offset: 43
-        staticElement: self::@getter::foo
-        staticType: null
-        token: foo
-          offset: 43
-  constantInitializer
-    IntegerLiteral
-      literal: 2
-        offset: 63
-      staticType: int
-''',
-        withResolvedAst: true,
-        withResolvedAstOffsets: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const foo @6
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 0 @12
+            staticType: int
+      static isNotConst @25
+        metadata
+          Annotation
+            atSign.offset: 16
+            element: self::@getter::foo
+            name: SimpleIdentifier
+              staticElement: self::@getter::foo
+              staticType: null
+              token: foo @17
+        type: int
+      static const isConst @53
+        metadata
+          Annotation
+            atSign.offset: 42
+            element: self::@getter::foo
+            name: SimpleIdentifier
+              staticElement: self::@getter::foo
+              staticType: null
+              token: foo @43
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 2 @63
+            staticType: int
+    accessors
+      synthetic static get foo @6
+        returnType: int
+      synthetic static get isNotConst @25
+        returnType: int
+      synthetic static set isNotConst @25
+        parameters
+          requiredPositional _isNotConst @25
+            type: int
+        returnType: void
+      synthetic static get isConst @53
+        returnType: int
+''');
   }
 
   test_metadata_partDirective() async {
@@ -12470,14 +24392,30 @@
 part 'foo.dart';
 const a = null;''');
     checkElementText(library, r'''
-library L;
-@
-        a/*location: test.dart;a?*/
-part 'foo.dart';
-const dynamic a = null;
---------------------
-unit: foo.dart
-
+library
+  name: L
+  nameOffset: 8
+  definingUnit
+    topLevelVariables
+      static const a @37
+        type: dynamic
+        constantInitializer
+          NullLiteral
+            literal: null @0
+            staticType: null
+    accessors
+      synthetic static get a @37
+        returnType: dynamic
+  parts
+    foo.dart
+      metadata
+        Annotation
+          atSign.offset: 0
+          element: self::@getter::a
+          name: SimpleIdentifier
+            staticElement: self::@getter::a
+            staticType: null
+            token: a @-1
 ''');
   }
 
@@ -12502,21 +24440,62 @@
     addLibrarySource('/a.dart', 'const b = null;');
     var library = await checkLibrary('import "a.dart" as a; @a.b class C {}');
     checkElementText(library, r'''
-import 'a.dart' as a;
-@
-        a/*location: test.dart;a*/.
-        b/*location: a.dart;b?*/
-class C {
-}
+library
+  imports
+    a.dart as a @19
+  definingUnit
+    classes
+      class C @33
+        metadata
+          Annotation
+            atSign.offset: 22
+            element: a.dart::@getter::b
+            name: PrefixedIdentifier
+              identifier: SimpleIdentifier
+                staticElement: a.dart::@getter::b
+                staticType: null
+                token: b @25
+              period: . @0
+              prefix: SimpleIdentifier
+                staticElement: self::@prefix::a
+                staticType: null
+                token: a @23
+              staticElement: a.dart::@getter::b
+              staticType: null
+        constructors
+          synthetic @-1
 ''');
   }
 
   test_metadata_simpleFormalParameter() async {
     var library = await checkLibrary('const a = null; f(@a x) {}');
     checkElementText(library, r'''
-const dynamic a = null;
-dynamic f(@
-        a/*location: test.dart;a?*/ dynamic x) {}
+library
+  definingUnit
+    topLevelVariables
+      static const a @6
+        type: dynamic
+        constantInitializer
+          NullLiteral
+            literal: null @0
+            staticType: null
+    accessors
+      synthetic static get a @6
+        returnType: dynamic
+    functions
+      f @16
+        parameters
+          requiredPositional x @21
+            type: dynamic
+            metadata
+              Annotation
+                atSign.offset: 0
+                element: self::@getter::a
+                name: SimpleIdentifier
+                  staticElement: self::@getter::a
+                  staticType: null
+                  token: a @-1
+        returnType: dynamic
 ''');
   }
 
@@ -12529,11 +24508,36 @@
 }
 ''');
     checkElementText(library, r'''
-class C {
-  dynamic m(@
-        a/*location: test.dart;a?*/ dynamic x) {}
-}
-const dynamic a = null;
+library
+  definingUnit
+    classes
+      class C @23
+        constructors
+          synthetic @-1
+        methods
+          m @29
+            parameters
+              requiredPositional x @34
+                type: dynamic
+                metadata
+                  Annotation
+                    atSign.offset: 0
+                    element: self::@getter::a
+                    name: SimpleIdentifier
+                      staticElement: self::@getter::a
+                      staticType: null
+                      token: a @-1
+            returnType: dynamic
+    topLevelVariables
+      static const a @6
+        type: dynamic
+        constantInitializer
+          NullLiteral
+            literal: null @0
+            staticType: null
+    accessors
+      synthetic static get a @6
+        returnType: dynamic
 ''');
   }
 
@@ -12544,39 +24548,137 @@
 set foo(@a int x) {}
 ''');
     checkElementText(library, r'''
-const dynamic a = null;
-void set foo(@
-        a/*location: test.dart;a?*/ int x) {}
+library
+  definingUnit
+    topLevelVariables
+      static const a @6
+        type: dynamic
+        constantInitializer
+          NullLiteral
+            literal: null @0
+            staticType: null
+      synthetic static foo @-1
+        type: int
+    accessors
+      synthetic static get a @6
+        returnType: dynamic
+      set foo @21
+        parameters
+          requiredPositional x @32
+            type: int
+            metadata
+              Annotation
+                atSign.offset: 0
+                element: self::@getter::a
+                name: SimpleIdentifier
+                  staticElement: self::@getter::a
+                  staticType: null
+                  token: a @-1
+        returnType: void
 ''');
   }
 
   test_metadata_simpleFormalParameter_withDefault() async {
     var library = await checkLibrary('const a = null; f([@a x = null]) {}');
     checkElementText(library, r'''
-const dynamic a = null;
-dynamic f([@
-        a/*location: test.dart;a?*/ dynamic x = null]) {}
+library
+  definingUnit
+    topLevelVariables
+      static const a @6
+        type: dynamic
+        constantInitializer
+          NullLiteral
+            literal: null @0
+            staticType: null
+    accessors
+      synthetic static get a @6
+        returnType: dynamic
+    functions
+      f @16
+        parameters
+          optionalPositional x @22
+            type: dynamic
+            metadata
+              Annotation
+                atSign.offset: 0
+                element: self::@getter::a
+                name: SimpleIdentifier
+                  staticElement: self::@getter::a
+                  staticType: null
+                  token: a @-1
+            constantInitializer
+              NullLiteral
+                literal: null @0
+                staticType: null
+        returnType: dynamic
 ''');
   }
 
   test_metadata_topLevelVariableDeclaration() async {
     var library = await checkLibrary('const a = null; @a int v;');
     checkElementText(library, r'''
-const dynamic a = null;
-@
-        a/*location: test.dart;a?*/
-int v;
+library
+  definingUnit
+    topLevelVariables
+      static const a @6
+        type: dynamic
+        constantInitializer
+          NullLiteral
+            literal: null @0
+            staticType: null
+      static v @23
+        metadata
+          Annotation
+            atSign.offset: 16
+            element: self::@getter::a
+            name: SimpleIdentifier
+              staticElement: self::@getter::a
+              staticType: null
+              token: a @17
+        type: int
+    accessors
+      synthetic static get a @6
+        returnType: dynamic
+      synthetic static get v @23
+        returnType: int
+      synthetic static set v @23
+        parameters
+          requiredPositional _v @23
+            type: int
+        returnType: void
 ''');
   }
 
   test_metadata_typeParameter_ofClass() async {
     var library = await checkLibrary('const a = null; class C<@a T> {}');
     checkElementText(library, r'''
-class C<@
-        a/*location: test.dart;a?*/
-T> {
-}
-const dynamic a = null;
+library
+  definingUnit
+    classes
+      class C @22
+        typeParameters
+          covariant T @27
+            defaultType: dynamic
+            metadata
+              Annotation
+                atSign.offset: 24
+                element: self::@getter::a
+                name: SimpleIdentifier
+                  staticElement: self::@getter::a
+                  staticType: null
+                  token: a @25
+        constructors
+          synthetic @-1
+    topLevelVariables
+      static const a @6
+        type: dynamic
+        constantInitializer
+          NullLiteral
+            literal: null @0
+            staticType: null
+    accessors
+      synthetic static get a @6
+        returnType: dynamic
 ''');
   }
 
@@ -12587,36 +24689,113 @@
 class D {}
 class E {}''');
     checkElementText(library, r'''
-class alias C<@
-        a/*location: test.dart;a?*/
-T> extends D with E {
-  synthetic C() : super();
-}
-class D {
-}
-class E {
-}
-const dynamic a = null;
+library
+  definingUnit
+    classes
+      class alias C @22
+        typeParameters
+          covariant T @27
+            defaultType: dynamic
+            metadata
+              Annotation
+                atSign.offset: 24
+                element: self::@getter::a
+                name: SimpleIdentifier
+                  staticElement: self::@getter::a
+                  staticType: null
+                  token: a @25
+        supertype: D
+        mixins
+          E
+        constructors
+          synthetic @-1
+            constantInitializers
+              SuperConstructorInvocation
+                argumentList: ArgumentList
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticElement: self::@class::D::@constructor::•
+      class D @48
+        constructors
+          synthetic @-1
+      class E @59
+        constructors
+          synthetic @-1
+    topLevelVariables
+      static const a @6
+        type: dynamic
+        constantInitializer
+          NullLiteral
+            literal: null @0
+            staticType: null
+    accessors
+      synthetic static get a @6
+        returnType: dynamic
 ''');
   }
 
   test_metadata_typeParameter_ofFunction() async {
     var library = await checkLibrary('const a = null; f<@a T>() {}');
     checkElementText(library, r'''
-const dynamic a = null;
-dynamic f<@
-        a/*location: test.dart;a?*/
-T>() {}
+library
+  definingUnit
+    topLevelVariables
+      static const a @6
+        type: dynamic
+        constantInitializer
+          NullLiteral
+            literal: null @0
+            staticType: null
+    accessors
+      synthetic static get a @6
+        returnType: dynamic
+    functions
+      f @16
+        typeParameters
+          covariant T @21
+            metadata
+              Annotation
+                atSign.offset: 18
+                element: self::@getter::a
+                name: SimpleIdentifier
+                  staticElement: self::@getter::a
+                  staticType: null
+                  token: a @19
+        returnType: dynamic
 ''');
   }
 
   test_metadata_typeParameter_ofTypedef() async {
     var library = await checkLibrary('const a = null; typedef F<@a T>();');
     checkElementText(library, r'''
-typedef F<@
-        a/*location: test.dart;a?*/
-T> = dynamic Function();
-const dynamic a = null;
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased F @24
+        typeParameters
+          unrelated T @29
+            defaultType: dynamic
+            metadata
+              Annotation
+                atSign.offset: 0
+                element: self::@getter::a
+                name: SimpleIdentifier
+                  staticElement: self::@getter::a
+                  staticType: null
+                  token: a @-1
+        aliasedType: dynamic Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: dynamic
+    topLevelVariables
+      static const a @6
+        type: dynamic
+        constantInitializer
+          NullLiteral
+            literal: null @0
+            staticType: null
+    accessors
+      synthetic static get a @6
+        returnType: dynamic
 ''');
   }
 
@@ -12631,24 +24810,37 @@
         as TopLevelVariableElement;
     expect(x.metadata, hasLength(1));
     // Check details.
-    checkElementText(
-        library,
-        r'''
-const int a;
-  constantInitializer
-    IntegerLiteral
-      literal: 0
-      staticType: int
-int x;
-  metadata
-    Annotation
-      element: self::@getter::a
-      name: SimpleIdentifier
-        staticElement: self::@getter::a
-        staticType: null
-        token: a
-''',
-        withResolvedAst: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static const a @6
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 0 @10
+            staticType: int
+      static x @20
+        metadata
+          Annotation
+            atSign.offset: 13
+            element: self::@getter::a
+            name: SimpleIdentifier
+              staticElement: self::@getter::a
+              staticType: null
+              token: a @14
+        type: int
+    accessors
+      synthetic static get a @6
+        returnType: int
+      synthetic static get x @20
+        returnType: int
+      synthetic static set x @20
+        parameters
+          requiredPositional _x @20
+            type: int
+        returnType: void
+''');
   }
 
   test_metadata_value_class_staticField() async {
@@ -12660,35 +24852,43 @@
 @A.x
 class C {}
 ''');
-    checkElementText(
-        library,
-        r'''
-class A {
-  static const int x;
-    constantInitializer
-      IntegerLiteral
-        literal: 0
-        staticType: int
-}
-class C {
-}
-  metadata
-    Annotation
-      element: self::@class::A::@getter::x
-      name: PrefixedIdentifier
-        identifier: SimpleIdentifier
-          staticElement: self::@class::A::@getter::x
-          staticType: null
-          token: x
-        period: .
-        prefix: SimpleIdentifier
-          staticElement: self::@class::A
-          staticType: null
-          token: A
-        staticElement: self::@class::A::@getter::x
-        staticType: null
-''',
-        withResolvedAst: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        fields
+          static const x @25
+            type: int
+            constantInitializer
+              IntegerLiteral
+                literal: 0 @29
+                staticType: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic static get x @25
+            returnType: int
+      class C @45
+        metadata
+          Annotation
+            atSign.offset: 34
+            element: self::@class::A::@getter::x
+            name: PrefixedIdentifier
+              identifier: SimpleIdentifier
+                staticElement: self::@class::A::@getter::x
+                staticType: null
+                token: x @37
+              period: . @0
+              prefix: SimpleIdentifier
+                staticElement: self::@class::A
+                staticType: null
+                token: A @35
+              staticElement: self::@class::A::@getter::x
+              staticType: null
+        constructors
+          synthetic @-1
+''');
   }
 
   test_metadata_value_enum_constant() async {
@@ -12698,36 +24898,57 @@
 @E.b
 class C {}
 ''');
-    checkElementText(
-        library,
-        r'''
-enum E {
-  synthetic final int index;
-  synthetic static const List<E> values;
-  static const E a;
-  static const E b;
-  static const E c;
-  String toString() {}
-}
-class C {
-}
-  metadata
-    Annotation
-      element: self::@enum::E::@getter::b
-      name: PrefixedIdentifier
-        identifier: SimpleIdentifier
-          staticElement: self::@enum::E::@getter::b
-          staticType: null
-          token: b
-        period: .
-        prefix: SimpleIdentifier
-          staticElement: self::@enum::E
-          staticType: null
-          token: E
-        staticElement: self::@enum::E::@getter::b
-        staticType: null
-''',
-        withResolvedAst: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @28
+        metadata
+          Annotation
+            atSign.offset: 17
+            element: self::@enum::E::@getter::b
+            name: PrefixedIdentifier
+              identifier: SimpleIdentifier
+                staticElement: self::@enum::E::@getter::b
+                staticType: null
+                token: b @20
+              period: . @0
+              prefix: SimpleIdentifier
+                staticElement: self::@enum::E
+                staticType: null
+                token: E @18
+              staticElement: self::@enum::E::@getter::b
+              staticType: null
+        constructors
+          synthetic @-1
+    enums
+      enum E @5
+        fields
+          synthetic final index @-1
+            type: int
+          synthetic static const values @-1
+            type: List<E>
+          static const a @8
+            type: E
+          static const b @11
+            type: E
+          static const c @14
+            type: E
+        accessors
+          synthetic get index @-1
+            returnType: int
+          synthetic static get values @-1
+            returnType: List<E>
+          synthetic static get a @-1
+            returnType: E
+          synthetic static get b @-1
+            returnType: E
+          synthetic static get c @-1
+            returnType: E
+        methods
+          toString @-1
+            returnType: String
+''');
   }
 
   test_metadata_value_extension_staticField() async {
@@ -12739,35 +24960,43 @@
 @E.x
 class C {}
 ''');
-    checkElementText(
-        library,
-        r'''
-class C {
-}
-  metadata
-    Annotation
-      element: self::@extension::E::@getter::x
-      name: PrefixedIdentifier
-        identifier: SimpleIdentifier
-          staticElement: self::@extension::E::@getter::x
-          staticType: null
-          token: x
-        period: .
-        prefix: SimpleIdentifier
-          staticElement: self::@extension::E
-          staticType: null
-          token: E
-        staticElement: self::@extension::E::@getter::x
-        staticType: null
-extension E on int {
-  static const int x;
-    constantInitializer
-      IntegerLiteral
-        literal: 0
-        staticType: int
-}
-''',
-        withResolvedAst: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @56
+        metadata
+          Annotation
+            atSign.offset: 45
+            element: self::@extension::E::@getter::x
+            name: PrefixedIdentifier
+              identifier: SimpleIdentifier
+                staticElement: self::@extension::E::@getter::x
+                staticType: null
+                token: x @48
+              period: . @0
+              prefix: SimpleIdentifier
+                staticElement: self::@extension::E
+                staticType: null
+                token: E @46
+              staticElement: self::@extension::E::@getter::x
+              staticType: null
+        constructors
+          synthetic @-1
+    extensions
+      E @10
+        extendedType: int
+        fields
+          static const x @36
+            type: int
+            constantInitializer
+              IntegerLiteral
+                literal: 0 @40
+                staticType: int
+        accessors
+          synthetic static get x @36
+            returnType: int
+''');
   }
 
   test_metadata_value_prefix_extension_staticField() async {
@@ -12782,33 +25011,36 @@
 @foo.E.x
 class C {}
 ''');
-    checkElementText(
-        library,
-        r'''
-import 'package:test/foo.dart' as foo;
-class C {
-}
-  metadata
-    Annotation
-      constructorName: SimpleIdentifier
-        staticElement: package:test/foo.dart::@extension::E::@getter::x
-        staticType: null
-        token: x
-      element: package:test/foo.dart::@extension::E::@getter::x
-      name: PrefixedIdentifier
-        identifier: SimpleIdentifier
-          staticElement: package:test/foo.dart::@extension::E
-          staticType: null
-          token: E
-        period: .
-        prefix: SimpleIdentifier
-          staticElement: self::@prefix::foo
-          staticType: null
-          token: foo
-        staticElement: package:test/foo.dart::@extension::E
-        staticType: null
-''',
-        withResolvedAst: true);
+    checkElementText(library, r'''
+library
+  imports
+    package:test/foo.dart as foo @21
+  definingUnit
+    classes
+      class C @41
+        metadata
+          Annotation
+            atSign.offset: 26
+            constructorName: SimpleIdentifier
+              staticElement: package:test/foo.dart::@extension::E::@getter::x
+              staticType: null
+              token: x @33
+            element: package:test/foo.dart::@extension::E::@getter::x
+            name: PrefixedIdentifier
+              identifier: SimpleIdentifier
+                staticElement: package:test/foo.dart::@extension::E
+                staticType: null
+                token: E @31
+              period: . @0
+              prefix: SimpleIdentifier
+                staticElement: self::@prefix::foo
+                staticType: null
+                token: foo @27
+              staticElement: package:test/foo.dart::@extension::E
+              staticType: null
+        constructors
+          synthetic @-1
+''');
   }
 
   test_method_documented() async {
@@ -12820,12 +25052,16 @@
   f() {}
 }''');
     checkElementText(library, r'''
-class C {
-  /**
-   * Docs
-   */
-  dynamic f() {}
-}
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          synthetic @-1
+        methods
+          f @34
+            documentationComment: /**\n   * Docs\n   */
+            returnType: dynamic
 ''');
   }
 
@@ -12855,12 +25091,28 @@
     var library = await checkLibrary('class C extends D { void f(value) {} }'
         ' abstract class D { void f(int value); }');
     checkElementText(library, r'''
-class C extends D {
-  void f(int value) {}
-}
-abstract class D {
-  void f(int value);
-}
+library
+  definingUnit
+    classes
+      class C @6
+        supertype: D
+        constructors
+          synthetic @-1
+        methods
+          f @25
+            parameters
+              requiredPositional value @27
+                type: int
+            returnType: void
+      abstract class D @54
+        constructors
+          synthetic @-1
+        methods
+          abstract f @63
+            parameters
+              requiredPositional value @69
+                type: int
+            returnType: void
 ''');
   }
 
@@ -12874,21 +25126,43 @@
 }
 ''');
     checkElementText(library, r'''
-class C extends D {
-  int f() {}
-}
-abstract class D {
-  int f();
-}
+library
+  definingUnit
+    classes
+      class C @6
+        supertype: D
+        constructors
+          synthetic @-1
+        methods
+          f @22
+            returnType: int
+      abstract class D @52
+        constructors
+          synthetic @-1
+        methods
+          abstract f @62
+            returnType: int
 ''');
   }
 
   test_method_type_parameter() async {
     var library = await checkLibrary('class C { T f<T, U>(U u) => null; }');
     checkElementText(library, r'''
-class C {
-  T f<T, U>(U u) {}
-}
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          synthetic @-1
+        methods
+          f @12
+            typeParameters
+              covariant T @14
+              covariant U @17
+            parameters
+              requiredPositional u @22
+                type: U
+            returnType: T
 ''');
   }
 
@@ -12899,18 +25173,54 @@
 }
 ''');
     checkElementText(library, r'''
-class C<T, U> {
-  V f<V, W>(T t, U u, W w) {}
-}
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+          covariant U @11
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+        methods
+          f @20
+            typeParameters
+              covariant V @22
+              covariant W @25
+            parameters
+              requiredPositional t @30
+                type: T
+              requiredPositional u @35
+                type: U
+              requiredPositional w @40
+                type: W
+            returnType: V
 ''');
   }
 
   test_method_type_parameter_with_function_typed_parameter() async {
     var library = await checkLibrary('class C { void f<T, U>(T x(U u)) {} }');
     checkElementText(library, r'''
-class C {
-  void f<T, U>(T Function(U) x/*(U u)*/) {}
-}
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          synthetic @-1
+        methods
+          f @15
+            typeParameters
+              covariant T @17
+              covariant U @20
+            parameters
+              requiredPositional x @25
+                type: T Function(U)
+                parameters
+                  requiredPositional u @29
+                    type: U
+            returnType: void
 ''');
   }
 
@@ -12925,13 +25235,40 @@
 var c = new B().a();
 ''');
     checkElementText(library, r'''
-class A {
-  double call() {}
-}
-class B {
-  A a;
-}
-double c;
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          synthetic @-1
+        methods
+          call @19
+            returnType: double
+      class B @42
+        fields
+          a @50
+            type: A
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get a @50
+            returnType: A
+          synthetic set a @50
+            parameters
+              requiredPositional _a @50
+                type: A
+            returnType: void
+    topLevelVariables
+      static c @59
+        type: double
+    accessors
+      synthetic static get c @59
+        returnType: double
+      synthetic static set c @59
+        parameters
+          requiredPositional _c @59
+            type: double
+        returnType: void
 ''');
   }
 
@@ -12950,20 +25287,65 @@
 }
 ''');
     checkElementText(library, r'''
-class A {
-}
-class B {
-}
-class C {
-}
-class D {
-}
-mixin M<T extends num = num, U> on A, B implements C, D {
-  T f;
-  U get g {}
-  void set s(int v) {}
-  int m(double v) {}
-}
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          synthetic @-1
+      class B @17
+        constructors
+          synthetic @-1
+      class C @28
+        constructors
+          synthetic @-1
+      class D @39
+        constructors
+          synthetic @-1
+    mixins
+      mixin M @51
+        typeParameters
+          covariant T @53
+            bound: num
+            defaultType: num
+          covariant U @68
+            defaultType: dynamic
+        superclassConstraints
+          A
+          B
+        interfaces
+          C
+          D
+        fields
+          synthetic g @-1
+            type: U
+          synthetic s @-1
+            type: int
+          f @101
+            type: T
+        constructors
+          synthetic @-1
+        accessors
+          get g @112
+            returnType: U
+          set s @126
+            parameters
+              requiredPositional v @132
+                type: int
+            returnType: void
+          synthetic get f @101
+            returnType: T
+          synthetic set f @101
+            parameters
+              requiredPositional _f @101
+                type: T
+            returnType: void
+        methods
+          m @144
+            parameters
+              requiredPositional v @153
+                type: double
+            returnType: int
 ''');
   }
 
@@ -12973,9 +25355,20 @@
   final x = 0;
 }''');
     checkElementText(library, r'''
-mixin M on Object {
-  final int x;
-}
+library
+  definingUnit
+    mixins
+      mixin M @6
+        superclassConstraints
+          Object
+        fields
+          final x @18
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get x @18
+            returnType: int
 ''');
   }
 
@@ -12996,8 +25389,14 @@
 mixin M {}
 ''');
     checkElementText(library, r'''
-mixin M on Object {
-}
+library
+  definingUnit
+    mixins
+      mixin M @6
+        superclassConstraints
+          Object
+        constructors
+          synthetic @-1
 ''');
   }
 
@@ -13009,13 +25408,30 @@
 class B extends A<int> with M {}
 ''');
     checkElementText(library, r'''
-class A<T> {
-}
-class B extends A<int*>* with M<int*>* {
-  synthetic B();
-}
-mixin M<U> on A<U*>* {
-}
+library
+  definingUnit
+    classes
+      class A @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+      class B @42
+        supertype: A<int*>*
+        mixins
+          M<int*>*
+        constructors
+          synthetic @-1
+    mixins
+      mixin M @20
+        typeParameters
+          covariant U @22
+            defaultType: dynamic
+        superclassConstraints
+          A<U*>*
+        constructors
+          synthetic @-1
 ''');
   }
 
@@ -13026,13 +25442,30 @@
 class B extends A<int> with M {}
 ''');
     checkElementText(library, r'''
-class A<T> {
-}
-class B extends A<int> with M<int> {
-  synthetic B();
-}
-mixin M<U> on A<U> {
-}
+library
+  definingUnit
+    classes
+      class A @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+      class B @42
+        supertype: A<int>
+        mixins
+          M<int>
+        constructors
+          synthetic @-1
+    mixins
+      mixin M @20
+        typeParameters
+          covariant U @22
+            defaultType: dynamic
+        superclassConstraints
+          A<U>
+        constructors
+          synthetic @-1
 ''');
   }
 
@@ -13050,10 +25483,18 @@
 class D extends A<int> with B<int>, C {}
 ''');
     checkElementText(library, r'''
-import 'a.dart';
-class D extends A<int*>* with B<int*>*, C<int*>* {
-  synthetic D();
-}
+library
+  imports
+    a.dart
+  definingUnit
+    classes
+      class D @37
+        supertype: A<int*>*
+        mixins
+          B<int*>*
+          C<int*>*
+        constructors
+          synthetic @-1
 ''');
   }
 
@@ -13068,10 +25509,17 @@
 class B extends A<int> with M {}
 ''');
     checkElementText(library, r'''
-import 'a.dart';
-class B extends A<int*>* with M<int*>* {
-  synthetic B();
-}
+library
+  imports
+    a.dart
+  definingUnit
+    classes
+      class B @38
+        supertype: A<int*>*
+        mixins
+          M<int*>*
+        constructors
+          synthetic @-1
 ''');
   }
 
@@ -13103,56 +25551,94 @@
 }
 ''');
     checkElementText(library, r'''
-class A {
-}
-mixin B on A {
-  void A() {}
-}
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          synthetic @-1
+    mixins
+      mixin B @17
+        superclassConstraints
+          A
+        constructors
+          synthetic @-1
+        methods
+          A @33
+            returnType: void
 ''');
   }
 
   test_mixin_typeParameters_variance_contravariant() async {
     var library = await checkLibrary('mixin M<in T> {}');
-    checkElementText(
-        library,
-        r'''
-mixin M<contravariant T> on Object {
-}
-''',
-        withTypeParameterVariance: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    mixins
+      mixin M @6
+        typeParameters
+          contravariant T @11
+            defaultType: dynamic
+        superclassConstraints
+          Object
+        constructors
+          synthetic @-1
+''');
   }
 
   test_mixin_typeParameters_variance_covariant() async {
     var library = await checkLibrary('mixin M<out T> {}');
-    checkElementText(
-        library,
-        r'''
-mixin M<covariant T> on Object {
-}
-''',
-        withTypeParameterVariance: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    mixins
+      mixin M @6
+        typeParameters
+          covariant T @12
+            defaultType: dynamic
+        superclassConstraints
+          Object
+        constructors
+          synthetic @-1
+''');
   }
 
   test_mixin_typeParameters_variance_invariant() async {
     var library = await checkLibrary('mixin M<inout T> {}');
-    checkElementText(
-        library,
-        r'''
-mixin M<invariant T> on Object {
-}
-''',
-        withTypeParameterVariance: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    mixins
+      mixin M @6
+        typeParameters
+          invariant T @14
+            defaultType: dynamic
+        superclassConstraints
+          Object
+        constructors
+          synthetic @-1
+''');
   }
 
   test_mixin_typeParameters_variance_multiple() async {
     var library = await checkLibrary('mixin M<inout T, in U, out V> {}');
-    checkElementText(
-        library,
-        r'''
-mixin M<invariant T, contravariant U, covariant V> on Object {
-}
-''',
-        withTypeParameterVariance: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    mixins
+      mixin M @6
+        typeParameters
+          invariant T @14
+            defaultType: dynamic
+          contravariant U @20
+            defaultType: dynamic
+          covariant V @27
+            defaultType: dynamic
+        superclassConstraints
+          Object
+        constructors
+          synthetic @-1
+''');
   }
 
   test_nameConflict_exportedAndLocal() async {
@@ -13166,8 +25652,21 @@
 C v = null;
 ''');
     checkElementText(library, r'''
-import 'c.dart';
-C v;
+library
+  imports
+    c.dart
+  definingUnit
+    topLevelVariables
+      static v @19
+        type: C
+    accessors
+      synthetic static get v @19
+        returnType: C
+      synthetic static set v @19
+        parameters
+          requiredPositional _v @19
+            type: C
+        returnType: void
 ''');
   }
 
@@ -13183,8 +25682,21 @@
 C v = null;
 ''');
     checkElementText(library, r'''
-import 'd.dart';
-C v;
+library
+  imports
+    d.dart
+  definingUnit
+    topLevelVariables
+      static v @19
+        type: C
+    accessors
+      synthetic static get v @19
+        returnType: C
+      synthetic static set v @19
+        parameters
+          requiredPositional _v @19
+            type: C
+        returnType: void
 ''');
   }
 
@@ -13204,8 +25716,21 @@
 C v = null;
 ''');
     checkElementText(library, r'''
-import 'c.dart';
-C v;
+library
+  imports
+    c.dart
+  definingUnit
+    topLevelVariables
+      static v @19
+        type: C
+    accessors
+      synthetic static get v @19
+        returnType: C
+      synthetic static set v @19
+        parameters
+          requiredPositional _v @19
+            type: C
+        returnType: void
 ''');
   }
 
@@ -13222,9 +25747,22 @@
 A v = null;
 ''');
     checkElementText(library, r'''
-import 'a.dart';
-import 'b.dart';
-A v;
+library
+  imports
+    a.dart
+    b.dart
+  definingUnit
+    topLevelVariables
+      static v @36
+        type: A
+    accessors
+      synthetic static get v @36
+        returnType: A
+      synthetic static set v @36
+        parameters
+          requiredPositional _v @36
+            type: A
+        returnType: void
 ''');
   }
 
@@ -13235,15 +25773,17 @@
   A.named();
 }
 ''');
-    checkElementText(
-        library,
-        r'''
-class A@6 {
-  A[nameOffset: 12]();
-  A.named[periodOffset: 20][nameOffset: 21][nameEnd: 26]();
-}
-''',
-        withOffsets: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          @12
+          named @21
+            periodOffset: 20
+            nameEnd: 26
+''');
   }
 
   test_nameOffset_class_constructor_parameter() async {
@@ -13252,14 +25792,17 @@
   A(int a);
 }
 ''');
-    checkElementText(
-        library,
-        r'''
-class A@6 {
-  A[nameOffset: 12](int a@18);
-}
-''',
-        withOffsets: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          @12
+            parameters
+              requiredPositional a @18
+                type: int
+''');
   }
 
   test_nameOffset_class_field() async {
@@ -13268,17 +25811,25 @@
   int foo = 0;
 }
 ''');
-    checkElementText(
-        library,
-        r'''
-class A@6 {
-  int foo@16;
-  synthetic int get foo@16 {}
-  synthetic void set foo@16(int _foo@16) {}
-}
-''',
-        withOffsets: true,
-        withSyntheticAccessors: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        fields
+          foo @16
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get foo @16
+            returnType: int
+          synthetic set foo @16
+            parameters
+              requiredPositional _foo @16
+                type: int
+            returnType: void
+''');
   }
 
   test_nameOffset_class_getter() async {
@@ -13287,14 +25838,20 @@
   int get foo => 0;
 }
 ''');
-    checkElementText(
-        library,
-        r'''
-class A@6 {
-  int get foo@20 {}
-}
-''',
-        withOffsets: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        fields
+          synthetic foo @-1
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          get foo @20
+            returnType: int
+''');
   }
 
   test_nameOffset_class_method() async {
@@ -13303,14 +25860,22 @@
   void foo<T>(int a) {}
 }
 ''');
-    checkElementText(
-        library,
-        r'''
-class A@6 {
-  void foo@17<T@21>(int a@28) {}
-}
-''',
-        withOffsets: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          synthetic @-1
+        methods
+          foo @17
+            typeParameters
+              covariant T @21
+            parameters
+              requiredPositional a @28
+                type: int
+            returnType: void
+''');
   }
 
   test_nameOffset_class_setter() async {
@@ -13319,125 +25884,183 @@
   set foo(int x) {}
 }
 ''');
-    checkElementText(
-        library,
-        r'''
-class A@6 {
-  void set foo@16(int x@24) {}
-}
-''',
-        withOffsets: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        fields
+          synthetic foo @-1
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          set foo @16
+            parameters
+              requiredPositional x @24
+                type: int
+            returnType: void
+''');
   }
 
   test_nameOffset_class_typeParameter() async {
     var library = await checkLibrary(r'''
 class A<T> {}
 ''');
-    checkElementText(
-        library,
-        r'''
-class A@6<T@8> {
-}
-''',
-        withOffsets: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+''');
   }
 
   test_nameOffset_extension_typeParameter() async {
     var library = await checkLibrary(r'''
 extension E<T> on int {}
 ''');
-    checkElementText(
-        library,
-        r'''
-extension E@10<T@12> on int {
-}
-''',
-        withOffsets: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    extensions
+      E @10
+        typeParameters
+          covariant T @12
+        extendedType: int
+''');
   }
 
   test_nameOffset_function_functionTypedFormal_parameter() async {
     var library = await checkLibrary(r'''
 void f(void f<U>(int a)) {}
 ''');
-    checkElementText(
-        library,
-        r'''
-void f@5(void Function<U>(int) f@12/*<U@14>*//*(int a@21)*/) {}
-''',
-        withOffsets: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    functions
+      f @5
+        parameters
+          requiredPositional f @12
+            type: void Function<U>(int)
+            typeParameters
+              covariant U @14
+            parameters
+              requiredPositional a @21
+                type: int
+        returnType: void
+''');
   }
 
   test_nameOffset_function_functionTypedFormal_parameter2() async {
     var library = await checkLibrary(r'''
 void f({required void f<U>(int a)}) {}
 ''');
-    checkElementText(
-        library,
-        r'''
-void f@5({void Function<U>(int) f@22/*<U@24>*//*(int a@31)*/}) {}
-''',
-        withOffsets: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    functions
+      f @5
+        parameters
+          requiredName f @22
+            type: void Function<U>(int)
+            typeParameters
+              covariant U @24
+            parameters
+              requiredPositional a @31
+                type: int
+        returnType: void
+''');
   }
 
   test_nameOffset_function_typeParameter() async {
     var library = await checkLibrary(r'''
 void f<T>() {}
 ''');
-    checkElementText(
-        library,
-        r'''
-void f@5<T@7>() {}
-''',
-        withOffsets: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    functions
+      f @5
+        typeParameters
+          covariant T @7
+        returnType: void
+''');
   }
 
   test_nameOffset_functionTypeAlias_typeParameter() async {
     var library = await checkLibrary(r'''
 typedef void F<T>();
 ''');
-    checkElementText(
-        library,
-        r'''
-typedef F@13<T@15> = void Function();
-''',
-        withOffsets: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased F @13
+        typeParameters
+          unrelated T @15
+            defaultType: dynamic
+        aliasedType: void Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: void
+''');
   }
 
   test_nameOffset_genericTypeAlias_typeParameter() async {
     var library = await checkLibrary(r'''
 typedef F<T> = void Function();
 ''');
-    checkElementText(
-        library,
-        r'''
-typedef F@8<T@10> = void Function();
-''',
-        withOffsets: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      F @8
+        typeParameters
+          unrelated T @10
+            defaultType: dynamic
+        aliasedType: void Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: void
+''');
   }
 
   test_nameOffset_mixin_typeParameter() async {
     var library = await checkLibrary(r'''
 mixin M<T> {}
 ''');
-    checkElementText(
-        library,
-        r'''
-mixin M@6<T@8> on Object {
-}
-''',
-        withOffsets: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    mixins
+      mixin M @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        superclassConstraints
+          Object
+        constructors
+          synthetic @-1
+''');
   }
 
   test_nameOffset_unit_getter() async {
     var library = await checkLibrary(r'''
 int get foo => 0;
 ''');
-    checkElementText(
-        library,
-        r'''
-int get foo@8 {}
-''',
-        withOffsets: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      synthetic static foo @-1
+        type: int
+    accessors
+      get foo @8
+        returnType: int
+''');
   }
 
   test_nested_generic_functions_in_generic_class_with_function_typed_params() async {
@@ -13450,9 +26073,23 @@
 }
 ''');
     checkElementText(library, r'''
-class C<T, U> {
-  void g<V, W>() {}
-}
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+          covariant U @11
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+        methods
+          g @23
+            typeParameters
+              covariant V @25
+              covariant W @28
+            returnType: void
 ''');
   }
 
@@ -13472,9 +26109,23 @@
 }
 ''');
     checkElementText(library, r'''
-class C<T, U> {
-  void g<V, W>() {}
-}
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+          covariant U @11
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+        methods
+          g @23
+            typeParameters
+              covariant V @25
+              covariant W @28
+            returnType: void
 ''');
   }
 
@@ -13488,7 +26139,14 @@
 }
 ''');
     checkElementText(library, r'''
-void f<T, U>() {}
+library
+  definingUnit
+    functions
+      f @5
+        typeParameters
+          covariant T @7
+          covariant U @10
+        returnType: void
 ''');
   }
 
@@ -13508,7 +26166,14 @@
 }
 ''');
     checkElementText(library, r'''
-void f<T, U>() {}
+library
+  definingUnit
+    functions
+      f @5
+        typeParameters
+          covariant T @7
+          covariant U @10
+        returnType: void
 ''');
   }
 
@@ -13518,8 +26183,17 @@
 typedef G = F Function();
 ''');
     checkElementText(library, r'''
-notSimplyBounded typedef F = dynamic Function() Function();
-notSimplyBounded typedef G = dynamic Function() Function();
+library
+  definingUnit
+    typeAliases
+      notSimplyBounded F @8
+        aliasedType: dynamic Function() Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: dynamic Function()
+      notSimplyBounded G @34
+        aliasedType: dynamic Function() Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: dynamic Function()
 ''');
   }
 
@@ -13528,7 +26202,13 @@
 typedef F = List<F> Function();
 ''');
     checkElementText(library, r'''
-notSimplyBounded typedef F = List<dynamic Function()> Function();
+library
+  definingUnit
+    typeAliases
+      notSimplyBounded F @8
+        aliasedType: List<dynamic Function()> Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: List<dynamic Function()>
 ''');
   }
 
@@ -13537,7 +26217,17 @@
 typedef F<T extends F> = void Function();
 ''');
     checkElementText(library, r'''
-notSimplyBounded typedef F<T extends dynamic Function()> = void Function();
+library
+  definingUnit
+    typeAliases
+      notSimplyBounded F @8
+        typeParameters
+          unrelated T @10
+            bound: dynamic Function()
+            defaultType: dynamic
+        aliasedType: void Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: void
 ''');
   }
 
@@ -13546,7 +26236,16 @@
 typedef F<T> = void Function();
 ''');
     checkElementText(library, r'''
-typedef F<T> = void Function();
+library
+  definingUnit
+    typeAliases
+      F @8
+        typeParameters
+          unrelated T @10
+            defaultType: dynamic
+        aliasedType: void Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: void
 ''');
   }
 
@@ -13555,7 +26254,13 @@
 typedef F = void Function();
 ''');
     checkElementText(library, r'''
-typedef F = void Function();
+library
+  definingUnit
+    typeAliases
+      F @8
+        aliasedType: void Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: void
 ''');
   }
 
@@ -13565,7 +26270,15 @@
 typedef F<T extends F> = List<int>;
 ''');
     checkElementText(library, r'''
-notSimplyBounded typedef F<T extends dynamic> = List<int>;
+library
+  definingUnit
+    typeAliases
+      notSimplyBounded F @8
+        typeParameters
+          unrelated T @10
+            bound: dynamic
+            defaultType: dynamic
+        aliasedType: List<int>
 ''');
   }
 
@@ -13575,7 +26288,11 @@
 typedef F = List<F>;
 ''');
     checkElementText(library, r'''
-notSimplyBounded typedef F = List<dynamic>;
+library
+  definingUnit
+    typeAliases
+      notSimplyBounded F @8
+        aliasedType: List<dynamic>
 ''');
   }
 
@@ -13584,7 +26301,17 @@
 typedef void F<T extends F>();
 ''');
     checkElementText(library, r'''
-notSimplyBounded typedef F<T extends dynamic Function()> = void Function();
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased notSimplyBounded F @13
+        typeParameters
+          unrelated T @15
+            bound: dynamic Function()
+            defaultType: dynamic
+        aliasedType: void Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: void
 ''');
   }
 
@@ -13593,14 +26320,29 @@
 typedef void F();
 ''');
     checkElementText(library, r'''
-typedef F = void Function();
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased F @13
+        aliasedType: void Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: void
 ''');
   }
 
   test_old_typedef_notSimplyBounded_simple_no_bounds() async {
     var library = await checkLibrary('typedef void F<T>();');
     checkElementText(library, r'''
-typedef F<T> = void Function();
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased F @13
+        typeParameters
+          unrelated T @15
+            defaultType: dynamic
+        aliasedType: void Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: void
 ''');
   }
 
@@ -13608,9 +26350,18 @@
     var library =
         await checkLibrary('class C { C operator+(C other) => null; }');
     checkElementText(library, r'''
-class C {
-  C +(C other) {}
-}
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          synthetic @-1
+        methods
+          + @20
+            parameters
+              requiredPositional other @24
+                type: C
+            returnType: C
 ''');
   }
 
@@ -13621,9 +26372,18 @@
 }
 ''');
     checkElementText(library, r'''
-class C {
-  bool ==(Object other) {}
-}
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          synthetic @-1
+        methods
+          == @25
+            parameters
+              requiredPositional other @35
+                type: Object
+            returnType: bool
 ''');
   }
 
@@ -13631,9 +26391,18 @@
     var library =
         await checkLibrary('class C { external C operator+(C other); }');
     checkElementText(library, r'''
-class C {
-  external C +(C other) {}
-}
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          synthetic @-1
+        methods
+          external + @29
+            parameters
+              requiredPositional other @33
+                type: C
+            returnType: C
 ''');
   }
 
@@ -13644,9 +26413,18 @@
 }
 ''');
     checkElementText(library, r'''
-class C {
-  bool >=(C other) {}
-}
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          synthetic @-1
+        methods
+          >= @25
+            parameters
+              requiredPositional other @30
+                type: C
+            returnType: bool
 ''');
   }
 
@@ -13654,9 +26432,18 @@
     var library =
         await checkLibrary('class C { bool operator[](int i) => null; }');
     checkElementText(library, r'''
-class C {
-  bool [](int i) {}
-}
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          synthetic @-1
+        methods
+          [] @23
+            parameters
+              requiredPositional i @30
+                type: int
+            returnType: bool
 ''');
   }
 
@@ -13667,9 +26454,20 @@
 }
 ''');
     checkElementText(library, r'''
-class C {
-  void []=(int i, bool v) {}
-}
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          synthetic @-1
+        methods
+          []= @25
+            parameters
+              requiredPositional i @33
+                type: int
+              requiredPositional v @41
+                type: bool
+            returnType: void
 ''');
   }
 
@@ -13680,20 +26478,33 @@
 }
 ''');
     checkElementText(library, r'''
-class C {
-  bool <=(C other) {}
-}
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          synthetic @-1
+        methods
+          <= @25
+            parameters
+              requiredPositional other @30
+                type: C
+            returnType: bool
 ''');
   }
 
   test_parameter() async {
     var library = await checkLibrary('void main(int p) {}');
-    checkElementText(
-        library,
-        r'''
-void main@5(int p@14) {}
-''',
-        withOffsets: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    functions
+      main @5
+        parameters
+          requiredPositional p @14
+            type: int
+        returnType: void
+''');
   }
 
   test_parameter_covariant_explicit_named() async {
@@ -13703,9 +26514,18 @@
 }
 ''');
     checkElementText(library, r'''
-class A {
-  void m({covariant A a}) {}
-}
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          synthetic @-1
+        methods
+          m @17
+            parameters
+              optionalNamed covariant a @32
+                type: A
+            returnType: void
 ''');
   }
 
@@ -13716,9 +26536,18 @@
 }
 ''');
     checkElementText(library, r'''
-class A {
-  void m([covariant A a]) {}
-}
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          synthetic @-1
+        methods
+          m @17
+            parameters
+              optionalPositional covariant a @32
+                type: A
+            returnType: void
 ''');
   }
 
@@ -13729,9 +26558,18 @@
 }
 ''');
     checkElementText(library, r'''
-class A {
-  void m(covariant A a) {}
-}
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          synthetic @-1
+        methods
+          m @17
+            parameters
+              requiredPositional covariant a @31
+                type: A
+            returnType: void
 ''');
   }
 
@@ -13745,12 +26583,34 @@
 }
 ''');
     checkElementText(library, r'''
-class A<T> {
-  void f(covariant T t) {}
-}
-class B<T> extends A<T> {
-  void f(covariant T t) {}
-}
+library
+  definingUnit
+    classes
+      class A @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+        methods
+          f @20
+            parameters
+              requiredPositional covariant t @34
+                type: T
+            returnType: void
+      class B @48
+        typeParameters
+          covariant T @50
+            defaultType: dynamic
+        supertype: A<T>
+        constructors
+          synthetic @-1
+        methods
+          f @75
+            parameters
+              requiredPositional covariant t @79
+                type: T
+            returnType: void
 ''');
   }
 
@@ -13764,48 +26624,113 @@
 }
 ''');
     checkElementText(library, r'''
-class A {
-  void m({covariant A a}) {}
-}
-class B extends A {
-  void m({covariant B a}) {}
-}
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          synthetic @-1
+        methods
+          m @17
+            parameters
+              optionalNamed covariant a @32
+                type: A
+            returnType: void
+      class B @47
+        supertype: A
+        constructors
+          synthetic @-1
+        methods
+          m @68
+            parameters
+              optionalNamed covariant a @73
+                type: B
+            returnType: void
 ''');
   }
 
   test_parameter_parameters() async {
     var library = await checkLibrary('class C { f(g(x, y)) {} }');
     checkElementText(library, r'''
-class C {
-  dynamic f(dynamic Function(dynamic, dynamic) g/*(dynamic x, dynamic y)*/) {}
-}
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          synthetic @-1
+        methods
+          f @10
+            parameters
+              requiredPositional g @12
+                type: dynamic Function(dynamic, dynamic)
+                parameters
+                  requiredPositional x @14
+                    type: dynamic
+                  requiredPositional y @17
+                    type: dynamic
+            returnType: dynamic
 ''');
   }
 
   test_parameter_parameters_in_generic_class() async {
     var library = await checkLibrary('class C<A, B> { f(A g(B x)) {} }');
     checkElementText(library, r'''
-class C<A, B> {
-  dynamic f(A Function(B) g/*(B x)*/) {}
-}
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          covariant A @8
+            defaultType: dynamic
+          covariant B @11
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+        methods
+          f @16
+            parameters
+              requiredPositional g @20
+                type: A Function(B)
+                parameters
+                  requiredPositional x @24
+                    type: B
+            returnType: dynamic
 ''');
   }
 
   test_parameter_return_type() async {
     var library = await checkLibrary('class C { f(int g()) {} }');
     checkElementText(library, r'''
-class C {
-  dynamic f(int Function() g) {}
-}
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          synthetic @-1
+        methods
+          f @10
+            parameters
+              requiredPositional g @16
+                type: int Function()
+            returnType: dynamic
 ''');
   }
 
   test_parameter_return_type_void() async {
     var library = await checkLibrary('class C { f(void g()) {} }');
     checkElementText(library, r'''
-class C {
-  dynamic f(void Function() g) {}
-}
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          synthetic @-1
+        methods
+          f @10
+            parameters
+              requiredPositional g @17
+                type: void Function()
+            returnType: dynamic
 ''');
   }
 
@@ -13814,7 +26739,20 @@
 void f(T a<T, U>(U u)) {}
 ''');
     checkElementText(library, r'''
-void f(T Function<T, U>(U) a/*<T, U>*//*(U u)*/) {}
+library
+  definingUnit
+    functions
+      f @5
+        parameters
+          requiredPositional a @9
+            type: T Function<T, U>(U)
+            typeParameters
+              covariant T @11
+              covariant U @14
+            parameters
+              requiredPositional u @19
+                type: U
+        returnType: void
 ''');
   }
 
@@ -13828,10 +26766,31 @@
 }
 ''');
     checkElementText(library, r'''
-class C {
-  C.positional([dynamic x = 1]);
-  C.named({dynamic x: 1});
-}
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          positional @14
+            periodOffset: 13
+            nameEnd: 24
+            parameters
+              optionalPositional x @26
+                type: dynamic
+                constantInitializer
+                  IntegerLiteral
+                    literal: 1 @0
+                    staticType: int
+          named @39
+            periodOffset: 38
+            nameEnd: 44
+            parameters
+              optionalNamed x @46
+                type: dynamic
+                constantInitializer
+                  IntegerLiteral
+                    literal: 1 @0
+                    staticType: int
 ''');
   }
 
@@ -13846,11 +26805,42 @@
 }
 ''');
     checkElementText(library, r'''
-class C {
-  dynamic x;
-  C.positional([final dynamic this.x = 1]);
-  C.named({final dynamic this.x: 1});
-}
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          x @16
+            type: dynamic
+        constructors
+          positional @23
+            periodOffset: 22
+            nameEnd: 33
+            parameters
+              optionalPositional final this.x @40
+                type: dynamic
+                constantInitializer
+                  IntegerLiteral
+                    literal: 1 @0
+                    staticType: int
+          named @53
+            periodOffset: 52
+            nameEnd: 58
+            parameters
+              optionalNamed final this.x @65
+                type: dynamic
+                constantInitializer
+                  IntegerLiteral
+                    literal: 1 @0
+                    staticType: int
+        accessors
+          synthetic get x @16
+            returnType: dynamic
+          synthetic set x @16
+            parameters
+              requiredPositional _x @16
+                type: dynamic
+            returnType: void
 ''');
   }
 
@@ -13864,10 +26854,31 @@
 }
 ''');
     checkElementText(library, r'''
-class C {
-  static void positional([dynamic x = 1]) {}
-  static void named({dynamic x: 1}) {}
-}
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          synthetic @-1
+        methods
+          static positional @24
+            parameters
+              optionalPositional x @36
+                type: dynamic
+                constantInitializer
+                  IntegerLiteral
+                    literal: 1 @0
+                    staticType: int
+            returnType: void
+          static named @61
+            parameters
+              optionalNamed x @68
+                type: dynamic
+                constantInitializer
+                  IntegerLiteral
+                    literal: 1 @0
+                    staticType: int
+            returnType: void
 ''');
   }
 
@@ -13880,8 +26891,27 @@
 void named({x: 1}) {}
 ''');
     checkElementText(library, r'''
-void positional([dynamic x = 1]) {}
-void named({dynamic x: 1}) {}
+library
+  definingUnit
+    functions
+      positional @5
+        parameters
+          optionalPositional x @17
+            type: dynamic
+            constantInitializer
+              IntegerLiteral
+                literal: 1 @0
+                staticType: int
+        returnType: void
+      named @33
+        parameters
+          optionalNamed x @40
+            type: dynamic
+            constantInitializer
+              IntegerLiteral
+                literal: 1 @0
+                staticType: int
+        returnType: void
 ''');
   }
 
@@ -13891,11 +26921,18 @@
 class B extends A {}
 ''');
     checkElementText(library, r'''
-part 'test.dart';
-class B {
-}
-class B {
-}
+library
+  definingUnit
+    classes
+      class B @15
+        constructors
+          synthetic @-1
+  parts
+
+      classes
+        class B @15
+          constructors
+            synthetic @-1
 ''');
   }
 
@@ -13912,15 +26949,13 @@
     var library =
         await checkLibrary('library my.lib; part "a.dart"; part "b.dart";');
     checkElementText(library, r'''
-library my.lib;
-part 'a.dart';
-part 'b.dart';
---------------------
-unit: a.dart
-
---------------------
-unit: b.dart
-
+library
+  name: my.lib
+  nameOffset: 8
+  definingUnit
+  parts
+    a.dart
+    b.dart
 ''');
   }
 
@@ -13928,11 +26963,12 @@
     addSource('/foo/bar.dart', 'part of my.lib;');
     var library = await checkLibrary('library my.lib; part "foo/";');
     checkElementText(library, r'''
-library my.lib;
-part '';
---------------------
-unit: foo
-
+library
+  name: my.lib
+  nameOffset: 8
+  definingUnit
+  parts
+    foo/
 ''');
   }
 
@@ -13943,7 +26979,10 @@
 part "${foo}/bar.dart";
 ''');
     checkElementText(library, r'''
-library my.lib;
+library
+  name: my.lib
+  nameOffset: 8
+  definingUnit
 ''');
   }
 
@@ -13955,7 +26994,11 @@
 }
 ''');
     checkElementText(library, r'''
-void f() {}
+library
+  definingUnit
+    functions
+      f @5
+        returnType: void
 ''');
   }
 
@@ -13963,9 +27006,21 @@
     var library =
         await checkLibrary('class C { void set x(covariant int value); }');
     checkElementText(library, r'''
-class C {
-  void set x(covariant int value);
-}
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          synthetic x @-1
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          abstract set x @19
+            parameters
+              requiredPositional covariant value @35
+                type: int
+            returnType: void
 ''');
   }
 
@@ -13977,17 +27032,35 @@
  */
 void set x(value) {}''');
     checkElementText(library, r'''
-/**
- * Docs
- */
-void set x(dynamic value) {}
+library
+  definingUnit
+    topLevelVariables
+      synthetic static x @-1
+        type: dynamic
+    accessors
+      set x @69
+        documentationComment: /**\n * Docs\n */
+        parameters
+          requiredPositional value @71
+            type: dynamic
+        returnType: void
 ''');
   }
 
   test_setter_external() async {
     var library = await checkLibrary('external void set x(int value);');
     checkElementText(library, r'''
-external void set x(int value);
+library
+  definingUnit
+    topLevelVariables
+      synthetic static x @-1
+        type: int
+    accessors
+      external set x @18
+        parameters
+          requiredPositional value @24
+            type: int
+        returnType: void
 ''');
   }
 
@@ -14006,17 +27079,57 @@
 }
 ''');
     checkElementText(library, r'''
-class A {
-  int t;
-}
-class B extends A {
-  double t;
-}
-class C extends A implements B {
-}
-class D extends C {
-  void set t(dynamic p) {}
-}
+library
+  definingUnit
+    classes
+      class A @6
+        fields
+          t @16
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get t @16
+            returnType: int
+          synthetic set t @16
+            parameters
+              requiredPositional _t @16
+                type: int
+            returnType: void
+      class B @27
+        supertype: A
+        fields
+          t @50
+            type: double
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get t @50
+            returnType: double
+          synthetic set t @50
+            parameters
+              requiredPositional _t @50
+                type: double
+            returnType: void
+      class C @61
+        supertype: A
+        interfaces
+          B
+        constructors
+          synthetic @-1
+      class D @96
+        supertype: C
+        fields
+          synthetic t @-1
+            type: dynamic
+        constructors
+          synthetic @-1
+        accessors
+          set t @121
+            parameters
+              requiredPositional p @123
+                type: dynamic
+            returnType: void
 ''');
   }
 
@@ -14025,12 +27138,34 @@
         await checkLibrary('class C extends D { void set f(value) {} }'
             ' abstract class D { void set f(int value); }');
     checkElementText(library, r'''
-class C extends D {
-  void set f(int value) {}
-}
-abstract class D {
-  void set f(int value);
-}
+library
+  definingUnit
+    classes
+      class C @6
+        supertype: D
+        fields
+          synthetic f @-1
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          set f @29
+            parameters
+              requiredPositional value @31
+                type: int
+            returnType: void
+      abstract class D @58
+        fields
+          synthetic f @-1
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          abstract set f @71
+            parameters
+              requiredPositional value @77
+                type: int
+            returnType: void
 ''');
   }
 
@@ -14041,16 +27176,38 @@
 }
 ''');
     checkElementText(library, r'''
-class C {
-  static void set f(int value) {}
-}
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          synthetic static f @-1
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          static set f @23
+            parameters
+              requiredPositional value @29
+                type: int
+            returnType: void
 ''');
   }
 
   test_setter_inferred_type_top_level_implicit_return() async {
     var library = await checkLibrary('set f(int value) {}');
     checkElementText(library, r'''
-void set f(int value) {}
+library
+  definingUnit
+    topLevelVariables
+      synthetic static f @-1
+        type: int
+    accessors
+      set f @4
+        parameters
+          requiredPositional value @10
+            type: int
+        returnType: void
 ''');
   }
 
@@ -14058,8 +27215,24 @@
     var library =
         await checkLibrary('void set x(int value) {} set y(value) {}');
     checkElementText(library, r'''
-void set x(int value) {}
-void set y(dynamic value) {}
+library
+  definingUnit
+    topLevelVariables
+      synthetic static x @-1
+        type: int
+      synthetic static y @-1
+        type: dynamic
+    accessors
+      set x @9
+        parameters
+          requiredPositional value @15
+            type: int
+        returnType: void
+      set y @29
+        parameters
+          requiredPositional value @31
+            type: dynamic
+        returnType: void
 ''');
   }
 
@@ -14069,8 +27242,17 @@
 bool f() => true;
 ''');
     checkElementText(library, r'''
-final int Function<T>(T) v;
-bool f() {}
+library
+  definingUnit
+    topLevelVariables
+      static final v @6
+        type: int Function<T>(T)
+    accessors
+      synthetic static get v @6
+        returnType: int Function<T>(T)
+    functions
+      f @52
+        returnType: bool
 ''');
   }
 
@@ -14081,7 +27263,17 @@
 }
 ''');
     checkElementText(library, r'''
-void f<T, U>(bool b) {}
+library
+  definingUnit
+    functions
+      f @5
+        typeParameters
+          covariant T @7
+          covariant U @10
+        parameters
+          requiredPositional b @18
+            type: bool
+        returnType: void
 ''');
   }
 
@@ -14093,10 +27285,31 @@
 bool f() => false;
 ''');
     checkElementText(library, r'''
-class C<T, U> {
-  int Function(T, U) v;
-}
-bool f() {}
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+          covariant U @11
+            defaultType: dynamic
+        fields
+          v @22
+            type: int Function(T, U)
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get v @22
+            returnType: int Function(T, U)
+          synthetic set v @22
+            parameters
+              requiredPositional _v @22
+                type: int Function(T, U)
+            returnType: void
+    functions
+      f @74
+        returnType: bool
 ''');
   }
 
@@ -14107,7 +27320,17 @@
 }
 ''');
     checkElementText(library, r'''
-void f<T, U>(bool b) {}
+library
+  definingUnit
+    functions
+      f @5
+        typeParameters
+          covariant T @7
+          covariant U @10
+        parameters
+          requiredPositional b @18
+            type: bool
+        returnType: void
 ''');
   }
 
@@ -14117,8 +27340,17 @@
 bool f() => true;
 ''');
     checkElementText(library, r'''
-final int Function() v;
-bool f() {}
+library
+  definingUnit
+    topLevelVariables
+      static final v @6
+        type: int Function()
+    accessors
+      synthetic static get v @6
+        returnType: int Function()
+    functions
+      f @40
+        returnType: bool
 ''');
   }
 
@@ -14128,8 +27360,17 @@
 bool f() => true;
 ''');
     checkElementText(library, r'''
-final int Function(int, String) v;
-bool f() {}
+library
+  definingUnit
+    topLevelVariables
+      static final v @6
+        type: int Function(int, String)
+    accessors
+      synthetic static get v @6
+        returnType: int Function(int, String)
+    functions
+      f @70
+        returnType: bool
 ''');
   }
 
@@ -14137,50 +27378,134 @@
     var library = await checkLibrary('''
 external int i;
 ''');
-    checkElementText(library, '''
-external int i;
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static i @13
+        type: int
+    accessors
+      synthetic static get i @13
+        returnType: int
+      synthetic static set i @13
+        parameters
+          requiredPositional _i @13
+            type: int
+        returnType: void
 ''');
   }
 
   test_type_arguments_explicit_dynamic_dynamic() async {
     var library = await checkLibrary('Map<dynamic, dynamic> m;');
     checkElementText(library, r'''
-Map<dynamic, dynamic> m;
+library
+  definingUnit
+    topLevelVariables
+      static m @22
+        type: Map<dynamic, dynamic>
+    accessors
+      synthetic static get m @22
+        returnType: Map<dynamic, dynamic>
+      synthetic static set m @22
+        parameters
+          requiredPositional _m @22
+            type: Map<dynamic, dynamic>
+        returnType: void
 ''');
   }
 
   test_type_arguments_explicit_dynamic_int() async {
     var library = await checkLibrary('Map<dynamic, int> m;');
     checkElementText(library, r'''
-Map<dynamic, int> m;
+library
+  definingUnit
+    topLevelVariables
+      static m @18
+        type: Map<dynamic, int>
+    accessors
+      synthetic static get m @18
+        returnType: Map<dynamic, int>
+      synthetic static set m @18
+        parameters
+          requiredPositional _m @18
+            type: Map<dynamic, int>
+        returnType: void
 ''');
   }
 
   test_type_arguments_explicit_String_dynamic() async {
     var library = await checkLibrary('Map<String, dynamic> m;');
     checkElementText(library, r'''
-Map<String, dynamic> m;
+library
+  definingUnit
+    topLevelVariables
+      static m @21
+        type: Map<String, dynamic>
+    accessors
+      synthetic static get m @21
+        returnType: Map<String, dynamic>
+      synthetic static set m @21
+        parameters
+          requiredPositional _m @21
+            type: Map<String, dynamic>
+        returnType: void
 ''');
   }
 
   test_type_arguments_explicit_String_int() async {
     var library = await checkLibrary('Map<String, int> m;');
     checkElementText(library, r'''
-Map<String, int> m;
+library
+  definingUnit
+    topLevelVariables
+      static m @17
+        type: Map<String, int>
+    accessors
+      synthetic static get m @17
+        returnType: Map<String, int>
+      synthetic static set m @17
+        parameters
+          requiredPositional _m @17
+            type: Map<String, int>
+        returnType: void
 ''');
   }
 
   test_type_arguments_implicit() async {
     var library = await checkLibrary('Map m;');
     checkElementText(library, r'''
-Map<dynamic, dynamic> m;
+library
+  definingUnit
+    topLevelVariables
+      static m @4
+        type: Map<dynamic, dynamic>
+    accessors
+      synthetic static get m @4
+        returnType: Map<dynamic, dynamic>
+      synthetic static set m @4
+        parameters
+          requiredPositional _m @4
+            type: Map<dynamic, dynamic>
+        returnType: void
 ''');
   }
 
   test_type_dynamic() async {
     var library = await checkLibrary('dynamic d;');
     checkElementText(library, r'''
-dynamic d;
+library
+  definingUnit
+    topLevelVariables
+      static d @8
+        type: dynamic
+    accessors
+      synthetic static get d @8
+        returnType: dynamic
+      synthetic static set d @8
+        parameters
+          requiredPositional _d @8
+            type: dynamic
+        returnType: void
 ''');
   }
 
@@ -14192,9 +27517,29 @@
 };
 var b = 0;
 ''');
-    checkElementText(library, '''
-int Function() a;
-int b;
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static a @4
+        type: int Function()
+      static b @42
+        type: int
+    accessors
+      synthetic static get a @4
+        returnType: int Function()
+      synthetic static set a @4
+        parameters
+          requiredPositional _a @4
+            type: int Function()
+        returnType: void
+      synthetic static get b @42
+        returnType: int
+      synthetic static set b @42
+        parameters
+          requiredPositional _b @42
+            type: int
+        returnType: void
 ''');
   }
 
@@ -14204,9 +27549,22 @@
 import 'a.dart' deferred as a;
 var x = a.loadLibrary;
 ''');
-    checkElementText(library, '''
-import 'a.dart' deferred as a;
-Future<dynamic> Function() x;
+    checkElementText(library, r'''
+library
+  imports
+    a.dart deferred as a @28
+  definingUnit
+    topLevelVariables
+      static x @35
+        type: Future<dynamic> Function()
+    accessors
+      synthetic static get x @35
+        returnType: Future<dynamic> Function()
+      synthetic static set x @35
+        parameters
+          requiredPositional _x @35
+            type: Future<dynamic> Function()
+        returnType: void
 ''');
   }
 
@@ -14214,8 +27572,20 @@
     var library = await checkLibrary('''
 var x = (int f(String x)) => 0;
 ''');
-    checkElementText(library, '''
-int Function(int Function(String)) x;
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static x @4
+        type: int Function(int Function(String))
+    accessors
+      synthetic static get x @4
+        returnType: int Function(int Function(String))
+      synthetic static set x @4
+        parameters
+          requiredPositional _x @4
+            type: int Function(int Function(String))
+        returnType: void
 ''');
   }
 
@@ -14223,8 +27593,20 @@
     var library = await checkLibrary('''
 var x = (int Function(String) f) => 0;
 ''');
-    checkElementText(library, '''
-int Function(int Function(String)) x;
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static x @4
+        type: int Function(int Function(String))
+    accessors
+      synthetic static get x @4
+        returnType: int Function(int Function(String))
+      synthetic static set x @4
+        parameters
+          requiredPositional _x @4
+            type: int Function(int Function(String))
+        returnType: void
 ''');
   }
 
@@ -14235,9 +27617,22 @@
 import 'a.dart';
 var y = x;
 ''');
-    checkElementText(library, '''
-import 'a.dart';
-int y;
+    checkElementText(library, r'''
+library
+  imports
+    a.dart
+  definingUnit
+    topLevelVariables
+      static y @21
+        type: int
+    accessors
+      synthetic static get y @21
+        returnType: int
+      synthetic static set y @21
+        parameters
+          requiredPositional _y @21
+            type: int
+        returnType: void
 ''');
   }
 
@@ -14254,13 +27649,43 @@
 }
 ''');
     checkElementText(library, r'''
-class A<T> {
-  T value;
-  A(final T this.value);
-}
-class B {
-  A<String> a;
-}
+library
+  definingUnit
+    classes
+      class A @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        fields
+          value @17
+            type: T
+        constructors
+          @27
+            parameters
+              requiredPositional final this.value @34
+                type: T
+        accessors
+          synthetic get value @17
+            returnType: T
+          synthetic set value @17
+            parameters
+              requiredPositional _value @17
+                type: T
+            returnType: void
+      class B @51
+        fields
+          a @61
+            type: A<String>
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get a @61
+            returnType: A<String>
+          synthetic set a @61
+            parameters
+              requiredPositional _a @61
+                type: A<String>
+            returnType: void
 ''');
   }
 
@@ -14281,19 +27706,72 @@
 mixin M {}
 ''');
     checkElementText(library, r'''
-class A<T> {
-  T value;
-  A(final T this.value);
-}
-class alias B<T> extends A<T> with M {
-  synthetic B(final T value) : super(
-        value/*location: test.dart;B;;value*/);
-}
-class C {
-  B<int> a;
-}
-mixin M on Object {
-}
+library
+  definingUnit
+    classes
+      class A @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        fields
+          value @17
+            type: T
+        constructors
+          @27
+            parameters
+              requiredPositional final this.value @34
+                type: T
+        accessors
+          synthetic get value @17
+            returnType: T
+          synthetic set value @17
+            parameters
+              requiredPositional _value @17
+                type: T
+            returnType: void
+      class alias B @51
+        typeParameters
+          covariant T @53
+            defaultType: dynamic
+        supertype: A<T>
+        mixins
+          M
+        constructors
+          synthetic @-1
+            parameters
+              requiredPositional final value @-1
+                type: T
+            constantInitializers
+              SuperConstructorInvocation
+                argumentList: ArgumentList
+                  arguments
+                    SimpleIdentifier
+                      staticElement: value@-1
+                      staticType: T
+                      token: value @-1
+                  leftParenthesis: ( @0
+                  rightParenthesis: ) @0
+                staticElement: self::@class::A::@constructor::•
+      class C @78
+        fields
+          a @88
+            type: B<int>
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get a @88
+            returnType: B<int>
+          synthetic set a @88
+            parameters
+              requiredPositional _a @88
+                type: B<int>
+            returnType: void
+    mixins
+      mixin M @112
+        superclassConstraints
+          Object
+        constructors
+          synthetic @-1
 ''');
   }
 
@@ -14305,10 +27783,29 @@
 }
 ''');
     checkElementText(library, r'''
-class A<T> {
-  int f;
-  A(final int this.f);
-}
+library
+  definingUnit
+    classes
+      class A @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        fields
+          f @19
+            type: int
+        constructors
+          @28
+            parameters
+              requiredPositional final this.f @35
+                type: int
+        accessors
+          synthetic get f @19
+            returnType: int
+          synthetic set f @19
+            parameters
+              requiredPositional _f @19
+                type: int
+            returnType: void
 ''');
   }
 
@@ -14322,12 +27819,36 @@
 ''');
     // There is no cycle with `a` and `b`, because `A` is not generic,
     // so the type of `new A(...)` does not depend on its arguments.
-    checkElementText(library, '''
-class A {
-  A(dynamic _);
-}
-A a;
-A b;
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          @12
+            parameters
+              requiredPositional _ @14
+                type: dynamic
+    topLevelVariables
+      static a @24
+        type: A
+      static b @44
+        type: A
+    accessors
+      synthetic static get a @24
+        returnType: A
+      synthetic static set a @24
+        parameters
+          requiredPositional _a @24
+            type: A
+        returnType: void
+      synthetic static get b @44
+        returnType: A
+      synthetic static set b @44
+        parameters
+          requiredPositional _b @44
+            type: A
+        returnType: void
 ''');
   }
 
@@ -14340,9 +27861,22 @@
 var v = C;
 ''');
     checkElementText(library, r'''
-import 'a.dart';
-import 'b.dart';
-dynamic v;
+library
+  imports
+    a.dart
+    b.dart
+  definingUnit
+    topLevelVariables
+      static v @38
+        type: dynamic
+    accessors
+      synthetic static get v @38
+        returnType: dynamic
+      synthetic static set v @38
+        parameters
+          requiredPositional _v @38
+            type: dynamic
+        returnType: void
 ''');
   }
 
@@ -14350,8 +27884,20 @@
     var library = await checkLibrary('''
 var x = (t) => (u) => t + u;
 ''');
-    checkElementText(library, '''
-dynamic Function(dynamic) Function(dynamic) x;
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static x @4
+        type: dynamic Function(dynamic) Function(dynamic)
+    accessors
+      synthetic static get x @4
+        returnType: dynamic Function(dynamic) Function(dynamic)
+      synthetic static set x @4
+        parameters
+          requiredPositional _x @4
+            type: dynamic Function(dynamic) Function(dynamic)
+        returnType: void
 ''');
   }
 
@@ -14359,8 +27905,20 @@
     var library = await checkLibrary('''
 var x = (int t) => (int u) => t + u;
 ''');
-    checkElementText(library, '''
-int Function(int) Function(int) x;
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static x @4
+        type: int Function(int) Function(int)
+    accessors
+      synthetic static get x @4
+        returnType: int Function(int) Function(int)
+      synthetic static set x @4
+        parameters
+          requiredPositional _x @4
+            type: int Function(int) Function(int)
+        returnType: void
 ''');
   }
 
@@ -14368,8 +27926,20 @@
     var library = await checkLibrary('''
 var x = ([y: 0]) => y;
 ''');
-    checkElementText(library, '''
-dynamic Function([dynamic]) x;
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static x @4
+        type: dynamic Function([dynamic])
+    accessors
+      synthetic static get x @4
+        returnType: dynamic Function([dynamic])
+      synthetic static set x @4
+        parameters
+          requiredPositional _x @4
+            type: dynamic Function([dynamic])
+        returnType: void
 ''');
   }
 
@@ -14388,16 +27958,42 @@
 final c = C(b);
 ''');
     checkElementText(library, r'''
-class A {
-}
-class B extends A {
-}
-class C<T extends A = A> {
-  final T f;
-  const C(final T this.f);
-}
-final B b;
-final C<B> c;
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          synthetic @-1
+      class B @18
+        supertype: A
+        constructors
+          synthetic @-1
+      class C @40
+        typeParameters
+          covariant T @42
+            bound: A
+            defaultType: A
+        fields
+          final f @67
+            type: T
+        constructors
+          const @78
+            parameters
+              requiredPositional final this.f @85
+                type: T
+        accessors
+          synthetic get f @67
+            returnType: T
+    topLevelVariables
+      static final b @98
+        type: B
+      static final c @113
+        type: C<B>
+    accessors
+      synthetic static get b @98
+        returnType: B
+      synthetic static get c @113
+        returnType: C<B>
 ''');
   }
 
@@ -14408,11 +28004,29 @@
 }
 var v = 'a'.foo;
 ''');
-    checkElementText(library, '''
-extension  on String {
-  int get foo {}
-}
-int v;
+    checkElementText(library, r'''
+library
+  definingUnit
+    extensions
+      @-1
+        extendedType: String
+        fields
+          synthetic foo @-1
+            type: int
+        accessors
+          get foo @32
+            returnType: int
+    topLevelVariables
+      static v @48
+        type: int
+    accessors
+      synthetic static get v @48
+        returnType: int
+      synthetic static set v @48
+        parameters
+          requiredPositional _v @48
+            type: int
+        returnType: void
 ''');
   }
 
@@ -14425,12 +28039,50 @@
 int V = 0;
 ''', allowErrors: true);
     checkElementText(library, r'''
-typedef F = dynamic Function(dynamic p);
-class C<T extends dynamic> {
-}
-dynamic V2;
-int V;
-dynamic f(dynamic p) {}
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          covariant T @8
+            bound: dynamic
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+    typeAliases
+      functionTypeAliasBased F @34
+        aliasedType: dynamic Function(dynamic)
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional p @-1
+              type: dynamic
+          returnType: dynamic
+    topLevelVariables
+      static V2 @56
+        type: dynamic
+      static V @71
+        type: int
+    accessors
+      synthetic static get V2 @56
+        returnType: dynamic
+      synthetic static set V2 @56
+        parameters
+          requiredPositional _V2 @56
+            type: dynamic
+        returnType: void
+      synthetic static get V @71
+        returnType: int
+      synthetic static set V @71
+        parameters
+          requiredPositional _V @71
+            type: int
+        returnType: void
+    functions
+      f @44
+        parameters
+          requiredPositional p @48
+            type: dynamic
+        returnType: dynamic
 ''');
   }
 
@@ -14440,8 +28092,28 @@
 static List<V> V2;
 ''', allowErrors: true);
     checkElementText(library, r'''
-dynamic V;
-List<dynamic> V2;
+library
+  definingUnit
+    topLevelVariables
+      static V @4
+        type: dynamic
+      static V2 @22
+        type: List<dynamic>
+    accessors
+      synthetic static get V @4
+        returnType: dynamic
+      synthetic static set V @4
+        parameters
+          requiredPositional _V @4
+            type: dynamic
+        returnType: void
+      synthetic static get V2 @22
+        returnType: List<dynamic>
+      synthetic static set V2 @22
+        parameters
+          requiredPositional _V2 @22
+            type: List<dynamic>
+        returnType: void
 ''');
   }
 
@@ -14452,9 +28124,21 @@
 }
 ''', allowErrors: true);
     checkElementText(library, r'''
-class C<T> {
-  dynamic m(dynamic p) {}
-}
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+        methods
+          m @15
+            parameters
+              requiredPositional p @21
+                type: dynamic
+            returnType: dynamic
 ''');
   }
 
@@ -14463,7 +28147,19 @@
 p.C v;
 ''', allowErrors: true);
     checkElementText(library, r'''
-dynamic v;
+library
+  definingUnit
+    topLevelVariables
+      static v @4
+        type: dynamic
+    accessors
+      synthetic static get v @4
+        returnType: dynamic
+      synthetic static set v @4
+        parameters
+          requiredPositional _v @4
+            type: dynamic
+        returnType: void
 ''');
   }
 
@@ -14471,14 +28167,38 @@
     featureSet = FeatureSets.beforeNullSafe;
     var library = await checkLibrary('Never d;');
     checkElementText(library, r'''
-Null* d;
+library
+  definingUnit
+    topLevelVariables
+      static d @6
+        type: Null*
+    accessors
+      synthetic static get d @6
+        returnType: Null*
+      synthetic static set d @6
+        parameters
+          requiredPositional _d @6
+            type: Null*
+        returnType: void
 ''');
   }
 
   test_type_never_enableNnbd() async {
     var library = await checkLibrary('Never d;');
     checkElementText(library, r'''
-Never d;
+library
+  definingUnit
+    topLevelVariables
+      static d @6
+        type: Never
+    accessors
+      synthetic static get d @6
+        returnType: Never
+      synthetic static set d @6
+        parameters
+          requiredPositional _d @6
+            type: Never
+        returnType: void
 ''');
   }
 
@@ -14488,10 +28208,27 @@
   T t;
 }
 ''');
-    checkElementText(library, '''
-class C<T> {
-  T t;
-}
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        fields
+          t @17
+            type: T
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get t @17
+            returnType: T
+          synthetic set t @17
+            parameters
+              requiredPositional _t @17
+                type: T
+            returnType: void
 ''');
   }
 
@@ -14501,10 +28238,27 @@
   T? t;
 }
 ''');
-    checkElementText(library, '''
-class C<T> {
-  T? t;
-}
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        fields
+          t @18
+            type: T?
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get t @18
+            returnType: T?
+          synthetic set t @18
+            parameters
+              requiredPositional _t @18
+                type: T?
+            returnType: void
 ''');
   }
 
@@ -14515,10 +28269,27 @@
   T t;
 }
 ''');
-    checkElementText(library, '''
-class C<T> {
-  T* t;
-}
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        fields
+          t @17
+            type: T*
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get t @17
+            returnType: T*
+          synthetic set t @17
+            parameters
+              requiredPositional _t @17
+                type: T*
+            returnType: void
 ''');
   }
 
@@ -14531,18 +28302,68 @@
 E e;
 F f;''');
     checkElementText(library, r'''
-typedef F = dynamic Function();
-enum E {
-  synthetic final int index;
-  synthetic static const List<E> values;
-  static const E v;
-  String toString() {}
-}
-class C {
-}
-C c;
-E e;
-dynamic Function() f;
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          synthetic @-1
+    enums
+      enum E @16
+        fields
+          synthetic final index @-1
+            type: int
+          synthetic static const values @-1
+            type: List<E>
+          static const v @20
+            type: E
+        accessors
+          synthetic get index @-1
+            returnType: int
+          synthetic static get values @-1
+            returnType: List<E>
+          synthetic static get v @-1
+            returnType: E
+        methods
+          toString @-1
+            returnType: String
+    typeAliases
+      functionTypeAliasBased F @32
+        aliasedType: dynamic Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: dynamic
+    topLevelVariables
+      static c @39
+        type: C
+      static e @44
+        type: E
+      static f @49
+        type: dynamic Function()
+          aliasElement: self::@typeAlias::F
+    accessors
+      synthetic static get c @39
+        returnType: C
+      synthetic static set c @39
+        parameters
+          requiredPositional _c @39
+            type: C
+        returnType: void
+      synthetic static get e @44
+        returnType: E
+      synthetic static set e @44
+        parameters
+          requiredPositional _e @44
+            type: E
+        returnType: void
+      synthetic static get f @49
+        returnType: dynamic Function()
+          aliasElement: self::@typeAlias::F
+      synthetic static set f @49
+        parameters
+          requiredPositional _f @49
+            type: dynamic Function()
+              aliasElement: self::@typeAlias::F
+        returnType: void
 ''');
   }
 
@@ -14551,23 +28372,72 @@
     var library =
         await checkLibrary('library l; part "a.dart"; C c; E e; F f;');
     checkElementText(library, r'''
-library l;
-part 'a.dart';
-C c;
-E e;
-dynamic Function() f;
---------------------
-unit: a.dart
-
-typedef F = dynamic Function();
-enum E {
-  synthetic final int index;
-  synthetic static const List<E> values;
-  static const E v;
-  String toString() {}
-}
-class C {
-}
+library
+  name: l
+  nameOffset: 8
+  definingUnit
+    topLevelVariables
+      static c @28
+        type: C
+      static e @33
+        type: E
+      static f @38
+        type: dynamic Function()
+          aliasElement: self::@typeAlias::F
+    accessors
+      synthetic static get c @28
+        returnType: C
+      synthetic static set c @28
+        parameters
+          requiredPositional _c @28
+            type: C
+        returnType: void
+      synthetic static get e @33
+        returnType: E
+      synthetic static set e @33
+        parameters
+          requiredPositional _e @33
+            type: E
+        returnType: void
+      synthetic static get f @38
+        returnType: dynamic Function()
+          aliasElement: self::@typeAlias::F
+      synthetic static set f @38
+        parameters
+          requiredPositional _f @38
+            type: dynamic Function()
+              aliasElement: self::@typeAlias::F
+        returnType: void
+  parts
+    a.dart
+      classes
+        class C @17
+          constructors
+            synthetic @-1
+      enums
+        enum E @27
+          fields
+            synthetic final index @-1
+              type: int
+            synthetic static const values @-1
+              type: List<E>
+            static const v @31
+              type: E
+          accessors
+            synthetic get index @-1
+              returnType: int
+            synthetic static get values @-1
+              returnType: List<E>
+            synthetic static get v @-1
+              returnType: E
+          methods
+            toString @-1
+              returnType: String
+      typeAliases
+        functionTypeAliasBased F @43
+          aliasedType: dynamic Function()
+          aliasedElement: GenericFunctionTypeElement
+            returnType: dynamic
 ''');
   }
 
@@ -14576,23 +28446,72 @@
     var library = await checkLibrary(
         'library l; part "a.dart"; class C {} enum E { v } typedef F();');
     checkElementText(library, r'''
-library l;
-part 'a.dart';
-typedef F = dynamic Function();
-enum E {
-  synthetic final int index;
-  synthetic static const List<E> values;
-  static const E v;
-  String toString() {}
-}
-class C {
-}
---------------------
-unit: a.dart
-
-C c;
-E e;
-dynamic Function() f;
+library
+  name: l
+  nameOffset: 8
+  definingUnit
+    classes
+      class C @32
+        constructors
+          synthetic @-1
+    enums
+      enum E @42
+        fields
+          synthetic final index @-1
+            type: int
+          synthetic static const values @-1
+            type: List<E>
+          static const v @46
+            type: E
+        accessors
+          synthetic get index @-1
+            returnType: int
+          synthetic static get values @-1
+            returnType: List<E>
+          synthetic static get v @-1
+            returnType: E
+        methods
+          toString @-1
+            returnType: String
+    typeAliases
+      functionTypeAliasBased F @58
+        aliasedType: dynamic Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: dynamic
+  parts
+    a.dart
+      topLevelVariables
+        static c @13
+          type: C
+        static e @18
+          type: E
+        static f @23
+          type: dynamic Function()
+            aliasElement: self::@typeAlias::F
+      accessors
+        synthetic static get c @13
+          returnType: C
+        synthetic static set c @13
+          parameters
+            requiredPositional _c @13
+              type: C
+          returnType: void
+        synthetic static get e @18
+          returnType: E
+        synthetic static set e @18
+          parameters
+            requiredPositional _e @18
+              type: E
+          returnType: void
+        synthetic static get f @23
+          returnType: dynamic Function()
+            aliasElement: self::@typeAlias::F
+        synthetic static set f @23
+          parameters
+            requiredPositional _f @23
+              type: dynamic Function()
+                aliasElement: self::@typeAlias::F
+          returnType: void
 ''');
   }
 
@@ -14602,27 +28521,73 @@
     var library =
         await checkLibrary('library l; part "a.dart"; part "b.dart";');
     checkElementText(library, r'''
-library l;
-part 'a.dart';
-part 'b.dart';
---------------------
-unit: a.dart
-
-typedef F = dynamic Function();
-enum E {
-  synthetic final int index;
-  synthetic static const List<E> values;
-  static const E v;
-  String toString() {}
-}
-class C {
-}
---------------------
-unit: b.dart
-
-C c;
-E e;
-dynamic Function() f;
+library
+  name: l
+  nameOffset: 8
+  definingUnit
+  parts
+    a.dart
+      classes
+        class C @17
+          constructors
+            synthetic @-1
+      enums
+        enum E @27
+          fields
+            synthetic final index @-1
+              type: int
+            synthetic static const values @-1
+              type: List<E>
+            static const v @31
+              type: E
+          accessors
+            synthetic get index @-1
+              returnType: int
+            synthetic static get values @-1
+              returnType: List<E>
+            synthetic static get v @-1
+              returnType: E
+          methods
+            toString @-1
+              returnType: String
+      typeAliases
+        functionTypeAliasBased F @43
+          aliasedType: dynamic Function()
+          aliasedElement: GenericFunctionTypeElement
+            returnType: dynamic
+    b.dart
+      topLevelVariables
+        static c @13
+          type: C
+        static e @18
+          type: E
+        static f @23
+          type: dynamic Function()
+            aliasElement: self::@typeAlias::F
+      accessors
+        synthetic static get c @13
+          returnType: C
+        synthetic static set c @13
+          parameters
+            requiredPositional _c @13
+              type: C
+          returnType: void
+        synthetic static get e @18
+          returnType: E
+        synthetic static set e @18
+          parameters
+            requiredPositional _e @18
+              type: E
+          returnType: void
+        synthetic static get f @23
+          returnType: dynamic Function()
+            aliasElement: self::@typeAlias::F
+        synthetic static set f @23
+          parameters
+            requiredPositional _f @23
+              type: dynamic Function()
+                aliasElement: self::@typeAlias::F
+          returnType: void
 ''');
   }
 
@@ -14631,63 +28596,189 @@
         'part of l; class C {} enum E { v } typedef F(); C c; E e; F f;');
     var library = await checkLibrary('library l; part "a.dart";');
     checkElementText(library, r'''
-library l;
-part 'a.dart';
---------------------
-unit: a.dart
-
-typedef F = dynamic Function();
-enum E {
-  synthetic final int index;
-  synthetic static const List<E> values;
-  static const E v;
-  String toString() {}
-}
-class C {
-}
-C c;
-E e;
-dynamic Function() f;
+library
+  name: l
+  nameOffset: 8
+  definingUnit
+  parts
+    a.dart
+      classes
+        class C @17
+          constructors
+            synthetic @-1
+      enums
+        enum E @27
+          fields
+            synthetic final index @-1
+              type: int
+            synthetic static const values @-1
+              type: List<E>
+            static const v @31
+              type: E
+          accessors
+            synthetic get index @-1
+              returnType: int
+            synthetic static get values @-1
+              returnType: List<E>
+            synthetic static get v @-1
+              returnType: E
+          methods
+            toString @-1
+              returnType: String
+      typeAliases
+        functionTypeAliasBased F @43
+          aliasedType: dynamic Function()
+          aliasedElement: GenericFunctionTypeElement
+            returnType: dynamic
+      topLevelVariables
+        static c @50
+          type: C
+        static e @55
+          type: E
+        static f @60
+          type: dynamic Function()
+            aliasElement: self::@typeAlias::F
+      accessors
+        synthetic static get c @50
+          returnType: C
+        synthetic static set c @50
+          parameters
+            requiredPositional _c @50
+              type: C
+          returnType: void
+        synthetic static get e @55
+          returnType: E
+        synthetic static set e @55
+          parameters
+            requiredPositional _e @55
+              type: E
+          returnType: void
+        synthetic static get f @60
+          returnType: dynamic Function()
+            aliasElement: self::@typeAlias::F
+        synthetic static set f @60
+          parameters
+            requiredPositional _f @60
+              type: dynamic Function()
+                aliasElement: self::@typeAlias::F
+          returnType: void
 ''');
   }
 
   test_type_reference_to_class() async {
     var library = await checkLibrary('class C {} C c;');
     checkElementText(library, r'''
-class C {
-}
-C c;
+library
+  definingUnit
+    classes
+      class C @6
+        constructors
+          synthetic @-1
+    topLevelVariables
+      static c @13
+        type: C
+    accessors
+      synthetic static get c @13
+        returnType: C
+      synthetic static set c @13
+        parameters
+          requiredPositional _c @13
+            type: C
+        returnType: void
 ''');
   }
 
   test_type_reference_to_class_with_type_arguments() async {
     var library = await checkLibrary('class C<T, U> {} C<int, String> c;');
     checkElementText(library, r'''
-class C<T, U> {
-}
-C<int, String> c;
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+          covariant U @11
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+    topLevelVariables
+      static c @32
+        type: C<int, String>
+    accessors
+      synthetic static get c @32
+        returnType: C<int, String>
+      synthetic static set c @32
+        parameters
+          requiredPositional _c @32
+            type: C<int, String>
+        returnType: void
 ''');
   }
 
   test_type_reference_to_class_with_type_arguments_implicit() async {
     var library = await checkLibrary('class C<T, U> {} C c;');
     checkElementText(library, r'''
-class C<T, U> {
-}
-C<dynamic, dynamic> c;
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+          covariant U @11
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+    topLevelVariables
+      static c @19
+        type: C<dynamic, dynamic>
+    accessors
+      synthetic static get c @19
+        returnType: C<dynamic, dynamic>
+      synthetic static set c @19
+        parameters
+          requiredPositional _c @19
+            type: C<dynamic, dynamic>
+        returnType: void
 ''');
   }
 
   test_type_reference_to_enum() async {
     var library = await checkLibrary('enum E { v } E e;');
     checkElementText(library, r'''
-enum E {
-  synthetic final int index;
-  synthetic static const List<E> values;
-  static const E v;
-  String toString() {}
-}
-E e;
+library
+  definingUnit
+    enums
+      enum E @5
+        fields
+          synthetic final index @-1
+            type: int
+          synthetic static const values @-1
+            type: List<E>
+          static const v @9
+            type: E
+        accessors
+          synthetic get index @-1
+            returnType: int
+          synthetic static get values @-1
+            returnType: List<E>
+          synthetic static get v @-1
+            returnType: E
+        methods
+          toString @-1
+            returnType: String
+    topLevelVariables
+      static e @15
+        type: E
+    accessors
+      synthetic static get e @15
+        returnType: E
+      synthetic static set e @15
+        parameters
+          requiredPositional _e @15
+            type: E
+        returnType: void
 ''');
   }
 
@@ -14695,10 +28786,42 @@
     addLibrarySource('/a.dart', 'class C {} enum E { v } typedef F();');
     var library = await checkLibrary('import "a.dart"; C c; E e; F f;');
     checkElementText(library, r'''
-import 'a.dart';
-C c;
-E e;
-dynamic Function() f;
+library
+  imports
+    a.dart
+  definingUnit
+    topLevelVariables
+      static c @19
+        type: C
+      static e @24
+        type: E
+      static f @29
+        type: dynamic Function()
+          aliasElement: a.dart::@typeAlias::F
+    accessors
+      synthetic static get c @19
+        returnType: C
+      synthetic static set c @19
+        parameters
+          requiredPositional _c @19
+            type: C
+        returnType: void
+      synthetic static get e @24
+        returnType: E
+      synthetic static set e @24
+        parameters
+          requiredPositional _e @24
+            type: E
+        returnType: void
+      synthetic static get f @29
+        returnType: dynamic Function()
+          aliasElement: a.dart::@typeAlias::F
+      synthetic static set f @29
+        parameters
+          requiredPositional _f @29
+            type: dynamic Function()
+              aliasElement: a.dart::@typeAlias::F
+        returnType: void
 ''');
   }
 
@@ -14707,10 +28830,42 @@
     addLibrarySource('/b.dart', 'class C {} enum E { v } typedef F();');
     var library = await checkLibrary('import "a.dart"; C c; E e; F f;');
     checkElementText(library, r'''
-import 'a.dart';
-C c;
-E e;
-dynamic Function() f;
+library
+  imports
+    a.dart
+  definingUnit
+    topLevelVariables
+      static c @19
+        type: C
+      static e @24
+        type: E
+      static f @29
+        type: dynamic Function()
+          aliasElement: b.dart::@typeAlias::F
+    accessors
+      synthetic static get c @19
+        returnType: C
+      synthetic static set c @19
+        parameters
+          requiredPositional _c @19
+            type: C
+        returnType: void
+      synthetic static get e @24
+        returnType: E
+      synthetic static set e @24
+        parameters
+          requiredPositional _e @24
+            type: E
+        returnType: void
+      synthetic static get f @29
+        returnType: dynamic Function()
+          aliasElement: b.dart::@typeAlias::F
+      synthetic static set f @29
+        parameters
+          requiredPositional _f @29
+            type: dynamic Function()
+              aliasElement: b.dart::@typeAlias::F
+        returnType: void
 ''');
   }
 
@@ -14720,10 +28875,42 @@
     addLibrarySource('/c.dart', 'class C {} enum E { v } typedef F();');
     var library = await checkLibrary('import "a.dart"; C c; E e; F f;');
     checkElementText(library, r'''
-import 'a.dart';
-C c;
-E e;
-dynamic Function() f;
+library
+  imports
+    a.dart
+  definingUnit
+    topLevelVariables
+      static c @19
+        type: C
+      static e @24
+        type: E
+      static f @29
+        type: dynamic Function()
+          aliasElement: c.dart::@typeAlias::F
+    accessors
+      synthetic static get c @19
+        returnType: C
+      synthetic static set c @19
+        parameters
+          requiredPositional _c @19
+            type: C
+        returnType: void
+      synthetic static get e @24
+        returnType: E
+      synthetic static set e @24
+        parameters
+          requiredPositional _e @24
+            type: E
+        returnType: void
+      synthetic static get f @29
+        returnType: dynamic Function()
+          aliasElement: c.dart::@typeAlias::F
+      synthetic static set f @29
+        parameters
+          requiredPositional _f @29
+            type: dynamic Function()
+              aliasElement: c.dart::@typeAlias::F
+        returnType: void
 ''');
   }
 
@@ -14733,10 +28920,42 @@
     addLibrarySource('/a/c/c.dart', 'class C {} enum E { v } typedef F();');
     var library = await checkLibrary('import "a/a.dart"; C c; E e; F f;');
     checkElementText(library, r'''
-import 'a.dart';
-C c;
-E e;
-dynamic Function() f;
+library
+  imports
+    a.dart
+  definingUnit
+    topLevelVariables
+      static c @21
+        type: C
+      static e @26
+        type: E
+      static f @31
+        type: dynamic Function()
+          aliasElement: c.dart::@typeAlias::F
+    accessors
+      synthetic static get c @21
+        returnType: C
+      synthetic static set c @21
+        parameters
+          requiredPositional _c @21
+            type: C
+        returnType: void
+      synthetic static get e @26
+        returnType: E
+      synthetic static set e @26
+        parameters
+          requiredPositional _e @26
+            type: E
+        returnType: void
+      synthetic static get f @31
+        returnType: dynamic Function()
+          aliasElement: c.dart::@typeAlias::F
+      synthetic static set f @31
+        parameters
+          requiredPositional _f @31
+            type: dynamic Function()
+              aliasElement: c.dart::@typeAlias::F
+        returnType: void
 ''');
   }
 
@@ -14745,10 +28964,42 @@
     addLibrarySource('/a/b/b.dart', 'class C {} enum E { v } typedef F();');
     var library = await checkLibrary('import "a/a.dart"; C c; E e; F f;');
     checkElementText(library, r'''
-import 'a.dart';
-C c;
-E e;
-dynamic Function() f;
+library
+  imports
+    a.dart
+  definingUnit
+    topLevelVariables
+      static c @21
+        type: C
+      static e @26
+        type: E
+      static f @31
+        type: dynamic Function()
+          aliasElement: b.dart::@typeAlias::F
+    accessors
+      synthetic static get c @21
+        returnType: C
+      synthetic static set c @21
+        parameters
+          requiredPositional _c @21
+            type: C
+        returnType: void
+      synthetic static get e @26
+        returnType: E
+      synthetic static set e @26
+        parameters
+          requiredPositional _e @26
+            type: E
+        returnType: void
+      synthetic static get f @31
+        returnType: dynamic Function()
+          aliasElement: b.dart::@typeAlias::F
+      synthetic static set f @31
+        parameters
+          requiredPositional _f @31
+            type: dynamic Function()
+              aliasElement: b.dart::@typeAlias::F
+        returnType: void
 ''');
   }
 
@@ -14757,10 +29008,42 @@
     addSource('/b.dart', 'part of l; class C {} enum E { v } typedef F();');
     var library = await checkLibrary('import "a.dart"; C c; E e; F f;');
     checkElementText(library, r'''
-import 'a.dart';
-C c;
-E e;
-dynamic Function() f;
+library
+  imports
+    a.dart
+  definingUnit
+    topLevelVariables
+      static c @19
+        type: C
+      static e @24
+        type: E
+      static f @29
+        type: dynamic Function()
+          aliasElement: a.dart::@typeAlias::F
+    accessors
+      synthetic static get c @19
+        returnType: C
+      synthetic static set c @19
+        parameters
+          requiredPositional _c @19
+            type: C
+        returnType: void
+      synthetic static get e @24
+        returnType: E
+      synthetic static set e @24
+        parameters
+          requiredPositional _e @24
+            type: E
+        returnType: void
+      synthetic static get f @29
+        returnType: dynamic Function()
+          aliasElement: a.dart::@typeAlias::F
+      synthetic static set f @29
+        parameters
+          requiredPositional _f @29
+            type: dynamic Function()
+              aliasElement: a.dart::@typeAlias::F
+        returnType: void
 ''');
   }
 
@@ -14770,9 +29053,30 @@
     addSource('/p2.dart', 'part of l; class C2 {}');
     var library = await checkLibrary('import "a.dart"; C1 c1; C2 c2;');
     checkElementText(library, r'''
-import 'a.dart';
-C1 c1;
-C2 c2;
+library
+  imports
+    a.dart
+  definingUnit
+    topLevelVariables
+      static c1 @20
+        type: C1
+      static c2 @27
+        type: C2
+    accessors
+      synthetic static get c1 @20
+        returnType: C1
+      synthetic static set c1 @20
+        parameters
+          requiredPositional _c1 @20
+            type: C1
+        returnType: void
+      synthetic static get c2 @27
+        returnType: C2
+      synthetic static set c2 @27
+        parameters
+          requiredPositional _c2 @27
+            type: C2
+        returnType: void
 ''');
   }
 
@@ -14781,10 +29085,42 @@
     addSource('/a/c.dart', 'part of l; class C {} enum E { v } typedef F();');
     var library = await checkLibrary('import "a/b.dart"; C c; E e; F f;');
     checkElementText(library, r'''
-import 'b.dart';
-C c;
-E e;
-dynamic Function() f;
+library
+  imports
+    b.dart
+  definingUnit
+    topLevelVariables
+      static c @21
+        type: C
+      static e @26
+        type: E
+      static f @31
+        type: dynamic Function()
+          aliasElement: b.dart::@typeAlias::F
+    accessors
+      synthetic static get c @21
+        returnType: C
+      synthetic static set c @21
+        parameters
+          requiredPositional _c @21
+            type: C
+        returnType: void
+      synthetic static get e @26
+        returnType: E
+      synthetic static set e @26
+        parameters
+          requiredPositional _e @26
+            type: E
+        returnType: void
+      synthetic static get f @31
+        returnType: dynamic Function()
+          aliasElement: b.dart::@typeAlias::F
+      synthetic static set f @31
+        parameters
+          requiredPositional _f @31
+            type: dynamic Function()
+              aliasElement: b.dart::@typeAlias::F
+        returnType: void
 ''');
   }
 
@@ -14792,18 +29128,69 @@
     addLibrarySource('/a.dart', 'class C {} enum E { v } typedef F();');
     var library = await checkLibrary('import "a.dart"; C c; E e; F f;');
     checkElementText(library, r'''
-import 'a.dart';
-C c;
-E e;
-dynamic Function() f;
+library
+  imports
+    a.dart
+  definingUnit
+    topLevelVariables
+      static c @19
+        type: C
+      static e @24
+        type: E
+      static f @29
+        type: dynamic Function()
+          aliasElement: a.dart::@typeAlias::F
+    accessors
+      synthetic static get c @19
+        returnType: C
+      synthetic static set c @19
+        parameters
+          requiredPositional _c @19
+            type: C
+        returnType: void
+      synthetic static get e @24
+        returnType: E
+      synthetic static set e @24
+        parameters
+          requiredPositional _e @24
+            type: E
+        returnType: void
+      synthetic static get f @29
+        returnType: dynamic Function()
+          aliasElement: a.dart::@typeAlias::F
+      synthetic static set f @29
+        parameters
+          requiredPositional _f @29
+            type: dynamic Function()
+              aliasElement: a.dart::@typeAlias::F
+        returnType: void
 ''');
   }
 
   test_type_reference_to_typedef() async {
     var library = await checkLibrary('typedef F(); F f;');
     checkElementText(library, r'''
-typedef F = dynamic Function();
-dynamic Function() f;
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased F @8
+        aliasedType: dynamic Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: dynamic
+    topLevelVariables
+      static f @15
+        type: dynamic Function()
+          aliasElement: self::@typeAlias::F
+    accessors
+      synthetic static get f @15
+        returnType: dynamic Function()
+          aliasElement: self::@typeAlias::F
+      synthetic static set f @15
+        parameters
+          requiredPositional _f @15
+            type: dynamic Function()
+              aliasElement: self::@typeAlias::F
+        returnType: void
 ''');
   }
 
@@ -14811,23 +29198,107 @@
     var library =
         await checkLibrary('typedef U F<T, U>(T t); F<int, String> f;');
     checkElementText(library, r'''
-typedef F<T, U> = U Function(T t);
-String Function(int) f;
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased F @10
+        typeParameters
+          contravariant T @12
+            defaultType: dynamic
+          covariant U @15
+            defaultType: dynamic
+        aliasedType: U Function(T)
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional t @-1
+              type: T
+          returnType: U
+    topLevelVariables
+      static f @39
+        type: String Function(int)
+          aliasElement: self::@typeAlias::F
+          aliasArguments
+            int
+            String
+    accessors
+      synthetic static get f @39
+        returnType: String Function(int)
+          aliasElement: self::@typeAlias::F
+          aliasArguments
+            int
+            String
+      synthetic static set f @39
+        parameters
+          requiredPositional _f @39
+            type: String Function(int)
+              aliasElement: self::@typeAlias::F
+              aliasArguments
+                int
+                String
+        returnType: void
 ''');
   }
 
   test_type_reference_to_typedef_with_type_arguments_implicit() async {
     var library = await checkLibrary('typedef U F<T, U>(T t); F f;');
     checkElementText(library, r'''
-typedef F<T, U> = U Function(T t);
-dynamic Function(dynamic) f;
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased F @10
+        typeParameters
+          contravariant T @12
+            defaultType: dynamic
+          covariant U @15
+            defaultType: dynamic
+        aliasedType: U Function(T)
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional t @-1
+              type: T
+          returnType: U
+    topLevelVariables
+      static f @26
+        type: dynamic Function(dynamic)
+          aliasElement: self::@typeAlias::F
+          aliasArguments
+            dynamic
+            dynamic
+    accessors
+      synthetic static get f @26
+        returnType: dynamic Function(dynamic)
+          aliasElement: self::@typeAlias::F
+          aliasArguments
+            dynamic
+            dynamic
+      synthetic static set f @26
+        parameters
+          requiredPositional _f @26
+            type: dynamic Function(dynamic)
+              aliasElement: self::@typeAlias::F
+              aliasArguments
+                dynamic
+                dynamic
+        returnType: void
 ''');
   }
 
   test_type_unresolved() async {
     var library = await checkLibrary('C c;', allowErrors: true);
     checkElementText(library, r'''
-dynamic c;
+library
+  definingUnit
+    topLevelVariables
+      static c @2
+        type: dynamic
+    accessors
+      synthetic static get c @2
+        returnType: dynamic
+      synthetic static set c @2
+        parameters
+          requiredPositional _c @2
+            type: dynamic
+        returnType: void
 ''');
   }
 
@@ -14835,8 +29306,21 @@
     var library = await checkLibrary('import "dart:core" as core; core.C c;',
         allowErrors: true);
     checkElementText(library, r'''
-import 'dart:core' as core;
-dynamic c;
+library
+  imports
+    dart:core as core @22
+  definingUnit
+    topLevelVariables
+      static c @35
+        type: dynamic
+    accessors
+      synthetic static get c @35
+        returnType: dynamic
+      synthetic static set c @35
+        parameters
+          requiredPositional _c @35
+            type: dynamic
+        returnType: void
 ''');
   }
 
@@ -14844,24 +29328,45 @@
     var library = await checkLibrary(r'''
 typedef void F(T a<T, U>(U u));
 ''');
-    checkElementText(
-        library,
-        r'''
-typedef F = void Function(T Function<T, U>(U) a/*<covariant T, covariant U>*//*(U u)*/);
-''',
-        withTypeParameterVariance: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased F @13
+        aliasedType: void Function(T Function<T, U>(U))
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional a @-1
+              type: T Function<T, U>(U)
+              typeParameters
+                covariant T @-1
+                covariant U @-1
+              parameters
+                requiredPositional u @-1
+                  type: U
+          returnType: void
+''');
   }
 
   test_typeAlias_typeParameters_variance_function_contravariant() async {
     var library = await checkLibrary(r'''
 typedef F<T> = void Function(T);
 ''');
-    checkElementText(
-        library,
-        r'''
-typedef F<contravariant T> = void Function(T );
-''',
-        withTypeParameterVariance: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      F @8
+        typeParameters
+          contravariant T @10
+            defaultType: dynamic
+        aliasedType: void Function(T)
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional @-1
+              type: T
+          returnType: void
+''');
   }
 
   test_typeAlias_typeParameters_variance_function_contravariant2() async {
@@ -14869,37 +29374,67 @@
 typedef F1<T> = void Function(T);
 typedef F2<T> = F1<T> Function();
 ''');
-    checkElementText(
-        library,
-        r'''
-typedef F1<contravariant T> = void Function(T );
-typedef F2<contravariant T> = void Function(T) Function();
-''',
-        withTypeParameterVariance: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      F1 @8
+        typeParameters
+          contravariant T @11
+            defaultType: dynamic
+        aliasedType: void Function(T)
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional @-1
+              type: T
+          returnType: void
+      F2 @42
+        typeParameters
+          contravariant T @45
+            defaultType: dynamic
+        aliasedType: void Function(T) Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: void Function(T)
+            aliasElement: self::@typeAlias::F1
+            aliasArguments
+              T
+''');
   }
 
   test_typeAlias_typeParameters_variance_function_covariant() async {
     var library = await checkLibrary(r'''
 typedef F<T> = T Function();
 ''');
-    checkElementText(
-        library,
-        r'''
-typedef F<covariant T> = T Function();
-''',
-        withTypeParameterVariance: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      F @8
+        typeParameters
+          covariant T @10
+            defaultType: dynamic
+        aliasedType: T Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: T
+''');
   }
 
   test_typeAlias_typeParameters_variance_function_covariant2() async {
     var library = await checkLibrary(r'''
 typedef F<T> = List<T> Function();
 ''');
-    checkElementText(
-        library,
-        r'''
-typedef F<covariant T> = List<T> Function();
-''',
-        withTypeParameterVariance: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      F @8
+        typeParameters
+          covariant T @10
+            defaultType: dynamic
+        aliasedType: List<T> Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: List<T>
+''');
   }
 
   test_typeAlias_typeParameters_variance_function_covariant3() async {
@@ -14907,13 +29442,28 @@
 typedef F1<T> = T Function();
 typedef F2<T> = F1<T> Function();
 ''');
-    checkElementText(
-        library,
-        r'''
-typedef F1<covariant T> = T Function();
-typedef F2<covariant T> = T Function() Function();
-''',
-        withTypeParameterVariance: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      F1 @8
+        typeParameters
+          covariant T @11
+            defaultType: dynamic
+        aliasedType: T Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: T
+      F2 @38
+        typeParameters
+          covariant T @41
+            defaultType: dynamic
+        aliasedType: T Function() Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: T Function()
+            aliasElement: self::@typeAlias::F1
+            aliasArguments
+              T
+''');
   }
 
   test_typeAlias_typeParameters_variance_function_covariant4() async {
@@ -14921,13 +29471,34 @@
 typedef F1<T> = void Function(T);
 typedef F2<T> = void Function(F1<T>);
 ''');
-    checkElementText(
-        library,
-        r'''
-typedef F1<contravariant T> = void Function(T );
-typedef F2<covariant T> = void Function(void Function(T) );
-''',
-        withTypeParameterVariance: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      F1 @8
+        typeParameters
+          contravariant T @11
+            defaultType: dynamic
+        aliasedType: void Function(T)
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional @-1
+              type: T
+          returnType: void
+      F2 @42
+        typeParameters
+          covariant T @45
+            defaultType: dynamic
+        aliasedType: void Function(void Function(T))
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional @-1
+              type: void Function(T)
+                aliasElement: self::@typeAlias::F1
+                aliasArguments
+                  T
+          returnType: void
+''');
   }
 
   test_typeAlias_typeParameters_variance_function_invalid() async {
@@ -14935,14 +29506,25 @@
 class A {}
 typedef F<T> = void Function(A<int>);
 ''');
-    checkElementText(
-        library,
-        r'''
-typedef F<unrelated T> = void Function(A );
-class A {
-}
-''',
-        withTypeParameterVariance: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          synthetic @-1
+    typeAliases
+      F @19
+        typeParameters
+          unrelated T @21
+            defaultType: dynamic
+        aliasedType: void Function(A)
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional @-1
+              type: A
+          returnType: void
+''');
   }
 
   test_typeAlias_typeParameters_variance_function_invalid2() async {
@@ -14950,25 +29532,47 @@
 typedef F = void Function();
 typedef G<T> = void Function(F<int>);
 ''');
-    checkElementText(
-        library,
-        r'''
-typedef F = void Function();
-typedef G<unrelated T> = void Function(void Function() );
-''',
-        withTypeParameterVariance: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      F @8
+        aliasedType: void Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: void
+      G @37
+        typeParameters
+          unrelated T @39
+            defaultType: dynamic
+        aliasedType: void Function(void Function())
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional @-1
+              type: void Function()
+                aliasElement: self::@typeAlias::F
+          returnType: void
+''');
   }
 
   test_typeAlias_typeParameters_variance_function_invariant() async {
     var library = await checkLibrary(r'''
 typedef F<T> = T Function(T);
 ''');
-    checkElementText(
-        library,
-        r'''
-typedef F<invariant T> = T Function(T );
-''',
-        withTypeParameterVariance: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      F @8
+        typeParameters
+          invariant T @10
+            defaultType: dynamic
+        aliasedType: T Function(T)
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional @-1
+              type: T
+          returnType: T
+''');
   }
 
   test_typeAlias_typeParameters_variance_function_invariant2() async {
@@ -14976,25 +29580,52 @@
 typedef F1<T> = T Function();
 typedef F2<T> = F1<T> Function(T);
 ''');
-    checkElementText(
-        library,
-        r'''
-typedef F1<covariant T> = T Function();
-typedef F2<invariant T> = T Function() Function(T );
-''',
-        withTypeParameterVariance: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      F1 @8
+        typeParameters
+          covariant T @11
+            defaultType: dynamic
+        aliasedType: T Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: T
+      F2 @38
+        typeParameters
+          invariant T @41
+            defaultType: dynamic
+        aliasedType: T Function() Function(T)
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional @-1
+              type: T
+          returnType: T Function()
+            aliasElement: self::@typeAlias::F1
+            aliasArguments
+              T
+''');
   }
 
   test_typeAlias_typeParameters_variance_function_unrelated() async {
     var library = await checkLibrary(r'''
 typedef F<T> = void Function(int);
 ''');
-    checkElementText(
-        library,
-        r'''
-typedef F<unrelated T> = void Function(int );
-''',
-        withTypeParameterVariance: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      F @8
+        typeParameters
+          unrelated T @10
+            defaultType: dynamic
+        aliasedType: void Function(int)
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional @-1
+              type: int
+          returnType: void
+''');
   }
 
   test_typeAlias_typeParameters_variance_interface_contravariant() async {
@@ -15002,12 +29633,16 @@
     var library = await checkLibrary(r'''
 typedef A<T> = List<void Function(T)>;
 ''');
-    checkElementText(
-        library,
-        r'''
-typedef A<contravariant T> = List<void Function(T)>;
-''',
-        withTypeParameterVariance: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      A @8
+        typeParameters
+          contravariant T @10
+            defaultType: dynamic
+        aliasedType: List<void Function(T)>
+''');
   }
 
   test_typeAlias_typeParameters_variance_interface_contravariant2() async {
@@ -15016,13 +29651,26 @@
 typedef A<T> = void Function(T);
 typedef B<T> = List<A<T>>;
 ''');
-    checkElementText(
-        library,
-        r'''
-typedef A<contravariant T> = void Function(T );
-typedef B<contravariant T> = List<void Function(T)>;
-''',
-        withTypeParameterVariance: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      A @8
+        typeParameters
+          contravariant T @10
+            defaultType: dynamic
+        aliasedType: void Function(T)
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional @-1
+              type: T
+          returnType: void
+      B @41
+        typeParameters
+          contravariant T @43
+            defaultType: dynamic
+        aliasedType: List<void Function(T)>
+''');
   }
 
   test_typeAlias_typeParameters_variance_interface_covariant() async {
@@ -15030,12 +29678,16 @@
     var library = await checkLibrary(r'''
 typedef A<T> = List<T>;
 ''');
-    checkElementText(
-        library,
-        r'''
-typedef A<covariant T> = List<T>;
-''',
-        withTypeParameterVariance: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      A @8
+        typeParameters
+          covariant T @10
+            defaultType: dynamic
+        aliasedType: List<T>
+''');
   }
 
   test_typeAlias_typeParameters_variance_interface_covariant2() async {
@@ -15044,13 +29696,21 @@
 typedef A<T> = Map<int, T>;
 typedef B<T> = List<A<T>>;
 ''');
-    checkElementText(
-        library,
-        r'''
-typedef A<covariant T> = Map<int, T>;
-typedef B<covariant T> = List<Map<int, T>>;
-''',
-        withTypeParameterVariance: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      A @8
+        typeParameters
+          covariant T @10
+            defaultType: dynamic
+        aliasedType: Map<int, T>
+      B @36
+        typeParameters
+          covariant T @38
+            defaultType: dynamic
+        aliasedType: List<Map<int, T>>
+''');
   }
 
   test_typedef_documented() async {
@@ -15061,10 +29721,14 @@
  */
 typedef F();''');
     checkElementText(library, r'''
-/**
- * Docs
- */
-typedef F = dynamic Function();
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased F @68
+        documentationComment: /**\n * Docs\n */
+        aliasedType: dynamic Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: dynamic
 ''');
   }
 
@@ -15072,7 +29736,25 @@
     var library = await checkLibrary(
         'typedef F<T> = int Function<S>(List<S> list, num Function<A>(A), T);');
     checkElementText(library, r'''
-typedef F<T> = int Function<S>(List<S> list, num Function<A>(A) , T );
+library
+  definingUnit
+    typeAliases
+      F @8
+        typeParameters
+          contravariant T @10
+            defaultType: dynamic
+        aliasedType: int Function<S>(List<S>, num Function<A>(A), T)
+        aliasedElement: GenericFunctionTypeElement
+          typeParameters
+            covariant S @-1
+          parameters
+            requiredPositional list @-1
+              type: List<S>
+            requiredPositional @-1
+              type: num Function<A>(A)
+            requiredPositional @-1
+              type: T
+          returnType: int
 ''');
   }
 
@@ -15084,10 +29766,45 @@
 }
 ''');
     checkElementText(library, r'''
-typedef Foo<S> = S Function<T>(T x);
-class A {
-  int Function<T>(T) f;
-}
+library
+  definingUnit
+    classes
+      class A @43
+        fields
+          f @58
+            type: int Function<T>(T)
+              aliasElement: self::@typeAlias::Foo
+              aliasArguments
+                int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get f @58
+            returnType: int Function<T>(T)
+              aliasElement: self::@typeAlias::Foo
+              aliasArguments
+                int
+          synthetic set f @58
+            parameters
+              requiredPositional _f @58
+                type: int Function<T>(T)
+                  aliasElement: self::@typeAlias::Foo
+                  aliasArguments
+                    int
+            returnType: void
+    typeAliases
+      Foo @8
+        typeParameters
+          covariant S @12
+            defaultType: dynamic
+        aliasedType: S Function<T>(T)
+        aliasedElement: GenericFunctionTypeElement
+          typeParameters
+            covariant T @-1
+          parameters
+            requiredPositional x @-1
+              type: T
+          returnType: S
 ''');
   }
 
@@ -15097,8 +29814,25 @@
 F f;
 ''');
     checkElementText(library, r'''
-typedef F = dynamic Function();
-dynamic Function() f;
+library
+  definingUnit
+    typeAliases
+      F @8
+        aliasedType: dynamic Function()
+    topLevelVariables
+      static f @19
+        type: dynamic Function()
+          aliasElement: self::@typeAlias::F
+    accessors
+      synthetic static get f @19
+        returnType: dynamic Function()
+          aliasElement: self::@typeAlias::F
+      synthetic static set f @19
+        parameters
+          requiredPositional _f @19
+            type: dynamic Function()
+              aliasElement: self::@typeAlias::F
+        returnType: void
 ''');
   }
 
@@ -15113,13 +29847,10 @@
 void f(A a) {}
 ''');
 
-    checkElementText(
-        library,
-        r'''
+    checkElementText(library, r'''
 typedef A = dynamic;
 void f(dynamic<aliasElement: self::@typeAlias::A> a) {}
-''',
-        withAliasElementArguments: true);
+''');
   }
 
   test_typedef_nonFunction_aliasElement_functionType() async {
@@ -15131,15 +29862,37 @@
 void f2(A2<int> a) {}
 ''');
 
-    checkElementText(
-        library,
-        r'''
-typedef A1 = void Function();
-typedef A2<R> = R Function();
-void f1(void Function()<aliasElement: self::@typeAlias::A1> a) {}
-void f2(int Function()<aliasElement: self::@typeAlias::A2, aliasArguments: [int]> a) {}
-''',
-        withAliasElementArguments: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      A1 @8
+        aliasedType: void Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: void
+      A2 @38
+        typeParameters
+          covariant R @41
+            defaultType: dynamic
+        aliasedType: R Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: R
+    functions
+      f1 @65
+        parameters
+          requiredPositional a @71
+            type: void Function()
+              aliasElement: self::@typeAlias::A1
+        returnType: void
+      f2 @82
+        parameters
+          requiredPositional a @93
+            type: int Function()
+              aliasElement: self::@typeAlias::A2
+              aliasArguments
+                int
+        returnType: void
+''');
   }
 
   test_typedef_nonFunction_aliasElement_interfaceType() async {
@@ -15151,15 +29904,36 @@
 void f2(A2<int, String> a) {}
 ''');
 
-    checkElementText(
-        library,
-        r'''
-typedef A1 = List<int>;
-typedef A2<T, U> = Map<T, U>;
-void f1(List<int><aliasElement: self::@typeAlias::A1> a) {}
-void f2(Map<int, String><aliasElement: self::@typeAlias::A2, aliasArguments: [int, String]> a) {}
-''',
-        withAliasElementArguments: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      A1 @8
+        aliasedType: List<int>
+      A2 @32
+        typeParameters
+          covariant T @35
+            defaultType: dynamic
+          covariant U @38
+            defaultType: dynamic
+        aliasedType: Map<T, U>
+    functions
+      f1 @59
+        parameters
+          requiredPositional a @65
+            type: List<int>
+              aliasElement: self::@typeAlias::A1
+        returnType: void
+      f2 @76
+        parameters
+          requiredPositional a @95
+            type: Map<int, String>
+              aliasElement: self::@typeAlias::A2
+              aliasArguments
+                int
+                String
+        returnType: void
+''');
   }
 
   @FailingTest(
@@ -15175,15 +29949,12 @@
 void f2(A2<int> a) {}
 ''');
 
-    checkElementText(
-        library,
-        r'''
+    checkElementText(library, r'''
 typedef A1 = Never;
 typedef A2<T> = Never?;
 void f1(Never<aliasElement: self::@typeAlias::A1> a) {}
 void f2(Never?<aliasElement: self::@typeAlias::A2, aliasArguments: [int]> a) {}
-''',
-        withAliasElementArguments: true);
+''');
   }
 
   test_typedef_nonFunction_aliasElement_typeParameterType() async {
@@ -15193,13 +29964,27 @@
 void f<U>(A<U> a) {}
 ''');
 
-    checkElementText(
-        library,
-        r'''
-typedef A<T> = T;
-void f<U>(U<aliasElement: self::@typeAlias::A, aliasArguments: [U]> a) {}
-''',
-        withAliasElementArguments: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    typeAliases
+      A @8
+        typeParameters
+          covariant T @10
+            defaultType: dynamic
+        aliasedType: T
+    functions
+      f @23
+        typeParameters
+          covariant U @25
+        parameters
+          requiredPositional a @33
+            type: U
+              aliasElement: self::@typeAlias::A
+              aliasArguments
+                U
+        returnType: void
+''');
   }
 
   @FailingTest(
@@ -15213,13 +29998,10 @@
 void f(A a) {}
 ''');
 
-    checkElementText(
-        library,
-        r'''
+    checkElementText(library, r'''
 typedef A = void;
 void f(void<aliasElement: self::@typeAlias::A> a) {}
-''',
-        withAliasElementArguments: true);
+''');
   }
 
   test_typedef_nonFunction_asInterfaceType_interfaceType_none() async {
@@ -15230,11 +30012,28 @@
 class B implements X<String> {}
 ''');
     checkElementText(library, r'''
-typedef X<T> = A<int, T>;
-class A<T, U> {
-}
-class B implements A<int, String> {
-}
+library
+  definingUnit
+    classes
+      class A @32
+        typeParameters
+          covariant T @34
+            defaultType: dynamic
+          covariant U @37
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+      class B @49
+        interfaces
+          A<int, String>
+        constructors
+          synthetic @-1
+    typeAliases
+      X @8
+        typeParameters
+          covariant T @10
+            defaultType: dynamic
+        aliasedType: A<int, T>
 ''');
   }
 
@@ -15248,15 +30047,33 @@
 class D implements B, X<int>, C {}
 ''');
     checkElementText(library, r'''
-typedef X<T> = A<T>?;
-class A<T> {
-}
-class B {
-}
-class C {
-}
-class D implements B, C {
-}
+library
+  definingUnit
+    classes
+      class A @28
+        typeParameters
+          covariant T @30
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+      class B @42
+        constructors
+          synthetic @-1
+      class C @53
+        constructors
+          synthetic @-1
+      class D @64
+        interfaces
+          B
+          C
+        constructors
+          synthetic @-1
+    typeAliases
+      X @8
+        typeParameters
+          covariant T @10
+            defaultType: dynamic
+        aliasedType: A<T>?
 ''');
   }
 
@@ -15270,15 +30087,34 @@
 class D implements B, X<int>, C {}
 ''');
     checkElementText(library, r'''
-typedef X<T> = A<T?>;
-class A<T> {
-}
-class B {
-}
-class C {
-}
-class D implements B, A<int?>, C {
-}
+library
+  definingUnit
+    classes
+      class A @28
+        typeParameters
+          covariant T @30
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+      class B @42
+        constructors
+          synthetic @-1
+      class C @53
+        constructors
+          synthetic @-1
+      class D @64
+        interfaces
+          B
+          A<int?>
+          C
+        constructors
+          synthetic @-1
+    typeAliases
+      X @8
+        typeParameters
+          covariant T @10
+            defaultType: dynamic
+        aliasedType: A<T?>
 ''');
   }
 
@@ -15289,9 +30125,15 @@
 class A implements X {}
 ''');
     checkElementText(library, r'''
-typedef X = Never;
-class A {
-}
+library
+  definingUnit
+    classes
+      class A @25
+        constructors
+          synthetic @-1
+    typeAliases
+      X @8
+        aliasedType: Never
 ''');
   }
 
@@ -15302,9 +30144,15 @@
 class A implements X {}
 ''');
     checkElementText(library, r'''
-typedef X = Null;
-class A {
-}
+library
+  definingUnit
+    classes
+      class A @24
+        constructors
+          synthetic @-1
+    typeAliases
+      X @8
+        aliasedType: Null
 ''');
   }
 
@@ -15317,13 +30165,30 @@
 class C<U> implements A, X<U>, B {}
 ''');
     checkElementText(library, r'''
-typedef X<T> = T;
-class A {
-}
-class B {
-}
-class C<U> implements A, B {
-}
+library
+  definingUnit
+    classes
+      class A @24
+        constructors
+          synthetic @-1
+      class B @35
+        constructors
+          synthetic @-1
+      class C @46
+        typeParameters
+          covariant U @48
+            defaultType: dynamic
+        interfaces
+          A
+          B
+        constructors
+          synthetic @-1
+    typeAliases
+      X @8
+        typeParameters
+          covariant T @10
+            defaultType: dynamic
+        aliasedType: T
 ''');
   }
 
@@ -15336,13 +30201,24 @@
 class C implements A, X, B {}
 ''');
     checkElementText(library, r'''
-typedef X = void;
-class A {
-}
-class B {
-}
-class C implements A, B {
-}
+library
+  definingUnit
+    classes
+      class A @24
+        constructors
+          synthetic @-1
+      class B @35
+        constructors
+          synthetic @-1
+      class C @46
+        interfaces
+          A
+          B
+        constructors
+          synthetic @-1
+    typeAliases
+      X @8
+        aliasedType: void
 ''');
   }
 
@@ -15354,12 +30230,24 @@
 class B with X {}
 ''');
     checkElementText(library, r'''
-typedef X = A<int>;
-class A<T> {
-}
-class B extends Object with A<int> {
-  synthetic B();
-}
+library
+  definingUnit
+    classes
+      class A @26
+        typeParameters
+          covariant T @28
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+      class B @40
+        supertype: Object
+        mixins
+          A<int>
+        constructors
+          synthetic @-1
+    typeAliases
+      X @8
+        aliasedType: A<int>
 ''');
   }
 
@@ -15373,16 +30261,36 @@
 class B with M1, X, M2 {}
 ''');
     checkElementText(library, r'''
-typedef X = A<int>?;
-class A<T> {
-}
-class B extends Object with M1, M2 {
-  synthetic B();
-}
-mixin M1 on Object {
-}
-mixin M2 on Object {
-}
+library
+  definingUnit
+    classes
+      class A @27
+        typeParameters
+          covariant T @29
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+      class B @65
+        supertype: Object
+        mixins
+          M1
+          M2
+        constructors
+          synthetic @-1
+    mixins
+      mixin M1 @41
+        superclassConstraints
+          Object
+        constructors
+          synthetic @-1
+      mixin M2 @53
+        superclassConstraints
+          Object
+        constructors
+          synthetic @-1
+    typeAliases
+      X @8
+        aliasedType: A<int>?
 ''');
   }
 
@@ -15396,16 +30304,37 @@
 class B with M1, X, M2 {}
 ''');
     checkElementText(library, r'''
-typedef X = A<int?>;
-class A<T> {
-}
-class B extends Object with M1, A<int?>, M2 {
-  synthetic B();
-}
-mixin M1 on Object {
-}
-mixin M2 on Object {
-}
+library
+  definingUnit
+    classes
+      class A @27
+        typeParameters
+          covariant T @29
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+      class B @65
+        supertype: Object
+        mixins
+          M1
+          A<int?>
+          M2
+        constructors
+          synthetic @-1
+    mixins
+      mixin M1 @41
+        superclassConstraints
+          Object
+        constructors
+          synthetic @-1
+      mixin M2 @53
+        superclassConstraints
+          Object
+        constructors
+          synthetic @-1
+    typeAliases
+      X @8
+        aliasedType: A<int?>
 ''');
   }
 
@@ -15416,9 +30345,15 @@
 class A extends X {}
 ''');
     checkElementText(library, r'''
-typedef X = Never;
-class A {
-}
+library
+  definingUnit
+    classes
+      class A @25
+        constructors
+          synthetic @-1
+    typeAliases
+      X @8
+        aliasedType: Never
 ''');
   }
 
@@ -15430,11 +30365,22 @@
 class B extends X {}
 ''');
     checkElementText(library, r'''
-typedef X = A<int>;
-class A<T> {
-}
-class B extends A<int> {
-}
+library
+  definingUnit
+    classes
+      class A @26
+        typeParameters
+          covariant T @28
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+      class B @40
+        supertype: A<int>
+        constructors
+          synthetic @-1
+    typeAliases
+      X @8
+        aliasedType: A<int>
 ''');
   }
 
@@ -15446,11 +30392,25 @@
 class B extends X<A<int>> {}
 ''');
     checkElementText(library, r'''
-typedef X<T> = T;
-class A<T> {
-}
-class B extends A<int> {
-}
+library
+  definingUnit
+    classes
+      class A @24
+        typeParameters
+          covariant T @26
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+      class B @38
+        supertype: A<int>
+        constructors
+          synthetic @-1
+    typeAliases
+      X @8
+        typeParameters
+          covariant T @10
+            defaultType: dynamic
+        aliasedType: T
 ''');
   }
 
@@ -15461,9 +30421,15 @@
 class A extends X {}
 ''');
     checkElementText(library, r'''
-typedef X = Null;
-class A {
-}
+library
+  definingUnit
+    classes
+      class A @24
+        constructors
+          synthetic @-1
+    typeAliases
+      X @8
+        aliasedType: Null
 ''');
   }
 
@@ -15475,11 +30441,21 @@
 class D extends X {}
 ''');
     checkElementText(library, r'''
-typedef X = A<int>?;
-class A<T> {
-}
-class D {
-}
+library
+  definingUnit
+    classes
+      class A @27
+        typeParameters
+          covariant T @29
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+      class D @41
+        constructors
+          synthetic @-1
+    typeAliases
+      X @8
+        aliasedType: A<int>?
 ''');
   }
 
@@ -15491,11 +30467,22 @@
 class D extends X {}
 ''');
     checkElementText(library, r'''
-typedef X = A<int?>;
-class A<T> {
-}
-class D extends A<int?> {
-}
+library
+  definingUnit
+    classes
+      class A @27
+        typeParameters
+          covariant T @29
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+      class D @41
+        supertype: A<int?>
+        constructors
+          synthetic @-1
+    typeAliases
+      X @8
+        aliasedType: A<int?>
 ''');
   }
 
@@ -15506,9 +30493,15 @@
 class A extends X {}
 ''');
     checkElementText(library, r'''
-typedef X = Never;
-class A {
-}
+library
+  definingUnit
+    classes
+      class A @25
+        constructors
+          synthetic @-1
+    typeAliases
+      X @8
+        aliasedType: Never
 ''');
   }
 
@@ -15519,9 +30512,15 @@
 class A extends X {}
 ''');
     checkElementText(library, r'''
-typedef X = Null;
-class A {
-}
+library
+  definingUnit
+    classes
+      class A @24
+        constructors
+          synthetic @-1
+    typeAliases
+      X @8
+        aliasedType: Null
 ''');
   }
 
@@ -15532,8 +30531,17 @@
 void f(A a) {}
 ''');
     checkElementText(library, r'''
-typedef A = dynamic;
-void f(dynamic a) {}
+library
+  definingUnit
+    typeAliases
+      A @8
+        aliasedType: dynamic
+    functions
+      f @26
+        parameters
+          requiredPositional a @30
+            type: dynamic
+        returnType: void
 ''');
   }
 
@@ -15547,8 +30555,18 @@
     _assertTypeStr(alias.aliasedType, 'dynamic Function()');
 
     checkElementText(library, r'''
-typedef A = dynamic Function();
-void f(dynamic Function() a) {}
+library
+  definingUnit
+    typeAliases
+      A @8
+        aliasedType: dynamic Function()
+    functions
+      f @22
+        parameters
+          requiredPositional a @26
+            type: dynamic Function()
+              aliasElement: self::@typeAlias::A
+        returnType: void
 ''');
   }
 
@@ -15559,8 +30577,18 @@
 void f(A a) {}
 ''');
     checkElementText(library, r'''
-typedef A = int;
-void f(int a) {}
+library
+  definingUnit
+    typeAliases
+      A @8
+        aliasedType: int
+    functions
+      f @22
+        parameters
+          requiredPositional a @26
+            type: int
+              aliasElement: self::@typeAlias::A
+        returnType: void
 ''');
   }
 
@@ -15575,8 +30603,17 @@
 void f(A a) {}
 ''');
     checkElementText(library, r'''
-import 'a.dart';
-void f(List<int*>* a) {}
+library
+  imports
+    a.dart
+  definingUnit
+    functions
+      f @37
+        parameters
+          requiredPositional a @41
+            type: List<int*>*
+              aliasElement: a.dart::@typeAlias::A
+        returnType: void
 ''');
   }
 
@@ -15587,8 +30624,18 @@
 void f(A a) {}
 ''');
     checkElementText(library, r'''
-typedef A = int?;
-void f(int? a) {}
+library
+  definingUnit
+    typeAliases
+      A @8
+        aliasedType: int?
+    functions
+      f @23
+        parameters
+          requiredPositional a @27
+            type: int?
+              aliasElement: self::@typeAlias::A
+        returnType: void
 ''');
   }
 
@@ -15599,8 +30646,23 @@
 void f(A<String> a) {}
 ''');
     checkElementText(library, r'''
-typedef A<T> = Map<int, T>;
-void f(Map<int, String> a) {}
+library
+  definingUnit
+    typeAliases
+      A @8
+        typeParameters
+          covariant T @10
+            defaultType: dynamic
+        aliasedType: Map<int, T>
+    functions
+      f @33
+        parameters
+          requiredPositional a @45
+            type: Map<int, String>
+              aliasElement: self::@typeAlias::A
+              aliasArguments
+                String
+        returnType: void
 ''');
   }
 
@@ -15611,8 +30673,17 @@
 void f(A a) {}
 ''');
     checkElementText(library, r'''
-typedef A = Never;
-void f(Never a) {}
+library
+  definingUnit
+    typeAliases
+      A @8
+        aliasedType: Never
+    functions
+      f @24
+        parameters
+          requiredPositional a @28
+            type: Never
+        returnType: void
 ''');
   }
 
@@ -15623,8 +30694,17 @@
 void f(A a) {}
 ''');
     checkElementText(library, r'''
-typedef A = Never?;
-void f(Never? a) {}
+library
+  definingUnit
+    typeAliases
+      A @8
+        aliasedType: Never?
+    functions
+      f @25
+        parameters
+          requiredPositional a @29
+            type: Never?
+        returnType: void
 ''');
   }
 
@@ -15636,9 +30716,28 @@
 void f2(A<int> a) {}
 ''');
     checkElementText(library, r'''
-typedef A<T> = T;
-void f1(dynamic a) {}
-void f2(int a) {}
+library
+  definingUnit
+    typeAliases
+      A @8
+        typeParameters
+          covariant T @10
+            defaultType: dynamic
+        aliasedType: T
+    functions
+      f1 @23
+        parameters
+          requiredPositional a @28
+            type: dynamic
+        returnType: void
+      f2 @39
+        parameters
+          requiredPositional a @49
+            type: int
+              aliasElement: self::@typeAlias::A
+              aliasArguments
+                int
+        returnType: void
 ''');
   }
 
@@ -15650,9 +30749,28 @@
 void f2(A<int> a) {}
 ''');
     checkElementText(library, r'''
-typedef A<T> = T?;
-void f1(dynamic a) {}
-void f2(int? a) {}
+library
+  definingUnit
+    typeAliases
+      A @8
+        typeParameters
+          covariant T @10
+            defaultType: dynamic
+        aliasedType: T?
+    functions
+      f1 @24
+        parameters
+          requiredPositional a @29
+            type: dynamic
+        returnType: void
+      f2 @40
+        parameters
+          requiredPositional a @50
+            type: int?
+              aliasElement: self::@typeAlias::A
+              aliasArguments
+                int
+        returnType: void
 ''');
   }
 
@@ -15663,8 +30781,17 @@
 void f(A a) {}
 ''');
     checkElementText(library, r'''
-typedef A = void;
-void f(void a) {}
+library
+  definingUnit
+    typeAliases
+      A @8
+        aliasedType: void
+    functions
+      f @23
+        parameters
+          requiredPositional a @27
+            type: void
+        returnType: void
 ''');
   }
 
@@ -15676,9 +30803,24 @@
 class C<T extends C<T>> {}
 ''');
     checkElementText(library, r'''
-notSimplyBounded typedef F = void Function(C<C<dynamic>> c);
-notSimplyBounded class C<T extends C<T> = C<dynamic>> {
-}
+library
+  definingUnit
+    classes
+      notSimplyBounded class C @38
+        typeParameters
+          covariant T @40
+            bound: C<T>
+            defaultType: C<dynamic>
+        constructors
+          synthetic @-1
+    typeAliases
+      notSimplyBounded F @8
+        aliasedType: void Function(C<C<dynamic>>)
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional c @-1
+              type: C<C<dynamic>>
+          returnType: void
 ''');
   }
 
@@ -15690,9 +30832,24 @@
 class C<T extends C<T>> {}
 ''');
     checkElementText(library, r'''
-notSimplyBounded typedef F = void Function(C<C<dynamic>> );
-notSimplyBounded class C<T extends C<T> = C<dynamic>> {
-}
+library
+  definingUnit
+    classes
+      notSimplyBounded class C @36
+        typeParameters
+          covariant T @38
+            bound: C<T>
+            defaultType: C<dynamic>
+        constructors
+          synthetic @-1
+    typeAliases
+      notSimplyBounded F @8
+        aliasedType: void Function(C<C<dynamic>>)
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional @-1
+              type: C<C<dynamic>>
+          returnType: void
 ''');
   }
 
@@ -15704,9 +30861,24 @@
 class C<T extends C<T>> {}
 ''');
     checkElementText(library, r'''
-notSimplyBounded typedef F = void Function(C<C<dynamic>> c);
-notSimplyBounded class C<T extends C<T> = C<dynamic>> {
-}
+library
+  definingUnit
+    classes
+      notSimplyBounded class C @27
+        typeParameters
+          covariant T @29
+            bound: C<T>
+            defaultType: C<dynamic>
+        constructors
+          synthetic @-1
+    typeAliases
+      functionTypeAliasBased notSimplyBounded F @13
+        aliasedType: void Function(C<C<dynamic>>)
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional c @-1
+              type: C<C<dynamic>>
+          returnType: void
 ''');
   }
 
@@ -15718,9 +30890,21 @@
 class C<T extends C<T>> {}
 ''');
     checkElementText(library, r'''
-notSimplyBounded typedef F = C<C<dynamic>> Function();
-notSimplyBounded class C<T extends C<T> = C<dynamic>> {
-}
+library
+  definingUnit
+    classes
+      notSimplyBounded class C @32
+        typeParameters
+          covariant T @34
+            bound: C<T>
+            defaultType: C<dynamic>
+        constructors
+          synthetic @-1
+    typeAliases
+      notSimplyBounded F @8
+        aliasedType: C<C<dynamic>> Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: C<C<dynamic>>
 ''');
   }
 
@@ -15732,9 +30916,21 @@
 class C<T extends C<T>> {}
 ''');
     checkElementText(library, r'''
-notSimplyBounded typedef F = C<C<dynamic>> Function();
-notSimplyBounded class C<T extends C<T> = C<dynamic>> {
-}
+library
+  definingUnit
+    classes
+      notSimplyBounded class C @21
+        typeParameters
+          covariant T @23
+            bound: C<T>
+            defaultType: C<dynamic>
+        constructors
+          synthetic @-1
+    typeAliases
+      functionTypeAliasBased notSimplyBounded F @10
+        aliasedType: C<C<dynamic>> Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: C<C<dynamic>>
 ''');
   }
 
@@ -15754,84 +30950,210 @@
   test_typedef_parameter_parameters() async {
     var library = await checkLibrary('typedef F(g(x, y));');
     checkElementText(library, r'''
-typedef F = dynamic Function(dynamic Function(dynamic, dynamic) g/*(dynamic x, dynamic y)*/);
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased F @8
+        aliasedType: dynamic Function(dynamic Function(dynamic, dynamic))
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional g @-1
+              type: dynamic Function(dynamic, dynamic)
+              parameters
+                requiredPositional x @-1
+                  type: dynamic
+                requiredPositional y @-1
+                  type: dynamic
+          returnType: dynamic
 ''');
   }
 
   test_typedef_parameter_parameters_in_generic_class() async {
     var library = await checkLibrary('typedef F<A, B>(A g(B x));');
     checkElementText(library, r'''
-typedef F<A, B> = dynamic Function(A Function(B) g/*(B x)*/);
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased F @8
+        typeParameters
+          contravariant A @10
+            defaultType: dynamic
+          covariant B @13
+            defaultType: dynamic
+        aliasedType: dynamic Function(A Function(B))
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional g @-1
+              type: A Function(B)
+              parameters
+                requiredPositional x @-1
+                  type: B
+          returnType: dynamic
 ''');
   }
 
   test_typedef_parameter_return_type() async {
     var library = await checkLibrary('typedef F(int g());');
     checkElementText(library, r'''
-typedef F = dynamic Function(int Function() g);
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased F @8
+        aliasedType: dynamic Function(int Function())
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional g @-1
+              type: int Function()
+          returnType: dynamic
 ''');
   }
 
   test_typedef_parameter_type() async {
     var library = await checkLibrary('typedef F(int i);');
     checkElementText(library, r'''
-typedef F = dynamic Function(int i);
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased F @8
+        aliasedType: dynamic Function(int)
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional i @-1
+              type: int
+          returnType: dynamic
 ''');
   }
 
   test_typedef_parameter_type_generic() async {
     var library = await checkLibrary('typedef F<T>(T t);');
     checkElementText(library, r'''
-typedef F<T> = dynamic Function(T t);
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased F @8
+        typeParameters
+          contravariant T @10
+            defaultType: dynamic
+        aliasedType: dynamic Function(T)
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional t @-1
+              type: T
+          returnType: dynamic
 ''');
   }
 
   test_typedef_parameters() async {
     var library = await checkLibrary('typedef F(x, y);');
     checkElementText(library, r'''
-typedef F = dynamic Function(dynamic x, dynamic y);
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased F @8
+        aliasedType: dynamic Function(dynamic, dynamic)
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional x @-1
+              type: dynamic
+            requiredPositional y @-1
+              type: dynamic
+          returnType: dynamic
 ''');
   }
 
   test_typedef_parameters_named() async {
     var library = await checkLibrary('typedef F({y, z, x});');
     checkElementText(library, r'''
-typedef F = dynamic Function({dynamic y}, {dynamic z}, {dynamic x});
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased F @8
+        aliasedType: dynamic Function({dynamic x, dynamic y, dynamic z})
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            optionalNamed y @-1
+              type: dynamic
+            optionalNamed z @-1
+              type: dynamic
+            optionalNamed x @-1
+              type: dynamic
+          returnType: dynamic
 ''');
   }
 
   test_typedef_return_type() async {
     var library = await checkLibrary('typedef int F();');
     checkElementText(library, r'''
-typedef F = int Function();
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased F @12
+        aliasedType: int Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: int
 ''');
   }
 
   test_typedef_return_type_generic() async {
     var library = await checkLibrary('typedef T F<T>();');
     checkElementText(library, r'''
-typedef F<T> = T Function();
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased F @10
+        typeParameters
+          covariant T @12
+            defaultType: dynamic
+        aliasedType: T Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: T
 ''');
   }
 
   test_typedef_return_type_implicit() async {
     var library = await checkLibrary('typedef F();');
     checkElementText(library, r'''
-typedef F = dynamic Function();
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased F @8
+        aliasedType: dynamic Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: dynamic
 ''');
   }
 
   test_typedef_return_type_void() async {
     var library = await checkLibrary('typedef void F();');
     checkElementText(library, r'''
-typedef F = void Function();
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased F @13
+        aliasedType: void Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: void
 ''');
   }
 
   test_typedef_type_parameters() async {
     var library = await checkLibrary('typedef U F<T, U>(T t);');
     checkElementText(library, r'''
-typedef F<T, U> = U Function(T t);
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased F @10
+        typeParameters
+          contravariant T @12
+            defaultType: dynamic
+          covariant U @15
+            defaultType: dynamic
+        aliasedType: U Function(T)
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional t @-1
+              type: T
+          returnType: U
 ''');
   }
 
@@ -15839,9 +31161,27 @@
     var library = await checkLibrary(
         'typedef U F<T extends Object, U extends D>(T t); class D {}');
     checkElementText(library, r'''
-typedef F<T = Object, U extends D = D> = U Function(T t);
-class D {
-}
+library
+  definingUnit
+    classes
+      class D @55
+        constructors
+          synthetic @-1
+    typeAliases
+      functionTypeAliasBased F @10
+        typeParameters
+          contravariant T @12
+            bound: Object
+            defaultType: Object
+          covariant U @30
+            bound: D
+            defaultType: D
+        aliasedType: U Function(T)
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional t @-1
+              type: T
+          returnType: U
 ''');
   }
 
@@ -15849,7 +31189,17 @@
     var library = await checkLibrary('typedef void F<T extends F>();');
     // Typedefs cannot reference themselves.
     checkElementText(library, r'''
-notSimplyBounded typedef F<T extends dynamic Function()> = void Function();
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased notSimplyBounded F @13
+        typeParameters
+          unrelated T @15
+            bound: dynamic Function()
+            defaultType: dynamic
+        aliasedType: void Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: void
 ''');
   }
 
@@ -15857,14 +31207,39 @@
     var library = await checkLibrary('typedef void F<T extends List<F>>();');
     // Typedefs cannot reference themselves.
     checkElementText(library, r'''
-notSimplyBounded typedef F<T extends List<dynamic Function()>> = void Function();
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased notSimplyBounded F @13
+        typeParameters
+          unrelated T @15
+            bound: List<dynamic Function()>
+            defaultType: dynamic
+        aliasedType: void Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: void
 ''');
   }
 
   test_typedef_type_parameters_f_bound_complex() async {
     var library = await checkLibrary('typedef U F<T extends List<U>, U>(T t);');
     checkElementText(library, r'''
-notSimplyBounded typedef F<T extends List<U> = List<Never>, U> = U Function(T t);
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased notSimplyBounded F @10
+        typeParameters
+          contravariant T @12
+            bound: List<U>
+            defaultType: List<Never>
+          covariant U @31
+            defaultType: dynamic
+        aliasedType: U Function(T)
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional t @-1
+              type: T
+          returnType: U
 ''');
   }
 
@@ -15872,14 +31247,44 @@
     featureSet = FeatureSets.beforeNullSafe;
     var library = await checkLibrary('typedef U F<T extends List<U>, U>(T t);');
     checkElementText(library, r'''
-notSimplyBounded typedef F<T extends List<U*>* = List<Null*>*, U> = U* Function(T* t);
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased notSimplyBounded F @10
+        typeParameters
+          contravariant T @12
+            bound: List<U*>*
+            defaultType: List<Null*>*
+          covariant U @31
+            defaultType: dynamic
+        aliasedType: U* Function(T*)*
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional t @-1
+              type: T*
+          returnType: U*
 ''');
   }
 
   test_typedef_type_parameters_f_bound_simple() async {
     var library = await checkLibrary('typedef U F<T extends U, U>(T t);');
     checkElementText(library, r'''
-notSimplyBounded typedef F<T extends U = Never, U> = U Function(T t);
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased notSimplyBounded F @10
+        typeParameters
+          contravariant T @12
+            bound: U
+            defaultType: Never
+          covariant U @25
+            defaultType: dynamic
+        aliasedType: U Function(T)
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional t @-1
+              type: T
+          returnType: U
 ''');
   }
 
@@ -15887,7 +31292,22 @@
     featureSet = FeatureSets.beforeNullSafe;
     var library = await checkLibrary('typedef U F<T extends U, U>(T t);');
     checkElementText(library, r'''
-notSimplyBounded typedef F<T extends U* = Null*, U> = U* Function(T* t);
+library
+  definingUnit
+    typeAliases
+      functionTypeAliasBased notSimplyBounded F @10
+        typeParameters
+          contravariant T @12
+            bound: U*
+            defaultType: Null*
+          covariant U @25
+            defaultType: dynamic
+        aliasedType: U* Function(T*)*
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional t @-1
+              type: T*
+          returnType: U*
 ''');
   }
 
@@ -15895,7 +31315,22 @@
     var library =
         await checkLibrary('typedef F<T extends U, U> = U Function(T t);');
     checkElementText(library, r'''
-notSimplyBounded typedef F<T extends U = Never, U> = U Function(T t);
+library
+  definingUnit
+    typeAliases
+      notSimplyBounded F @8
+        typeParameters
+          contravariant T @10
+            bound: U
+            defaultType: Never
+          covariant U @23
+            defaultType: dynamic
+        aliasedType: U Function(T)
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional t @-1
+              type: T
+          returnType: U
 ''');
   }
 
@@ -15904,15 +31339,35 @@
     var library =
         await checkLibrary('typedef F<T extends U, U> = U Function(T t);');
     checkElementText(library, r'''
-notSimplyBounded typedef F<T extends U* = Null*, U> = U* Function(T* t);
+library
+  definingUnit
+    typeAliases
+      notSimplyBounded F @8
+        typeParameters
+          contravariant T @10
+            bound: U*
+            defaultType: Null*
+          covariant U @23
+            defaultType: dynamic
+        aliasedType: U* Function(T*)*
+        aliasedElement: GenericFunctionTypeElement
+          parameters
+            requiredPositional t @-1
+              type: T*
+          returnType: U*
 ''');
   }
 
   test_typedefs() async {
     var library = await checkLibrary('f() {} g() {}');
     checkElementText(library, r'''
-dynamic f() {}
-dynamic g() {}
+library
+  definingUnit
+    functions
+      f @0
+        returnType: dynamic
+      g @7
+        returnType: dynamic
 ''');
   }
 
@@ -15921,14 +31376,21 @@
 int get x => 0;
 void set x(int value) {}
 ''');
-    checkElementText(
-        library,
-        r'''
-synthetic int x;
-int get x {}
-void set x(int value) {}
-''',
-        withSyntheticFields: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      synthetic static x @-1
+        type: int
+    accessors
+      get x @8
+        returnType: int
+      set x @25
+        parameters
+          requiredPositional value @31
+            type: int
+        returnType: void
+''');
   }
 
   test_unit_implicitVariable_setterFirst() async {
@@ -15936,14 +31398,21 @@
 void set x(int value) {}
 int get x => 0;
 ''');
-    checkElementText(
-        library,
-        r'''
-synthetic int x;
-void set x(int value) {}
-int get x {}
-''',
-        withSyntheticFields: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      synthetic static x @-1
+        type: int
+    accessors
+      set x @9
+        parameters
+          requiredPositional value @15
+            type: int
+        returnType: void
+      get x @33
+        returnType: int
+''');
   }
 
   test_unit_variable_final_withSetter() async {
@@ -15951,15 +31420,21 @@
 final int foo = 0;
 set foo(int newValue) {}
 ''');
-    checkElementText(
-        library,
-        r'''
-final int foo;
-synthetic int get foo {}
-void set foo(int newValue) {}
-''',
-        withSyntheticFields: true,
-        withSyntheticAccessors: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static final foo @10
+        type: int
+    accessors
+      synthetic static get foo @10
+        returnType: int
+      set foo @10
+        parameters
+          requiredPositional newValue @31
+            type: int
+        returnType: void
+''');
   }
 
   test_unresolved_annotation_instanceCreation_argument_super() async {
@@ -15972,13 +31447,33 @@
 class C {}
 ''', allowErrors: true);
     checkElementText(library, r'''
-class A {
-  const A(dynamic _);
-}
-@
-        A/*location: test.dart;A*/(super)
-class C {
-}
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          const @18
+            parameters
+              requiredPositional _ @20
+                type: dynamic
+      class C @43
+        metadata
+          Annotation
+            arguments: ArgumentList
+              arguments
+                SuperExpression
+                  staticType: dynamic
+                  superKeyword: super @0
+              leftParenthesis: ( @29
+              rightParenthesis: ) @35
+            atSign.offset: 27
+            element: self::@class::A::@constructor::•
+            name: SimpleIdentifier
+              staticElement: self::@class::A
+              staticType: null
+              token: A @28
+        constructors
+          synthetic @-1
 ''');
   }
 
@@ -15992,13 +31487,33 @@
 class C {}
 ''', allowErrors: true);
     checkElementText(library, r'''
-class A {
-  const A(dynamic _);
-}
-@
-        A/*location: test.dart;A*/(this)
-class C {
-}
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          const @18
+            parameters
+              requiredPositional _ @20
+                type: dynamic
+      class C @42
+        metadata
+          Annotation
+            arguments: ArgumentList
+              arguments
+                ThisExpression
+                  staticType: dynamic
+                  thisKeyword: this @0
+              leftParenthesis: ( @29
+              rightParenthesis: ) @34
+            atSign.offset: 27
+            element: self::@class::A::@constructor::•
+            name: SimpleIdentifier
+              staticElement: self::@class::A
+              staticType: null
+              token: A @28
+        constructors
+          synthetic @-1
 ''');
   }
 
@@ -16006,11 +31521,31 @@
     var library =
         await checkLibrary('@foo.bar() class C {}', allowErrors: true);
     checkElementText(library, r'''
-@
-        foo/*location: null*/.
-        bar/*location: null*/()
-class C {
-}
+library
+  definingUnit
+    classes
+      class C @17
+        metadata
+          Annotation
+            arguments: ArgumentList
+              leftParenthesis: ( @8
+              rightParenthesis: ) @9
+            atSign.offset: 0
+            element: <null>
+            name: PrefixedIdentifier
+              identifier: SimpleIdentifier
+                staticElement: <null>
+                staticType: null
+                token: bar @5
+              period: . @0
+              prefix: SimpleIdentifier
+                staticElement: <null>
+                staticType: null
+                token: foo @1
+              staticElement: <null>
+              staticType: null
+        constructors
+          synthetic @-1
 ''');
   }
 
@@ -16018,22 +31553,59 @@
     var library =
         await checkLibrary('@String.foo() class C {}', allowErrors: true);
     checkElementText(library, r'''
-@
-        String/*location: dart:core;String*/.
-        foo/*location: null*/()
-class C {
-}
+library
+  definingUnit
+    classes
+      class C @20
+        metadata
+          Annotation
+            arguments: ArgumentList
+              leftParenthesis: ( @11
+              rightParenthesis: ) @12
+            atSign.offset: 0
+            element: <null>
+            name: PrefixedIdentifier
+              identifier: SimpleIdentifier
+                staticElement: <null>
+                staticType: null
+                token: foo @8
+              period: . @0
+              prefix: SimpleIdentifier
+                staticElement: dart:core::@class::String
+                staticType: null
+                token: String @1
+              staticElement: <null>
+              staticType: null
+        constructors
+          synthetic @-1
 ''');
   }
 
   test_unresolved_annotation_prefixedIdentifier_badPrefix() async {
     var library = await checkLibrary('@foo.bar class C {}', allowErrors: true);
     checkElementText(library, r'''
-@
-        foo/*location: null*/.
-        bar/*location: null*/
-class C {
-}
+library
+  definingUnit
+    classes
+      class C @15
+        metadata
+          Annotation
+            atSign.offset: 0
+            element: <null>
+            name: PrefixedIdentifier
+              identifier: SimpleIdentifier
+                staticElement: <null>
+                staticType: null
+                token: bar @5
+              period: . @0
+              prefix: SimpleIdentifier
+                staticElement: <null>
+                staticType: null
+                token: foo @1
+              staticElement: <null>
+              staticType: null
+        constructors
+          synthetic @-1
 ''');
   }
 
@@ -16042,12 +31614,30 @@
         'import "dart:async" as foo; @foo.bar class C {}',
         allowErrors: true);
     checkElementText(library, r'''
-import 'dart:async' as foo;
-@
-        foo/*location: test.dart;foo*/.
-        bar/*location: null*/
-class C {
-}
+library
+  imports
+    dart:async as foo @23
+  definingUnit
+    classes
+      class C @43
+        metadata
+          Annotation
+            atSign.offset: 28
+            element: <null>
+            name: PrefixedIdentifier
+              identifier: SimpleIdentifier
+                staticElement: <null>
+                staticType: null
+                token: bar @33
+              period: . @0
+              prefix: SimpleIdentifier
+                staticElement: self::@prefix::foo
+                staticType: null
+                token: foo @29
+              staticElement: <null>
+              staticType: null
+        constructors
+          synthetic @-1
 ''');
   }
 
@@ -16055,12 +31645,35 @@
     var library =
         await checkLibrary('@foo.bar.baz() class C {}', allowErrors: true);
     checkElementText(library, r'''
-@
-        foo/*location: null*/.
-        bar/*location: null*/.
-        baz/*location: null*/()
-class C {
-}
+library
+  definingUnit
+    classes
+      class C @21
+        metadata
+          Annotation
+            arguments: ArgumentList
+              leftParenthesis: ( @12
+              rightParenthesis: ) @13
+            atSign.offset: 0
+            constructorName: SimpleIdentifier
+              staticElement: <null>
+              staticType: null
+              token: baz @9
+            element: <null>
+            name: PrefixedIdentifier
+              identifier: SimpleIdentifier
+                staticElement: <null>
+                staticType: null
+                token: bar @5
+              period: . @0
+              prefix: SimpleIdentifier
+                staticElement: <null>
+                staticType: null
+                token: foo @1
+              staticElement: <null>
+              staticType: null
+        constructors
+          synthetic @-1
 ''');
   }
 
@@ -16069,13 +31682,37 @@
         'import "dart:async" as foo; @foo.bar.baz() class C {}',
         allowErrors: true);
     checkElementText(library, r'''
-import 'dart:async' as foo;
-@
-        foo/*location: test.dart;foo*/.
-        bar/*location: null*/.
-        baz/*location: null*/()
-class C {
-}
+library
+  imports
+    dart:async as foo @23
+  definingUnit
+    classes
+      class C @49
+        metadata
+          Annotation
+            arguments: ArgumentList
+              leftParenthesis: ( @40
+              rightParenthesis: ) @41
+            atSign.offset: 28
+            constructorName: SimpleIdentifier
+              staticElement: <null>
+              staticType: null
+              token: baz @37
+            element: <null>
+            name: PrefixedIdentifier
+              identifier: SimpleIdentifier
+                staticElement: <null>
+                staticType: null
+                token: bar @33
+              period: . @0
+              prefix: SimpleIdentifier
+                staticElement: self::@prefix::foo
+                staticType: null
+                token: foo @29
+              staticElement: <null>
+              staticType: null
+        constructors
+          synthetic @-1
 ''');
   }
 
@@ -16084,13 +31721,37 @@
         'import "dart:async" as foo; @foo.Future.bar() class C {}',
         allowErrors: true);
     checkElementText(library, r'''
-import 'dart:async' as foo;
-@
-        foo/*location: test.dart;foo*/.
-        Future/*location: dart:async;Future*/.
-        bar/*location: null*/()
-class C {
-}
+library
+  imports
+    dart:async as foo @23
+  definingUnit
+    classes
+      class C @52
+        metadata
+          Annotation
+            arguments: ArgumentList
+              leftParenthesis: ( @43
+              rightParenthesis: ) @44
+            atSign.offset: 28
+            constructorName: SimpleIdentifier
+              staticElement: <null>
+              staticType: null
+              token: bar @40
+            element: <null>
+            name: PrefixedIdentifier
+              identifier: SimpleIdentifier
+                staticElement: dart:async::@class::Future
+                staticType: null
+                token: Future @33
+              period: . @0
+              prefix: SimpleIdentifier
+                staticElement: self::@prefix::foo
+                staticType: null
+                token: foo @29
+              staticElement: dart:async::@class::Future
+              staticType: null
+        constructors
+          synthetic @-1
 ''');
   }
 
@@ -16098,11 +31759,31 @@
     var library =
         await checkLibrary('@foo.bar() class C {}', allowErrors: true);
     checkElementText(library, r'''
-@
-        foo/*location: null*/.
-        bar/*location: null*/()
-class C {
-}
+library
+  definingUnit
+    classes
+      class C @17
+        metadata
+          Annotation
+            arguments: ArgumentList
+              leftParenthesis: ( @8
+              rightParenthesis: ) @9
+            atSign.offset: 0
+            element: <null>
+            name: PrefixedIdentifier
+              identifier: SimpleIdentifier
+                staticElement: <null>
+                staticType: null
+                token: bar @5
+              period: . @0
+              prefix: SimpleIdentifier
+                staticElement: <null>
+                staticType: null
+                token: foo @1
+              staticElement: <null>
+              staticType: null
+        constructors
+          synthetic @-1
 ''');
   }
 
@@ -16111,31 +31792,54 @@
         'import "dart:async" as foo; @foo.bar() class C {}',
         allowErrors: true);
     checkElementText(library, r'''
-import 'dart:async' as foo;
-@
-        foo/*location: test.dart;foo*/.
-        bar/*location: null*/()
-class C {
-}
+library
+  imports
+    dart:async as foo @23
+  definingUnit
+    classes
+      class C @45
+        metadata
+          Annotation
+            arguments: ArgumentList
+              leftParenthesis: ( @36
+              rightParenthesis: ) @37
+            atSign.offset: 28
+            element: <null>
+            name: PrefixedIdentifier
+              identifier: SimpleIdentifier
+                staticElement: <null>
+                staticType: null
+                token: bar @33
+              period: . @0
+              prefix: SimpleIdentifier
+                staticElement: self::@prefix::foo
+                staticType: null
+                token: foo @29
+              staticElement: <null>
+              staticType: null
+        constructors
+          synthetic @-1
 ''');
   }
 
   test_unresolved_annotation_simpleIdentifier() async {
     var library = await checkLibrary('@foo class C {}', allowErrors: true);
-    checkElementText(
-        library,
-        r'''
-class C {
-}
-  metadata
-    Annotation
-      element: <null>
-      name: SimpleIdentifier
-        staticElement: <null>
-        staticType: null
-        token: foo
-''',
-        withResolvedAst: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class C @11
+        metadata
+          Annotation
+            atSign.offset: 0
+            element: <null>
+            name: SimpleIdentifier
+              staticElement: <null>
+              staticType: null
+              token: foo @1
+        constructors
+          synthetic @-1
+''');
   }
 
   test_unresolved_annotation_simpleIdentifier_multiplyDefined() async {
@@ -16148,38 +31852,57 @@
 @v
 class C {}
 ''');
-    checkElementText(
-        library,
-        r'''
-import 'a.dart';
-import 'b.dart';
-class C {
-}
-  metadata
-    Annotation
-      element: <null>
-      name: SimpleIdentifier
-        staticElement: <null>
-        staticType: null
-        token: v
-''',
-        withResolvedAst: true);
+    checkElementText(library, r'''
+library
+  imports
+    a.dart
+    b.dart
+  definingUnit
+    classes
+      class C @44
+        metadata
+          Annotation
+            atSign.offset: 35
+            element: <null>
+            name: SimpleIdentifier
+              staticElement: <null>
+              staticType: null
+              token: v @36
+        constructors
+          synthetic @-1
+''');
   }
 
   test_unresolved_annotation_unnamedConstructorCall_noClass() async {
     var library = await checkLibrary('@foo() class C {}', allowErrors: true);
     checkElementText(library, r'''
-@
-        foo/*location: null*/()
-class C {
-}
+library
+  definingUnit
+    classes
+      class C @13
+        metadata
+          Annotation
+            arguments: ArgumentList
+              leftParenthesis: ( @4
+              rightParenthesis: ) @5
+            atSign.offset: 0
+            element: <null>
+            name: SimpleIdentifier
+              staticElement: <null>
+              staticType: null
+              token: foo @1
+        constructors
+          synthetic @-1
 ''');
   }
 
   test_unresolved_export() async {
     var library = await checkLibrary("export 'foo.dart';", allowErrors: true);
     checkElementText(library, r'''
-export 'foo.dart';
+library
+  exports
+    foo.dart
+  definingUnit
 ''');
   }
 
@@ -16190,17 +31913,20 @@
     expect(importedLibrary.publicNamespace, isNotNull);
     expect(importedLibrary.exportNamespace, isNotNull);
     checkElementText(library, r'''
-import 'foo.dart';
+library
+  imports
+    foo.dart
+  definingUnit
 ''');
   }
 
   test_unresolved_part() async {
     var library = await checkLibrary("part 'foo.dart';", allowErrors: true);
     checkElementText(library, r'''
-part 'foo.dart';
---------------------
-unit: foo.dart
-
+library
+  definingUnit
+  parts
+    foo.dart
 ''');
   }
 
@@ -16213,38 +31939,93 @@
 var v = c.f;
 ''');
     checkElementText(library, r'''
-class C<T> {
-  void f() {}
-}
-C<int> c;
-void Function() v;
+library
+  definingUnit
+    classes
+      class C @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+        methods
+          f @20
+            returnType: void
+    topLevelVariables
+      static c @36
+        type: C<int>
+      static v @43
+        type: void Function()
+    accessors
+      synthetic static get c @36
+        returnType: C<int>
+      synthetic static set c @36
+        parameters
+          requiredPositional _c @36
+            type: C<int>
+        returnType: void
+      synthetic static get v @43
+        returnType: void Function()
+      synthetic static set v @43
+        parameters
+          requiredPositional _v @43
+            type: void Function()
+        returnType: void
 ''');
   }
 
   test_variable() async {
     var library = await checkLibrary('int x = 0;');
-    checkElementText(
-        library,
-        r'''
-int x@4;
-synthetic int get x@4 {}
-synthetic void set x@4(int _x@4) {}
-''',
-        withOffsets: true,
-        withSyntheticAccessors: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static x @4
+        type: int
+    accessors
+      synthetic static get x @4
+        returnType: int
+      synthetic static set x @4
+        parameters
+          requiredPositional _x @4
+            type: int
+        returnType: void
+''');
   }
 
   test_variable_const() async {
     var library = await checkLibrary('const int i = 0;');
     checkElementText(library, r'''
-const int i = 0;
+library
+  definingUnit
+    topLevelVariables
+      static const i @10
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 0 @14
+            staticType: int
+    accessors
+      synthetic static get i @10
+        returnType: int
 ''');
   }
 
   test_variable_const_late() async {
     var library = await checkLibrary('late const int i = 0;');
     checkElementText(library, r'''
-late const int i = 0;
+library
+  definingUnit
+    topLevelVariables
+      static late const i @15
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 0 @19
+            staticType: int
+    accessors
+      synthetic static get i @15
+        returnType: int
 ''');
   }
 
@@ -16256,17 +32037,34 @@
  */
 var x;''');
     checkElementText(library, r'''
-/**
- * Docs
- */
-dynamic x;
+library
+  definingUnit
+    topLevelVariables
+      static x @64
+        documentationComment: /**\n * Docs\n */
+        type: dynamic
+    accessors
+      synthetic static get x @64
+        returnType: dynamic
+      synthetic static set x @64
+        parameters
+          requiredPositional _x @64
+            type: dynamic
+        returnType: void
 ''');
   }
 
   test_variable_final() async {
     var library = await checkLibrary('final int x = 0;');
     checkElementText(library, r'''
-final int x;
+library
+  definingUnit
+    topLevelVariables
+      static final x @10
+        type: int
+    accessors
+      synthetic static get x @10
+        returnType: int
 ''');
   }
 
@@ -16280,13 +32078,27 @@
 part 'a.dart';
 int get x => 42;''');
     checkElementText(library, r'''
-library my.lib;
-part 'a.dart';
-int get x {}
---------------------
-unit: a.dart
-
-void set x(int _) {}
+library
+  name: my.lib
+  nameOffset: 8
+  definingUnit
+    topLevelVariables
+      synthetic static x @-1
+        type: int
+    accessors
+      get x @39
+        returnType: int
+  parts
+    a.dart
+      topLevelVariables
+        synthetic static x @-1
+          type: int
+      accessors
+        set x @25
+          parameters
+            requiredPositional _ @31
+              type: int
+          returnType: void
 ''');
   }
 
@@ -16301,13 +32113,27 @@
 void set x(int _) {}
 ''');
     checkElementText(library, r'''
-library my.lib;
-part 'a.dart';
-void set x(int _) {}
---------------------
-unit: a.dart
-
-int get x {}
+library
+  name: my.lib
+  nameOffset: 8
+  definingUnit
+    topLevelVariables
+      synthetic static x @-1
+        type: int
+    accessors
+      set x @40
+        parameters
+          requiredPositional _ @46
+            type: int
+        returnType: void
+  parts
+    a.dart
+      topLevelVariables
+        synthetic static x @-1
+          type: int
+      accessors
+        get x @24
+          returnType: int
 ''');
   }
 
@@ -16317,17 +32143,28 @@
     var library =
         await checkLibrary('library my.lib; part "a.dart"; part "b.dart";');
     checkElementText(library, r'''
-library my.lib;
-part 'a.dart';
-part 'b.dart';
---------------------
-unit: a.dart
-
-int get x {}
---------------------
-unit: b.dart
-
-void set x(int _) {}
+library
+  name: my.lib
+  nameOffset: 8
+  definingUnit
+  parts
+    a.dart
+      topLevelVariables
+        synthetic static x @-1
+          type: int
+      accessors
+        get x @24
+          returnType: int
+    b.dart
+      topLevelVariables
+        synthetic static x @-1
+          type: int
+      accessors
+        set x @25
+          parameters
+            requiredPositional _ @31
+              type: int
+          returnType: void
 ''');
   }
 
@@ -16349,35 +32186,85 @@
   test_variable_implicit_type() async {
     var library = await checkLibrary('var x;');
     checkElementText(library, r'''
-dynamic x;
+library
+  definingUnit
+    topLevelVariables
+      static x @4
+        type: dynamic
+    accessors
+      synthetic static get x @4
+        returnType: dynamic
+      synthetic static set x @4
+        parameters
+          requiredPositional _x @4
+            type: dynamic
+        returnType: void
 ''');
   }
 
   test_variable_inferred_type_implicit_initialized() async {
     var library = await checkLibrary('var v = 0;');
     checkElementText(library, r'''
-int v;
+library
+  definingUnit
+    topLevelVariables
+      static v @4
+        type: int
+    accessors
+      synthetic static get v @4
+        returnType: int
+      synthetic static set v @4
+        parameters
+          requiredPositional _v @4
+            type: int
+        returnType: void
 ''');
   }
 
   test_variable_initializer() async {
     var library = await checkLibrary('int v = 0;');
     checkElementText(library, r'''
-int v;
+library
+  definingUnit
+    topLevelVariables
+      static v @4
+        type: int
+    accessors
+      synthetic static get v @4
+        returnType: int
+      synthetic static set v @4
+        parameters
+          requiredPositional _v @4
+            type: int
+        returnType: void
 ''');
   }
 
   test_variable_initializer_final() async {
     var library = await checkLibrary('final int v = 0;');
     checkElementText(library, r'''
-final int v;
+library
+  definingUnit
+    topLevelVariables
+      static final v @10
+        type: int
+    accessors
+      synthetic static get v @10
+        returnType: int
 ''');
   }
 
   test_variable_initializer_final_untyped() async {
     var library = await checkLibrary('final v = 0;');
     checkElementText(library, r'''
-final int v;
+library
+  definingUnit
+    topLevelVariables
+      static final v @6
+        type: int
+    accessors
+      synthetic static get v @6
+        returnType: int
 ''');
   }
 
@@ -16390,61 +32277,118 @@
 var x = E.f();
 ''');
     checkElementText(library, r'''
-class A {
-}
-extension E on A {
-  static int f() {}
-}
-int x;
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          synthetic @-1
+    extensions
+      E @21
+        extendedType: A
+        methods
+          static f @43
+            returnType: int
+    topLevelVariables
+      static x @59
+        type: int
+    accessors
+      synthetic static get x @59
+        returnType: int
+      synthetic static set x @59
+        parameters
+          requiredPositional _x @59
+            type: int
+        returnType: void
 ''');
   }
 
   test_variable_initializer_untyped() async {
     var library = await checkLibrary('var v = 0;');
     checkElementText(library, r'''
-int v;
+library
+  definingUnit
+    topLevelVariables
+      static v @4
+        type: int
+    accessors
+      synthetic static get v @4
+        returnType: int
+      synthetic static set v @4
+        parameters
+          requiredPositional _v @4
+            type: int
+        returnType: void
 ''');
   }
 
   test_variable_late() async {
     var library = await checkLibrary('late int x = 0;');
-    checkElementText(
-        library,
-        r'''
-late int x;
-synthetic int get x {}
-synthetic void set x(int _x) {}
-''',
-        withSyntheticAccessors: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static late x @9
+        type: int
+    accessors
+      synthetic static get x @9
+        returnType: int
+      synthetic static set x @9
+        parameters
+          requiredPositional _x @9
+            type: int
+        returnType: void
+''');
   }
 
   test_variable_late_final() async {
     var library = await checkLibrary('late final int x;');
-    checkElementText(
-        library,
-        r'''
-late final int x;
-synthetic int get x {}
-synthetic void set x(int _x) {}
-''',
-        withSyntheticAccessors: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static late final x @15
+        type: int
+    accessors
+      synthetic static get x @15
+        returnType: int
+      synthetic static set x @15
+        parameters
+          requiredPositional _x @15
+            type: int
+        returnType: void
+''');
   }
 
   test_variable_late_final_initialized() async {
     var library = await checkLibrary('late final int x = 0;');
-    checkElementText(
-        library,
-        r'''
-late final int x;
-synthetic int get x {}
-''',
-        withSyntheticAccessors: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    topLevelVariables
+      static late final x @15
+        type: int
+    accessors
+      synthetic static get x @15
+        returnType: int
+''');
   }
 
   test_variable_propagatedType_const_noDep() async {
     var library = await checkLibrary('const i = 0;');
     checkElementText(library, r'''
-const int i = 0;
+library
+  definingUnit
+    topLevelVariables
+      static const i @6
+        type: int
+        constantInitializer
+          IntegerLiteral
+            literal: 0 @10
+            staticType: int
+    accessors
+      synthetic static get i @6
+        returnType: int
 ''');
   }
 
@@ -16452,8 +32396,16 @@
     addLibrarySource('/a.dart', 'final a = 1;');
     var library = await checkLibrary('import "a.dart"; final b = a / 2;');
     checkElementText(library, r'''
-import 'a.dart';
-final double b;
+library
+  imports
+    a.dart
+  definingUnit
+    topLevelVariables
+      static final b @23
+        type: double
+    accessors
+      synthetic static get b @23
+        returnType: double
 ''');
   }
 
@@ -16462,20 +32414,38 @@
     var library =
         await checkLibrary('library lib; part "a.dart"; final b = a / 2;');
     checkElementText(library, r'''
-library lib;
-part 'a.dart';
-final double b;
---------------------
-unit: a.dart
-
-final int a;
+library
+  name: lib
+  nameOffset: 8
+  definingUnit
+    topLevelVariables
+      static final b @34
+        type: double
+    accessors
+      synthetic static get b @34
+        returnType: double
+  parts
+    a.dart
+      topLevelVariables
+        static final a @19
+          type: int
+      accessors
+        synthetic static get a @19
+          returnType: int
 ''');
   }
 
   test_variable_propagatedType_final_noDep() async {
     var library = await checkLibrary('final i = 0;');
     checkElementText(library, r'''
-final int i;
+library
+  definingUnit
+    topLevelVariables
+      static final i @6
+        type: int
+    accessors
+      synthetic static get i @6
+        returnType: int
 ''');
   }
 
@@ -16485,8 +32455,16 @@
     addLibrarySource('/b.dart', 'import "a.dart"; C f() => null;');
     var library = await checkLibrary('import "b.dart"; final x = f();');
     checkElementText(library, r'''
-import 'b.dart';
-final C x;
+library
+  imports
+    b.dart
+  definingUnit
+    topLevelVariables
+      static final x @23
+        type: C
+    accessors
+      synthetic static get x @23
+        returnType: C
 ''');
   }
 
@@ -16496,17 +32474,28 @@
     var library =
         await checkLibrary('library my.lib; part "a.dart"; part "b.dart";');
     checkElementText(library, r'''
-library my.lib;
-part 'a.dart';
-part 'b.dart';
---------------------
-unit: a.dart
-
-void set x(int _) {}
---------------------
-unit: b.dart
-
-int get x {}
+library
+  name: my.lib
+  nameOffset: 8
+  definingUnit
+  parts
+    a.dart
+      topLevelVariables
+        synthetic static x @-1
+          type: int
+      accessors
+        set x @25
+          parameters
+            requiredPositional _ @31
+              type: int
+          returnType: void
+    b.dart
+      topLevelVariables
+        synthetic static x @-1
+          type: int
+      accessors
+        get x @24
+          returnType: int
 ''');
   }
 
@@ -16516,7 +32505,19 @@
 ''');
 
     checkElementText(library, r'''
-Never a;
+library
+  definingUnit
+    topLevelVariables
+      static a @4
+        type: Never
+    accessors
+      synthetic static get a @4
+        returnType: Never
+      synthetic static set a @4
+        parameters
+          requiredPositional _a @4
+            type: Never
+        returnType: void
 ''');
   }
 
@@ -16526,7 +32527,19 @@
 ''');
 
     checkElementText(library, r'''
-dynamic a;
+library
+  definingUnit
+    topLevelVariables
+      static a @4
+        type: dynamic
+    accessors
+      synthetic static get a @4
+        returnType: dynamic
+      synthetic static set a @4
+        parameters
+          requiredPositional _a @4
+            type: dynamic
+        returnType: void
 ''');
   }
 
@@ -16542,8 +32555,21 @@
 ''');
 
     checkElementText(library, r'''
-import 'a.dart';
-int b;
+library
+  imports
+    a.dart
+  definingUnit
+    topLevelVariables
+      static b @21
+        type: int
+    accessors
+      synthetic static get b @21
+        returnType: int
+      synthetic static set b @21
+        parameters
+          requiredPositional _b @21
+            type: int
+        returnType: void
 ''');
   }
 
@@ -16554,40 +32580,66 @@
 }
 const A<int> a = A();
 ''');
-    checkElementText(
-        library,
-        r'''
-class A {
-  const A();
-}
-  typeParameters
-    T
-      bound: null
-      defaultType: dynamic
-const A<int> a;
-  constantInitializer
-    InstanceCreationExpression
-      argumentList: ArgumentList
-      constructorName: ConstructorName
-        staticElement: ConstructorMember
-          base: self::@class::A::@constructor::•
-          substitution: {T: int}
-        type: TypeName
-          name: SimpleIdentifier
-            staticElement: self::@class::A
-            staticType: null
-            token: A
-          type: A<int>
-      staticType: A<int>
-''',
-        withResolvedAst: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      class A @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        constructors
+          const @21
+    topLevelVariables
+      static const a @41
+        type: A<int>
+        constantInitializer
+          InstanceCreationExpression
+            argumentList: ArgumentList
+              leftParenthesis: ( @46
+              rightParenthesis: ) @47
+            constructorName: ConstructorName
+              staticElement: ConstructorMember
+                base: self::@class::A::@constructor::•
+                substitution: {T: int}
+              type: TypeName
+                name: SimpleIdentifier
+                  staticElement: self::@class::A
+                  staticType: null
+                  token: A @45
+                type: A<int>
+            staticType: A<int>
+    accessors
+      synthetic static get a @41
+        returnType: A<int>
+''');
   }
 
   test_variables() async {
     var library = await checkLibrary('int i; int j;');
     checkElementText(library, r'''
-int i;
-int j;
+library
+  definingUnit
+    topLevelVariables
+      static i @4
+        type: int
+      static j @11
+        type: int
+    accessors
+      synthetic static get i @4
+        returnType: int
+      synthetic static set i @4
+        parameters
+          requiredPositional _i @4
+            type: int
+        returnType: void
+      synthetic static get j @11
+        returnType: int
+      synthetic static set j @11
+        parameters
+          requiredPositional _j @11
+            type: int
+        returnType: void
 ''');
   }
 
diff --git a/pkg/analyzer/test/src/summary/top_level_inference_test.dart b/pkg/analyzer/test/src/summary/top_level_inference_test.dart
index b778258..217f91b 100644
--- a/pkg/analyzer/test/src/summary/top_level_inference_test.dart
+++ b/pkg/analyzer/test/src/summary/top_level_inference_test.dart
@@ -14,7 +14,7 @@
   defineReflectiveSuite(() {
     defineReflectiveTests(TopLevelInferenceTest);
     defineReflectiveTests(TopLevelInferenceErrorsTest);
-//    defineReflectiveTests(ApplyCheckElementTextReplacements);
+    // defineReflectiveTests(ApplyCheckElementTextReplacements);
   });
 }
 
@@ -363,14 +363,82 @@
 var vMinusDoubleDouble = 1.0 - 2.0;
 ''');
     checkElementText(library, r'''
-int vPlusIntInt;
-double vPlusIntDouble;
-double vPlusDoubleInt;
-double vPlusDoubleDouble;
-int vMinusIntInt;
-double vMinusIntDouble;
-double vMinusDoubleInt;
-double vMinusDoubleDouble;
+library
+  definingUnit
+    topLevelVariables
+      static vPlusIntInt @4
+        type: int
+      static vPlusIntDouble @29
+        type: double
+      static vPlusDoubleInt @59
+        type: double
+      static vPlusDoubleDouble @89
+        type: double
+      static vMinusIntInt @124
+        type: int
+      static vMinusIntDouble @150
+        type: double
+      static vMinusDoubleInt @181
+        type: double
+      static vMinusDoubleDouble @212
+        type: double
+    accessors
+      synthetic static get vPlusIntInt @4
+        returnType: int
+      synthetic static set vPlusIntInt @4
+        parameters
+          requiredPositional _vPlusIntInt @4
+            type: int
+        returnType: void
+      synthetic static get vPlusIntDouble @29
+        returnType: double
+      synthetic static set vPlusIntDouble @29
+        parameters
+          requiredPositional _vPlusIntDouble @29
+            type: double
+        returnType: void
+      synthetic static get vPlusDoubleInt @59
+        returnType: double
+      synthetic static set vPlusDoubleInt @59
+        parameters
+          requiredPositional _vPlusDoubleInt @59
+            type: double
+        returnType: void
+      synthetic static get vPlusDoubleDouble @89
+        returnType: double
+      synthetic static set vPlusDoubleDouble @89
+        parameters
+          requiredPositional _vPlusDoubleDouble @89
+            type: double
+        returnType: void
+      synthetic static get vMinusIntInt @124
+        returnType: int
+      synthetic static set vMinusIntInt @124
+        parameters
+          requiredPositional _vMinusIntInt @124
+            type: int
+        returnType: void
+      synthetic static get vMinusIntDouble @150
+        returnType: double
+      synthetic static set vMinusIntDouble @150
+        parameters
+          requiredPositional _vMinusIntDouble @150
+            type: double
+        returnType: void
+      synthetic static get vMinusDoubleInt @181
+        returnType: double
+      synthetic static set vMinusDoubleInt @181
+        parameters
+          requiredPositional _vMinusDoubleInt @181
+            type: double
+        returnType: void
+      synthetic static get vMinusDoubleDouble @212
+        returnType: double
+      synthetic static set vMinusDoubleDouble @212
+        parameters
+          requiredPositional _vMinusDoubleDouble @212
+            type: double
+        returnType: void
 ''');
   }
 
@@ -379,7 +447,19 @@
 var V = 1 as num;
 ''');
     checkElementText(library, r'''
-num V;
+library
+  definingUnit
+    topLevelVariables
+      static V @4
+        type: num
+    accessors
+      synthetic static get V @4
+        returnType: num
+      synthetic static set V @4
+        parameters
+          requiredPositional _V @4
+            type: num
+        returnType: void
 ''');
   }
 
@@ -390,9 +470,37 @@
 var t2 = (a += 2);
 ''');
     checkElementText(library, r'''
-int a;
-int t1;
-int t2;
+library
+  definingUnit
+    topLevelVariables
+      static a @4
+        type: int
+      static t1 @15
+        type: int
+      static t2 @33
+        type: int
+    accessors
+      synthetic static get a @4
+        returnType: int
+      synthetic static set a @4
+        parameters
+          requiredPositional _a @4
+            type: int
+        returnType: void
+      synthetic static get t1 @15
+        returnType: int
+      synthetic static set t1 @15
+        parameters
+          requiredPositional _t1 @15
+            type: int
+        returnType: void
+      synthetic static get t2 @33
+        returnType: int
+      synthetic static set t2 @33
+        parameters
+          requiredPositional _t2 @33
+            type: int
+        returnType: void
 ''');
   }
 
@@ -403,9 +511,37 @@
 var t2 = (a[0] += 2);
 ''');
     checkElementText(library, r'''
-List<int> a;
-int t1;
-int t2;
+library
+  definingUnit
+    topLevelVariables
+      static a @4
+        type: List<int>
+      static t1 @17
+        type: int
+      static t2 @38
+        type: int
+    accessors
+      synthetic static get a @4
+        returnType: List<int>
+      synthetic static set a @4
+        parameters
+          requiredPositional _a @4
+            type: List<int>
+        returnType: void
+      synthetic static get t1 @17
+        returnType: int
+      synthetic static set t1 @17
+        parameters
+          requiredPositional _t1 @17
+            type: int
+        returnType: void
+      synthetic static get t2 @38
+        returnType: int
+      synthetic static set t2 @38
+        parameters
+          requiredPositional _t2 @38
+            type: int
+        returnType: void
 ''');
   }
 
@@ -419,12 +555,52 @@
 var t2 = (a.f += 2);
 ''');
     checkElementText(library, r'''
-class A {
-  int f;
-}
-A a;
-int t1;
-int t2;
+library
+  definingUnit
+    classes
+      class A @6
+        fields
+          f @16
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get f @16
+            returnType: int
+          synthetic set f @16
+            parameters
+              requiredPositional _f @16
+                type: int
+            returnType: void
+    topLevelVariables
+      static a @25
+        type: A
+      static t1 @42
+        type: int
+      static t2 @62
+        type: int
+    accessors
+      synthetic static get a @25
+        returnType: A
+      synthetic static set a @25
+        parameters
+          requiredPositional _a @25
+            type: A
+        returnType: void
+      synthetic static get t1 @42
+        returnType: int
+      synthetic static set t1 @42
+        parameters
+          requiredPositional _t1 @42
+            type: int
+        returnType: void
+      synthetic static get t2 @62
+        returnType: int
+      synthetic static set t2 @62
+        parameters
+          requiredPositional _t2 @62
+            type: int
+        returnType: void
 ''');
   }
 
@@ -439,14 +615,57 @@
 var t2 = (c.f += 2);
 ''');
     checkElementText(library, r'''
-class I {
-  int f;
-}
-abstract class C implements I {
-}
-C c;
-int t1;
-int t2;
+library
+  definingUnit
+    classes
+      class I @6
+        fields
+          f @16
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get f @16
+            returnType: int
+          synthetic set f @16
+            parameters
+              requiredPositional _f @16
+                type: int
+            returnType: void
+      abstract class C @36
+        interfaces
+          I
+        constructors
+          synthetic @-1
+    topLevelVariables
+      static c @56
+        type: C
+      static t1 @63
+        type: int
+      static t2 @83
+        type: int
+    accessors
+      synthetic static get c @56
+        returnType: C
+      synthetic static set c @56
+        parameters
+          requiredPositional _c @56
+            type: C
+        returnType: void
+      synthetic static get t1 @63
+        returnType: int
+      synthetic static set t1 @63
+        parameters
+          requiredPositional _t1 @63
+            type: int
+        returnType: void
+      synthetic static get t2 @83
+        returnType: int
+      synthetic static set t2 @83
+        parameters
+          requiredPositional _t2 @83
+            type: int
+        returnType: void
 ''');
   }
 
@@ -461,14 +680,51 @@
 var t2 = (getC().f += 2);
 ''');
     checkElementText(library, r'''
-class I {
-  int f;
-}
-abstract class C implements I {
-}
-int t1;
-int t2;
-C getC() {}
+library
+  definingUnit
+    classes
+      class I @6
+        fields
+          f @16
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get f @16
+            returnType: int
+          synthetic set f @16
+            parameters
+              requiredPositional _f @16
+                type: int
+            returnType: void
+      abstract class C @36
+        interfaces
+          I
+        constructors
+          synthetic @-1
+    topLevelVariables
+      static t1 @76
+        type: int
+      static t2 @101
+        type: int
+    accessors
+      synthetic static get t1 @76
+        returnType: int
+      synthetic static set t1 @76
+        parameters
+          requiredPositional _t1 @76
+            type: int
+        returnType: void
+      synthetic static get t2 @101
+        returnType: int
+      synthetic static set t2 @101
+        parameters
+          requiredPositional _t2 @101
+            type: int
+        returnType: void
+    functions
+      getC @56
+        returnType: C
 ''');
   }
 
@@ -481,11 +737,35 @@
 var uFuture = () async => await fFuture();
 ''');
     checkElementText(library, r'''
-import 'dart:async';
-Future<int> Function() uValue;
-Future<int> Function() uFuture;
-int fValue() {}
-Future<int> fFuture() async {}
+library
+  imports
+    dart:async
+  definingUnit
+    topLevelVariables
+      static uValue @80
+        type: Future<int> Function()
+      static uFuture @121
+        type: Future<int> Function()
+    accessors
+      synthetic static get uValue @80
+        returnType: Future<int> Function()
+      synthetic static set uValue @80
+        parameters
+          requiredPositional _uValue @80
+            type: Future<int> Function()
+        returnType: void
+      synthetic static get uFuture @121
+        returnType: Future<int> Function()
+      synthetic static set uFuture @121
+        parameters
+          requiredPositional _uFuture @121
+            type: Future<int> Function()
+        returnType: void
+    functions
+      fValue @25
+        returnType: int
+      fFuture @53 async
+        returnType: Future<int>
 ''');
   }
 
@@ -498,11 +778,55 @@
 var vBitShiftRight = 1 >> 2;
 ''');
     checkElementText(library, r'''
-int vBitXor;
-int vBitAnd;
-int vBitOr;
-int vBitShiftLeft;
-int vBitShiftRight;
+library
+  definingUnit
+    topLevelVariables
+      static vBitXor @4
+        type: int
+      static vBitAnd @25
+        type: int
+      static vBitOr @46
+        type: int
+      static vBitShiftLeft @66
+        type: int
+      static vBitShiftRight @94
+        type: int
+    accessors
+      synthetic static get vBitXor @4
+        returnType: int
+      synthetic static set vBitXor @4
+        parameters
+          requiredPositional _vBitXor @4
+            type: int
+        returnType: void
+      synthetic static get vBitAnd @25
+        returnType: int
+      synthetic static set vBitAnd @25
+        parameters
+          requiredPositional _vBitAnd @25
+            type: int
+        returnType: void
+      synthetic static get vBitOr @46
+        returnType: int
+      synthetic static set vBitOr @46
+        parameters
+          requiredPositional _vBitOr @46
+            type: int
+        returnType: void
+      synthetic static get vBitShiftLeft @66
+        returnType: int
+      synthetic static set vBitShiftLeft @66
+        parameters
+          requiredPositional _vBitShiftLeft @66
+            type: int
+        returnType: void
+      synthetic static get vBitShiftRight @94
+        returnType: int
+      synthetic static set vBitShiftRight @94
+        parameters
+          requiredPositional _vBitShiftRight @94
+            type: int
+        returnType: void
 ''');
   }
 
@@ -517,13 +841,55 @@
 var vBoth = new A()..a = 1..m();
 ''');
     checkElementText(library, r'''
-class A {
-  int a;
-  void m() {}
-}
-A vSetField;
-A vInvokeMethod;
-A vBoth;
+library
+  definingUnit
+    classes
+      class A @6
+        fields
+          a @16
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get a @16
+            returnType: int
+          synthetic set a @16
+            parameters
+              requiredPositional _a @16
+                type: int
+            returnType: void
+        methods
+          m @26
+            returnType: void
+    topLevelVariables
+      static vSetField @39
+        type: A
+      static vInvokeMethod @71
+        type: A
+      static vBoth @105
+        type: A
+    accessors
+      synthetic static get vSetField @39
+        returnType: A
+      synthetic static set vSetField @39
+        parameters
+          requiredPositional _vSetField @39
+            type: A
+        returnType: void
+      synthetic static get vInvokeMethod @71
+        returnType: A
+      synthetic static set vInvokeMethod @71
+        parameters
+          requiredPositional _vInvokeMethod @71
+            type: A
+        returnType: void
+      synthetic static get vBoth @105
+        returnType: A
+      synthetic static set vBoth @105
+        parameters
+          requiredPositional _vBoth @105
+            type: A
+        returnType: void
 ''');
   }
 
@@ -561,32 +927,171 @@
 C newC() => new C();
 ''');
     checkElementText(library, r'''
-class A {
-  int f;
-}
-class B {
-  A a;
-}
-class C {
-  B b;
-}
-class X {
-  A a;
-  B b;
-  C c;
-  int t01;
-  int t02;
-  int t03;
-  int t11;
-  int t12;
-  int t13;
-  int t21;
-  int t22;
-  int t23;
-}
-A newA() {}
-B newB() {}
-C newC() {}
+library
+  definingUnit
+    classes
+      class A @6
+        fields
+          f @16
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get f @16
+            returnType: int
+          synthetic set f @16
+            parameters
+              requiredPositional _f @16
+                type: int
+            returnType: void
+      class B @31
+        fields
+          a @39
+            type: A
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get a @39
+            returnType: A
+          synthetic set a @39
+            parameters
+              requiredPositional _a @39
+                type: A
+            returnType: void
+      class C @50
+        fields
+          b @58
+            type: B
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get b @58
+            returnType: B
+          synthetic set b @58
+            parameters
+              requiredPositional _b @58
+                type: B
+            returnType: void
+      class X @69
+        fields
+          a @77
+            type: A
+          b @94
+            type: B
+          c @111
+            type: C
+          t01 @130
+            type: int
+          t02 @147
+            type: int
+          t03 @166
+            type: int
+          t11 @187
+            type: int
+          t12 @210
+            type: int
+          t13 @235
+            type: int
+          t21 @262
+            type: int
+          t22 @284
+            type: int
+          t23 @308
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get a @77
+            returnType: A
+          synthetic set a @77
+            parameters
+              requiredPositional _a @77
+                type: A
+            returnType: void
+          synthetic get b @94
+            returnType: B
+          synthetic set b @94
+            parameters
+              requiredPositional _b @94
+                type: B
+            returnType: void
+          synthetic get c @111
+            returnType: C
+          synthetic set c @111
+            parameters
+              requiredPositional _c @111
+                type: C
+            returnType: void
+          synthetic get t01 @130
+            returnType: int
+          synthetic set t01 @130
+            parameters
+              requiredPositional _t01 @130
+                type: int
+            returnType: void
+          synthetic get t02 @147
+            returnType: int
+          synthetic set t02 @147
+            parameters
+              requiredPositional _t02 @147
+                type: int
+            returnType: void
+          synthetic get t03 @166
+            returnType: int
+          synthetic set t03 @166
+            parameters
+              requiredPositional _t03 @166
+                type: int
+            returnType: void
+          synthetic get t11 @187
+            returnType: int
+          synthetic set t11 @187
+            parameters
+              requiredPositional _t11 @187
+                type: int
+            returnType: void
+          synthetic get t12 @210
+            returnType: int
+          synthetic set t12 @210
+            parameters
+              requiredPositional _t12 @210
+                type: int
+            returnType: void
+          synthetic get t13 @235
+            returnType: int
+          synthetic set t13 @235
+            parameters
+              requiredPositional _t13 @235
+                type: int
+            returnType: void
+          synthetic get t21 @262
+            returnType: int
+          synthetic set t21 @262
+            parameters
+              requiredPositional _t21 @262
+                type: int
+            returnType: void
+          synthetic get t22 @284
+            returnType: int
+          synthetic set t22 @284
+            parameters
+              requiredPositional _t22 @284
+                type: int
+            returnType: void
+          synthetic get t23 @308
+            returnType: int
+          synthetic set t23 @308
+            parameters
+              requiredPositional _t23 @308
+                type: int
+            returnType: void
+    functions
+      newA @332
+        returnType: A
+      newB @353
+        returnType: B
+      newC @374
+        returnType: C
 ''');
   }
 
@@ -595,7 +1100,19 @@
 var V = true ? 1 : 2.3;
 ''');
     checkElementText(library, r'''
-num V;
+library
+  definingUnit
+    topLevelVariables
+      static V @4
+        type: num
+    accessors
+      synthetic static get V @4
+        returnType: num
+      synthetic static set V @4
+        parameters
+          requiredPositional _V @4
+            type: num
+        returnType: void
 ''');
   }
 
@@ -605,8 +1122,28 @@
 var vNotEq = 1 != 2;
 ''');
     checkElementText(library, r'''
-bool vEq;
-bool vNotEq;
+library
+  definingUnit
+    topLevelVariables
+      static vEq @4
+        type: bool
+      static vNotEq @22
+        type: bool
+    accessors
+      synthetic static get vEq @4
+        returnType: bool
+      synthetic static set vEq @4
+        parameters
+          requiredPositional _vEq @4
+            type: bool
+        returnType: void
+      synthetic static get vNotEq @22
+        returnType: bool
+      synthetic static set vNotEq @22
+        parameters
+          requiredPositional _vNotEq @22
+            type: bool
+        returnType: void
 ''');
   }
 
@@ -616,8 +1153,30 @@
 var b = a.foo();
 ''');
     checkElementText(library, r'''
-dynamic a/*error: dependencyCycle*/;
-dynamic b/*error: dependencyCycle*/;
+library
+  definingUnit
+    topLevelVariables
+      static a @4
+        typeInferenceError: dependencyCycle
+        type: dynamic
+      static b @21
+        typeInferenceError: dependencyCycle
+        type: dynamic
+    accessors
+      synthetic static get a @4
+        returnType: dynamic
+      synthetic static set a @4
+        parameters
+          requiredPositional _a @4
+            type: dynamic
+        returnType: void
+      synthetic static get b @21
+        returnType: dynamic
+      synthetic static set b @21
+        parameters
+          requiredPositional _b @21
+            type: dynamic
+        returnType: void
 ''');
   }
 
@@ -626,7 +1185,20 @@
 var a = a.foo();
 ''');
     checkElementText(library, r'''
-dynamic a/*error: dependencyCycle*/;
+library
+  definingUnit
+    topLevelVariables
+      static a @4
+        typeInferenceError: dependencyCycle
+        type: dynamic
+    accessors
+      synthetic static get a @4
+        returnType: dynamic
+      synthetic static set a @4
+        parameters
+          requiredPositional _a @4
+            type: dynamic
+        returnType: void
 ''');
   }
 
@@ -637,9 +1209,37 @@
 var b1 = a[1];
 ''');
     checkElementText(library, r'''
-List<num> a;
-num b0;
-num b1;
+library
+  definingUnit
+    topLevelVariables
+      static a @4
+        type: List<num>
+      static b0 @22
+        type: num
+      static b1 @37
+        type: num
+    accessors
+      synthetic static get a @4
+        returnType: List<num>
+      synthetic static set a @4
+        parameters
+          requiredPositional _a @4
+            type: List<num>
+        returnType: void
+      synthetic static get b0 @22
+        returnType: num
+      synthetic static set b0 @22
+        parameters
+          requiredPositional _b0 @22
+            type: num
+        returnType: void
+      synthetic static get b1 @37
+        returnType: num
+      synthetic static set b1 @37
+        parameters
+          requiredPositional _b1 @37
+            type: num
+        returnType: void
 ''');
   }
 
@@ -654,8 +1254,21 @@
 var x = new C().f;
 ''');
     checkElementText(library, r'''
-import 'package:test/a.dart';
-int x;
+library
+  imports
+    package:test/a.dart
+  definingUnit
+    topLevelVariables
+      static x @21
+        type: int
+    accessors
+      synthetic static get x @21
+        returnType: int
+      synthetic static set x @21
+        parameters
+          requiredPositional _x @21
+            type: int
+        returnType: void
 ''');
   }
 
@@ -667,10 +1280,34 @@
 var x = new C().f;
 ''');
     checkElementText(library, r'''
-class C {
-  int f;
-}
-int x;
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          f @16
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get f @16
+            returnType: int
+          synthetic set f @16
+            parameters
+              requiredPositional _f @16
+                type: int
+            returnType: void
+    topLevelVariables
+      static x @29
+        type: int
+    accessors
+      synthetic static get x @29
+        returnType: int
+      synthetic static set x @29
+        parameters
+          requiredPositional _x @29
+            type: int
+        returnType: void
 ''');
   }
 
@@ -686,8 +1323,21 @@
 var x = new C().f;
 ''');
     checkElementText(library, r'''
-import 'package:test/a.dart';
-int x;
+library
+  imports
+    package:test/a.dart
+  definingUnit
+    topLevelVariables
+      static x @21
+        type: int
+    accessors
+      synthetic static get x @21
+        returnType: int
+      synthetic static set x @21
+        parameters
+          requiredPositional _x @21
+            type: int
+        returnType: void
 ''');
   }
 
@@ -702,8 +1352,21 @@
 var x = new C().f;
 ''');
     checkElementText(library, r'''
-import 'package:test/a.dart';
-int x;
+library
+  imports
+    package:test/a.dart
+  definingUnit
+    topLevelVariables
+      static x @21
+        type: int
+    accessors
+      synthetic static get x @21
+        returnType: int
+      synthetic static set x @21
+        parameters
+          requiredPositional _x @21
+            type: int
+        returnType: void
 ''');
   }
 
@@ -715,10 +1378,34 @@
 var x = new C().f;
 ''');
     checkElementText(library, r'''
-class C {
-  int f;
-}
-int x;
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          f @16
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get f @16
+            returnType: int
+          synthetic set f @16
+            parameters
+              requiredPositional _f @16
+                type: int
+            returnType: void
+    topLevelVariables
+      static x @29
+        type: int
+    accessors
+      synthetic static get x @29
+        returnType: int
+      synthetic static set x @29
+        parameters
+          requiredPositional _x @29
+            type: int
+        returnType: void
 ''');
   }
 
@@ -734,8 +1421,21 @@
 var x = new C().f;
 ''');
     checkElementText(library, r'''
-import 'package:test/a.dart';
-int x;
+library
+  imports
+    package:test/a.dart
+  definingUnit
+    topLevelVariables
+      static x @21
+        type: int
+    accessors
+      synthetic static get x @21
+        returnType: int
+      synthetic static set x @21
+        parameters
+          requiredPositional _x @21
+            type: int
+        returnType: void
 ''');
   }
 
@@ -749,12 +1449,37 @@
 }
 ''');
     checkElementText(library, r'''
-class A {
-  int f;
-}
-class B {
-  static int t;
-}
+library
+  definingUnit
+    classes
+      class A @6
+        fields
+          f @16
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get f @16
+            returnType: int
+          synthetic set f @16
+            parameters
+              requiredPositional _f @16
+                type: int
+            returnType: void
+      class B @27
+        fields
+          static t @44
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic static get t @44
+            returnType: int
+          synthetic static set t @44
+            parameters
+              requiredPositional _t @44
+                type: int
+            returnType: void
 ''');
   }
 
@@ -767,11 +1492,43 @@
 var x = c.b;
 ''');
     checkElementText(library, r'''
-class C {
-  bool b;
-}
-C c;
-bool x;
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          b @17
+            type: bool
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get b @17
+            returnType: bool
+          synthetic set b @17
+            parameters
+              requiredPositional _b @17
+                type: bool
+            returnType: void
+    topLevelVariables
+      static c @24
+        type: C
+      static x @31
+        type: bool
+    accessors
+      synthetic static get c @24
+        returnType: C
+      synthetic static set c @24
+        parameters
+          requiredPositional _c @24
+            type: C
+        returnType: void
+      synthetic static get x @31
+        returnType: bool
+      synthetic static set x @31
+        parameters
+          requiredPositional _x @31
+            type: bool
+        returnType: void
 ''');
   }
 
@@ -785,13 +1542,48 @@
 var x = c.b;
 ''');
     checkElementText(library, r'''
-class I {
-  bool b;
-}
-abstract class C implements I {
-}
-C c;
-bool x;
+library
+  definingUnit
+    classes
+      class I @6
+        fields
+          b @17
+            type: bool
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get b @17
+            returnType: bool
+          synthetic set b @17
+            parameters
+              requiredPositional _b @17
+                type: bool
+            returnType: void
+      abstract class C @37
+        interfaces
+          I
+        constructors
+          synthetic @-1
+    topLevelVariables
+      static c @57
+        type: C
+      static x @64
+        type: bool
+    accessors
+      synthetic static get c @57
+        returnType: C
+      synthetic static set c @57
+        parameters
+          requiredPositional _c @57
+            type: C
+        returnType: void
+      synthetic static get x @64
+        returnType: bool
+      synthetic static set x @64
+        parameters
+          requiredPositional _x @64
+            type: bool
+        returnType: void
 ''');
   }
 
@@ -805,13 +1597,42 @@
 var x = f().b;
 ''');
     checkElementText(library, r'''
-class I {
-  bool b;
-}
-abstract class C implements I {
-}
-bool x;
-C f() {}
+library
+  definingUnit
+    classes
+      class I @6
+        fields
+          b @17
+            type: bool
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get b @17
+            returnType: bool
+          synthetic set b @17
+            parameters
+              requiredPositional _b @17
+                type: bool
+            returnType: void
+      abstract class C @37
+        interfaces
+          I
+        constructors
+          synthetic @-1
+    topLevelVariables
+      static x @74
+        type: bool
+    accessors
+      synthetic static get x @74
+        returnType: bool
+      synthetic static set x @74
+        parameters
+          requiredPositional _x @74
+            type: bool
+        returnType: void
+    functions
+      f @57
+        returnType: C
 ''');
   }
 
@@ -827,14 +1648,42 @@
 var y = B().foo();
 ''');
     checkElementText(library, r'''
-class A {
-  int foo() {}
-}
-class B extends A {
-  int foo() {}
-}
-int x;
-int y;
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          synthetic @-1
+        methods
+          foo @16
+            returnType: int
+      class B @36
+        supertype: A
+        constructors
+          synthetic @-1
+        methods
+          foo @52
+            returnType: int
+    topLevelVariables
+      static x @70
+        type: int
+      static y @89
+        type: int
+    accessors
+      synthetic static get x @70
+        returnType: int
+      synthetic static set x @70
+        parameters
+          requiredPositional _x @70
+            type: int
+        returnType: void
+      synthetic static get y @89
+        returnType: int
+      synthetic static set y @89
+        parameters
+          requiredPositional _y @89
+            type: int
+        returnType: void
 ''');
   }
 
@@ -849,13 +1698,66 @@
 var v_async_returnFuture = () async => vFuture;
 ''');
     checkElementText(library, r'''
-import 'dart:async';
-Future<int> vFuture;
-int Function() v_noParameters_inferredReturnType;
-int Function(String) v_hasParameter_withType_inferredReturnType;
-String Function(String) v_hasParameter_withType_returnParameter;
-Future<int> Function() v_async_returnValue;
-Future<int> Function() v_async_returnFuture;
+library
+  imports
+    dart:async
+  definingUnit
+    topLevelVariables
+      static vFuture @25
+        type: Future<int>
+      static v_noParameters_inferredReturnType @60
+        type: int Function()
+      static v_hasParameter_withType_inferredReturnType @110
+        type: int Function(String)
+      static v_hasParameter_withType_returnParameter @177
+        type: String Function(String)
+      static v_async_returnValue @240
+        type: Future<int> Function()
+      static v_async_returnFuture @282
+        type: Future<int> Function()
+    accessors
+      synthetic static get vFuture @25
+        returnType: Future<int>
+      synthetic static set vFuture @25
+        parameters
+          requiredPositional _vFuture @25
+            type: Future<int>
+        returnType: void
+      synthetic static get v_noParameters_inferredReturnType @60
+        returnType: int Function()
+      synthetic static set v_noParameters_inferredReturnType @60
+        parameters
+          requiredPositional _v_noParameters_inferredReturnType @60
+            type: int Function()
+        returnType: void
+      synthetic static get v_hasParameter_withType_inferredReturnType @110
+        returnType: int Function(String)
+      synthetic static set v_hasParameter_withType_inferredReturnType @110
+        parameters
+          requiredPositional _v_hasParameter_withType_inferredReturnType @110
+            type: int Function(String)
+        returnType: void
+      synthetic static get v_hasParameter_withType_returnParameter @177
+        returnType: String Function(String)
+      synthetic static set v_hasParameter_withType_returnParameter @177
+        parameters
+          requiredPositional _v_hasParameter_withType_returnParameter @177
+            type: String Function(String)
+        returnType: void
+      synthetic static get v_async_returnValue @240
+        returnType: Future<int> Function()
+      synthetic static set v_async_returnValue @240
+        parameters
+          requiredPositional _v_async_returnValue @240
+            type: Future<int> Function()
+        returnType: void
+      synthetic static get v_async_returnFuture @282
+        returnType: Future<int> Function()
+      synthetic static set v_async_returnFuture @282
+        parameters
+          requiredPositional _v_async_returnFuture @282
+            type: Future<int> Function()
+        returnType: void
 ''');
   }
 
@@ -865,7 +1767,19 @@
 ''');
     // TODO(scheglov) add more function expression tests
     checkElementText(library, r'''
-int v;
+library
+  definingUnit
+    topLevelVariables
+      static v @4
+        type: int
+    accessors
+      synthetic static get v @4
+        returnType: int
+      synthetic static set v @4
+        parameters
+          requiredPositional _v @4
+            type: int
+        returnType: void
 ''');
   }
 
@@ -876,9 +1790,33 @@
 var vNoTypeArgument = f();
 ''');
     checkElementText(library, r'''
-int vHasTypeArgument;
-dynamic vNoTypeArgument;
-T f<T>() {}
+library
+  definingUnit
+    topLevelVariables
+      static vHasTypeArgument @22
+        type: int
+      static vNoTypeArgument @55
+        type: dynamic
+    accessors
+      synthetic static get vHasTypeArgument @22
+        returnType: int
+      synthetic static set vHasTypeArgument @22
+        parameters
+          requiredPositional _vHasTypeArgument @22
+            type: int
+        returnType: void
+      synthetic static get vNoTypeArgument @55
+        returnType: dynamic
+      synthetic static set vNoTypeArgument @55
+        parameters
+          requiredPositional _vNoTypeArgument @55
+            type: dynamic
+        returnType: void
+    functions
+      f @2
+        typeParameters
+          covariant T @4
+        returnType: T
 ''');
   }
 
@@ -889,9 +1827,34 @@
 var vWrongArgumentType = f(2.0);
 ''');
     checkElementText(library, r'''
-String vOkArgumentType;
-String vWrongArgumentType;
-String f(int p) {}
+library
+  definingUnit
+    topLevelVariables
+      static vOkArgumentType @29
+        type: String
+      static vWrongArgumentType @57
+        type: String
+    accessors
+      synthetic static get vOkArgumentType @29
+        returnType: String
+      synthetic static set vOkArgumentType @29
+        parameters
+          requiredPositional _vOkArgumentType @29
+            type: String
+        returnType: void
+      synthetic static get vWrongArgumentType @57
+        returnType: String
+      synthetic static set vWrongArgumentType @57
+        parameters
+          requiredPositional _vWrongArgumentType @57
+            type: String
+        returnType: void
+    functions
+      f @7
+        parameters
+          requiredPositional p @13
+            type: int
+        returnType: String
 ''');
   }
 
@@ -916,23 +1879,131 @@
 var r_instanceClassMethod = instanceOfA.instanceClassMethod;
 ''');
     checkElementText(library, r'''
-class A {
-  static int staticClassVariable;
-  static int get staticGetter {}
-  static String staticClassMethod(int p) {}
-  String instanceClassMethod(int p) {}
-}
-int topLevelVariable;
-String Function(int) r_topLevelFunction;
-int r_topLevelVariable;
-int r_topLevelGetter;
-int r_staticClassVariable;
-int r_staticGetter;
-String Function(int) r_staticClassMethod;
-A instanceOfA;
-String Function(int) r_instanceClassMethod;
-int get topLevelGetter {}
-String topLevelFunction(int p) {}
+library
+  definingUnit
+    classes
+      class A @101
+        fields
+          static staticClassVariable @118
+            type: int
+          synthetic static staticGetter @-1
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic static get staticClassVariable @118
+            returnType: int
+          synthetic static set staticClassVariable @118
+            parameters
+              requiredPositional _staticClassVariable @118
+                type: int
+            returnType: void
+          static get staticGetter @160
+            returnType: int
+        methods
+          static staticClassMethod @195
+            parameters
+              requiredPositional p @217
+                type: int
+            returnType: String
+          instanceClassMethod @238
+            parameters
+              requiredPositional p @262
+                type: int
+            returnType: String
+    topLevelVariables
+      static topLevelVariable @44
+        type: int
+      static r_topLevelFunction @280
+        type: String Function(int)
+      static r_topLevelVariable @323
+        type: int
+      static r_topLevelGetter @366
+        type: int
+      static r_staticClassVariable @405
+        type: int
+      static r_staticGetter @456
+        type: int
+      static r_staticClassMethod @493
+        type: String Function(int)
+      static instanceOfA @540
+        type: A
+      static r_instanceClassMethod @567
+        type: String Function(int)
+      synthetic static topLevelGetter @-1
+        type: int
+    accessors
+      synthetic static get topLevelVariable @44
+        returnType: int
+      synthetic static set topLevelVariable @44
+        parameters
+          requiredPositional _topLevelVariable @44
+            type: int
+        returnType: void
+      synthetic static get r_topLevelFunction @280
+        returnType: String Function(int)
+      synthetic static set r_topLevelFunction @280
+        parameters
+          requiredPositional _r_topLevelFunction @280
+            type: String Function(int)
+        returnType: void
+      synthetic static get r_topLevelVariable @323
+        returnType: int
+      synthetic static set r_topLevelVariable @323
+        parameters
+          requiredPositional _r_topLevelVariable @323
+            type: int
+        returnType: void
+      synthetic static get r_topLevelGetter @366
+        returnType: int
+      synthetic static set r_topLevelGetter @366
+        parameters
+          requiredPositional _r_topLevelGetter @366
+            type: int
+        returnType: void
+      synthetic static get r_staticClassVariable @405
+        returnType: int
+      synthetic static set r_staticClassVariable @405
+        parameters
+          requiredPositional _r_staticClassVariable @405
+            type: int
+        returnType: void
+      synthetic static get r_staticGetter @456
+        returnType: int
+      synthetic static set r_staticGetter @456
+        parameters
+          requiredPositional _r_staticGetter @456
+            type: int
+        returnType: void
+      synthetic static get r_staticClassMethod @493
+        returnType: String Function(int)
+      synthetic static set r_staticClassMethod @493
+        parameters
+          requiredPositional _r_staticClassMethod @493
+            type: String Function(int)
+        returnType: void
+      synthetic static get instanceOfA @540
+        returnType: A
+      synthetic static set instanceOfA @540
+        parameters
+          requiredPositional _instanceOfA @540
+            type: A
+        returnType: void
+      synthetic static get r_instanceClassMethod @567
+        returnType: String Function(int)
+      synthetic static set r_instanceClassMethod @567
+        parameters
+          requiredPositional _r_instanceClassMethod @567
+            type: String Function(int)
+        returnType: void
+      get topLevelGetter @74
+        returnType: int
+    functions
+      topLevelFunction @7
+        parameters
+          requiredPositional p @28
+            type: int
+        returnType: String
 ''');
   }
 
@@ -947,13 +2018,50 @@
 var c = A.a;
 ''');
     checkElementText(library, r'''
-class A {
-  static dynamic a/*error: dependencyCycle*/;
-}
-class B {
-  static dynamic b/*error: dependencyCycle*/;
-}
-dynamic c;
+library
+  definingUnit
+    classes
+      class A @6
+        fields
+          static a @23
+            typeInferenceError: dependencyCycle
+            type: dynamic
+        constructors
+          synthetic @-1
+        accessors
+          synthetic static get a @23
+            returnType: dynamic
+          synthetic static set a @23
+            parameters
+              requiredPositional _a @23
+                type: dynamic
+            returnType: void
+      class B @40
+        fields
+          static b @57
+            typeInferenceError: dependencyCycle
+            type: dynamic
+        constructors
+          synthetic @-1
+        accessors
+          synthetic static get b @57
+            returnType: dynamic
+          synthetic static set b @57
+            parameters
+              requiredPositional _b @57
+                type: dynamic
+            returnType: void
+    topLevelVariables
+      static c @72
+        type: dynamic
+    accessors
+      synthetic static get c @72
+        returnType: dynamic
+      synthetic static set c @72
+        parameters
+          requiredPositional _c @72
+            type: dynamic
+        returnType: void
 ''');
   }
 
@@ -966,11 +2074,45 @@
 var c = b;
 ''');
     checkElementText(library, r'''
-class A {
-  static dynamic a/*error: dependencyCycle*/;
-}
-dynamic b/*error: dependencyCycle*/;
-dynamic c;
+library
+  definingUnit
+    classes
+      class A @6
+        fields
+          static a @23
+            typeInferenceError: dependencyCycle
+            type: dynamic
+        constructors
+          synthetic @-1
+        accessors
+          synthetic static get a @23
+            returnType: dynamic
+          synthetic static set a @23
+            parameters
+              requiredPositional _a @23
+                type: dynamic
+            returnType: void
+    topLevelVariables
+      static b @36
+        typeInferenceError: dependencyCycle
+        type: dynamic
+      static c @49
+        type: dynamic
+    accessors
+      synthetic static get b @36
+        returnType: dynamic
+      synthetic static set b @36
+        parameters
+          requiredPositional _b @36
+            type: dynamic
+        returnType: void
+      synthetic static get c @49
+        returnType: dynamic
+      synthetic static set c @49
+        parameters
+          requiredPositional _c @49
+            type: dynamic
+        returnType: void
 ''');
   }
 
@@ -982,10 +2124,49 @@
 var d = a;
 ''');
     checkElementText(library, r'''
-dynamic a/*error: dependencyCycle*/;
-dynamic b/*error: dependencyCycle*/;
-dynamic c/*error: dependencyCycle*/;
-dynamic d;
+library
+  definingUnit
+    topLevelVariables
+      static a @4
+        typeInferenceError: dependencyCycle
+        type: dynamic
+      static b @15
+        typeInferenceError: dependencyCycle
+        type: dynamic
+      static c @26
+        typeInferenceError: dependencyCycle
+        type: dynamic
+      static d @37
+        type: dynamic
+    accessors
+      synthetic static get a @4
+        returnType: dynamic
+      synthetic static set a @4
+        parameters
+          requiredPositional _a @4
+            type: dynamic
+        returnType: void
+      synthetic static get b @15
+        returnType: dynamic
+      synthetic static set b @15
+        parameters
+          requiredPositional _b @15
+            type: dynamic
+        returnType: void
+      synthetic static get c @26
+        returnType: dynamic
+      synthetic static set c @26
+        parameters
+          requiredPositional _c @26
+            type: dynamic
+        returnType: void
+      synthetic static get d @37
+        returnType: dynamic
+      synthetic static set d @37
+        parameters
+          requiredPositional _d @37
+            type: dynamic
+        returnType: void
 ''');
   }
 
@@ -1015,9 +2196,23 @@
 var a = new A();
 ''');
     checkElementText(library, r'''
-class A {
-}
-A a;
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          synthetic @-1
+    topLevelVariables
+      static a @15
+        type: A
+    accessors
+      synthetic static get a @15
+        returnType: A
+      synthetic static set a @15
+        parameters
+          requiredPositional _a @15
+            type: A
+        returnType: void
 ''');
   }
 
@@ -1028,9 +2223,31 @@
 var h = f().hashCode;
 ''');
     checkElementText(library, r'''
-String s;
-int h;
-dynamic f() {}
+library
+  definingUnit
+    topLevelVariables
+      static s @25
+        type: String
+      static h @49
+        type: int
+    accessors
+      synthetic static get s @25
+        returnType: String
+      synthetic static set s @25
+        parameters
+          requiredPositional _s @25
+            type: String
+        returnType: void
+      synthetic static get h @49
+        returnType: int
+      synthetic static set h @49
+        parameters
+          requiredPositional _h @49
+            type: int
+        returnType: void
+    functions
+      f @8
+        returnType: dynamic
 ''');
   }
 
@@ -1041,9 +2258,37 @@
 var h = d.hashCode;
 ''');
     checkElementText(library, r'''
-dynamic d;
-String s;
-int h;
+library
+  definingUnit
+    topLevelVariables
+      static d @8
+        type: dynamic
+      static s @15
+        type: String
+      static h @37
+        type: int
+    accessors
+      synthetic static get d @8
+        returnType: dynamic
+      synthetic static set d @8
+        parameters
+          requiredPositional _d @8
+            type: dynamic
+        returnType: void
+      synthetic static get s @15
+        returnType: String
+      synthetic static set s @15
+        parameters
+          requiredPositional _s @15
+            type: String
+        returnType: void
+      synthetic static get h @37
+        returnType: int
+      synthetic static set h @37
+        parameters
+          requiredPositional _h @37
+            type: int
+        returnType: void
 ''');
   }
 
@@ -1053,8 +2298,28 @@
 var b = a is int;
 ''');
     checkElementText(library, r'''
-double a;
-bool b;
+library
+  definingUnit
+    topLevelVariables
+      static a @4
+        type: double
+      static b @17
+        type: bool
+    accessors
+      synthetic static get a @4
+        returnType: double
+      synthetic static set a @4
+        parameters
+          requiredPositional _a @4
+            type: double
+        returnType: void
+      synthetic static get b @17
+        returnType: bool
+      synthetic static set b @17
+        parameters
+          requiredPositional _b @17
+            type: bool
+        returnType: void
 ''');
   }
 
@@ -1094,10 +2359,46 @@
 var vInt = <int>[1, 2, 3];
 ''');
     checkElementText(library, r'''
-List<Object> vObject;
-List<num> vNum;
-List<num> vNumEmpty;
-List<int> vInt;
+library
+  definingUnit
+    topLevelVariables
+      static vObject @4
+        type: List<Object>
+      static vNum @37
+        type: List<num>
+      static vNumEmpty @64
+        type: List<num>
+      static vInt @89
+        type: List<int>
+    accessors
+      synthetic static get vObject @4
+        returnType: List<Object>
+      synthetic static set vObject @4
+        parameters
+          requiredPositional _vObject @4
+            type: List<Object>
+        returnType: void
+      synthetic static get vNum @37
+        returnType: List<num>
+      synthetic static set vNum @37
+        parameters
+          requiredPositional _vNum @37
+            type: List<num>
+        returnType: void
+      synthetic static get vNumEmpty @64
+        returnType: List<num>
+      synthetic static set vNumEmpty @64
+        parameters
+          requiredPositional _vNumEmpty @64
+            type: List<num>
+        returnType: void
+      synthetic static get vInt @89
+        returnType: List<int>
+      synthetic static set vInt @89
+        parameters
+          requiredPositional _vInt @89
+            type: List<int>
+        returnType: void
 ''');
   }
 
@@ -1108,9 +2409,37 @@
 var vObject = [1, 2.0, '333'];
 ''');
     checkElementText(library, r'''
-List<int> vInt;
-List<num> vNum;
-List<Object> vObject;
+library
+  definingUnit
+    topLevelVariables
+      static vInt @4
+        type: List<int>
+      static vNum @26
+        type: List<num>
+      static vObject @47
+        type: List<Object>
+    accessors
+      synthetic static get vInt @4
+        returnType: List<int>
+      synthetic static set vInt @4
+        parameters
+          requiredPositional _vInt @4
+            type: List<int>
+        returnType: void
+      synthetic static get vNum @26
+        returnType: List<num>
+      synthetic static set vNum @26
+        parameters
+          requiredPositional _vNum @26
+            type: List<num>
+        returnType: void
+      synthetic static get vObject @47
+        returnType: List<Object>
+      synthetic static set vObject @47
+        parameters
+          requiredPositional _vObject @47
+            type: List<Object>
+        returnType: void
 ''');
   }
 
@@ -1135,11 +2464,55 @@
 var vIntString = <int, String>{};
 ''');
     checkElementText(library, r'''
-Map<Object, Object> vObjectObject;
-Map<Comparable<int>, Object> vComparableObject;
-Map<num, String> vNumString;
-Map<num, String> vNumStringEmpty;
-Map<int, String> vIntString;
+library
+  definingUnit
+    topLevelVariables
+      static vObjectObject @4
+        type: Map<Object, Object>
+      static vComparableObject @50
+        type: Map<Comparable<int>, Object>
+      static vNumString @109
+        type: Map<num, String>
+      static vNumStringEmpty @149
+        type: Map<num, String>
+      static vIntString @188
+        type: Map<int, String>
+    accessors
+      synthetic static get vObjectObject @4
+        returnType: Map<Object, Object>
+      synthetic static set vObjectObject @4
+        parameters
+          requiredPositional _vObjectObject @4
+            type: Map<Object, Object>
+        returnType: void
+      synthetic static get vComparableObject @50
+        returnType: Map<Comparable<int>, Object>
+      synthetic static set vComparableObject @50
+        parameters
+          requiredPositional _vComparableObject @50
+            type: Map<Comparable<int>, Object>
+        returnType: void
+      synthetic static get vNumString @109
+        returnType: Map<num, String>
+      synthetic static set vNumString @109
+        parameters
+          requiredPositional _vNumString @109
+            type: Map<num, String>
+        returnType: void
+      synthetic static get vNumStringEmpty @149
+        returnType: Map<num, String>
+      synthetic static set vNumStringEmpty @149
+        parameters
+          requiredPositional _vNumStringEmpty @149
+            type: Map<num, String>
+        returnType: void
+      synthetic static get vIntString @188
+        returnType: Map<int, String>
+      synthetic static set vIntString @188
+        parameters
+          requiredPositional _vIntString @188
+            type: Map<int, String>
+        returnType: void
 ''');
   }
 
@@ -1150,9 +2523,37 @@
 var vIntObject = {1: 'a', 2: 3.0};
 ''');
     checkElementText(library, r'''
-Map<int, String> vIntString;
-Map<num, String> vNumString;
-Map<int, Object> vIntObject;
+library
+  definingUnit
+    topLevelVariables
+      static vIntString @4
+        type: Map<int, String>
+      static vNumString @39
+        type: Map<num, String>
+      static vIntObject @76
+        type: Map<int, Object>
+    accessors
+      synthetic static get vIntString @4
+        returnType: Map<int, String>
+      synthetic static set vIntString @4
+        parameters
+          requiredPositional _vIntString @4
+            type: Map<int, String>
+        returnType: void
+      synthetic static get vNumString @39
+        returnType: Map<num, String>
+      synthetic static set vNumString @39
+        parameters
+          requiredPositional _vNumString @39
+            type: Map<num, String>
+        returnType: void
+      synthetic static get vIntObject @76
+        returnType: Map<int, Object>
+      synthetic static set vIntObject @76
+        parameters
+          requiredPositional _vIntObject @76
+            type: Map<int, Object>
+        returnType: void
 ''');
   }
 
@@ -1177,11 +2578,55 @@
 var vOr = a || b;
 ''');
     checkElementText(library, r'''
-bool a;
-bool b;
-bool vEq;
-bool vAnd;
-bool vOr;
+library
+  definingUnit
+    topLevelVariables
+      static a @4
+        type: bool
+      static b @18
+        type: bool
+      static vEq @32
+        type: bool
+      static vAnd @50
+        type: bool
+      static vOr @69
+        type: bool
+    accessors
+      synthetic static get a @4
+        returnType: bool
+      synthetic static set a @4
+        parameters
+          requiredPositional _a @4
+            type: bool
+        returnType: void
+      synthetic static get b @18
+        returnType: bool
+      synthetic static set b @18
+        parameters
+          requiredPositional _b @18
+            type: bool
+        returnType: void
+      synthetic static get vEq @32
+        returnType: bool
+      synthetic static set vEq @32
+        parameters
+          requiredPositional _vEq @32
+            type: bool
+        returnType: void
+      synthetic static get vAnd @50
+        returnType: bool
+      synthetic static set vAnd @50
+        parameters
+          requiredPositional _vAnd @50
+            type: bool
+        returnType: void
+      synthetic static get vOr @69
+        returnType: bool
+      synthetic static set vOr @69
+        parameters
+          requiredPositional _vOr @69
+            type: bool
+        returnType: void
 ''');
   }
 
@@ -1214,12 +2659,47 @@
 var v2 = new A().m();
 ''');
     checkElementText(library, r'''
-class A {
-  String m(int p) {}
-}
-A instanceOfA;
-String v1;
-String v2;
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          synthetic @-1
+        methods
+          m @19
+            parameters
+              requiredPositional p @25
+                type: int
+            returnType: String
+    topLevelVariables
+      static instanceOfA @43
+        type: A
+      static v1 @70
+        type: String
+      static v2 @96
+        type: String
+    accessors
+      synthetic static get instanceOfA @43
+        returnType: A
+      synthetic static set instanceOfA @43
+        parameters
+          requiredPositional _instanceOfA @43
+            type: A
+        returnType: void
+      synthetic static get v1 @70
+        returnType: String
+      synthetic static set v1 @70
+        parameters
+          requiredPositional _v1 @70
+            type: String
+        returnType: void
+      synthetic static get v2 @96
+        returnType: String
+      synthetic static set v2 @96
+        parameters
+          requiredPositional _v2 @96
+            type: String
+        returnType: void
 ''');
   }
 
@@ -1238,17 +2718,109 @@
 var vFloorDivide = 1 ~/ 2;
 ''');
     checkElementText(library, r'''
-int vModuloIntInt;
-double vModuloIntDouble;
-int vMultiplyIntInt;
-double vMultiplyIntDouble;
-double vMultiplyDoubleInt;
-double vMultiplyDoubleDouble;
-double vDivideIntInt;
-double vDivideIntDouble;
-double vDivideDoubleInt;
-double vDivideDoubleDouble;
-int vFloorDivide;
+library
+  definingUnit
+    topLevelVariables
+      static vModuloIntInt @4
+        type: int
+      static vModuloIntDouble @31
+        type: double
+      static vMultiplyIntInt @63
+        type: int
+      static vMultiplyIntDouble @92
+        type: double
+      static vMultiplyDoubleInt @126
+        type: double
+      static vMultiplyDoubleDouble @160
+        type: double
+      static vDivideIntInt @199
+        type: double
+      static vDivideIntDouble @226
+        type: double
+      static vDivideDoubleInt @258
+        type: double
+      static vDivideDoubleDouble @290
+        type: double
+      static vFloorDivide @327
+        type: int
+    accessors
+      synthetic static get vModuloIntInt @4
+        returnType: int
+      synthetic static set vModuloIntInt @4
+        parameters
+          requiredPositional _vModuloIntInt @4
+            type: int
+        returnType: void
+      synthetic static get vModuloIntDouble @31
+        returnType: double
+      synthetic static set vModuloIntDouble @31
+        parameters
+          requiredPositional _vModuloIntDouble @31
+            type: double
+        returnType: void
+      synthetic static get vMultiplyIntInt @63
+        returnType: int
+      synthetic static set vMultiplyIntInt @63
+        parameters
+          requiredPositional _vMultiplyIntInt @63
+            type: int
+        returnType: void
+      synthetic static get vMultiplyIntDouble @92
+        returnType: double
+      synthetic static set vMultiplyIntDouble @92
+        parameters
+          requiredPositional _vMultiplyIntDouble @92
+            type: double
+        returnType: void
+      synthetic static get vMultiplyDoubleInt @126
+        returnType: double
+      synthetic static set vMultiplyDoubleInt @126
+        parameters
+          requiredPositional _vMultiplyDoubleInt @126
+            type: double
+        returnType: void
+      synthetic static get vMultiplyDoubleDouble @160
+        returnType: double
+      synthetic static set vMultiplyDoubleDouble @160
+        parameters
+          requiredPositional _vMultiplyDoubleDouble @160
+            type: double
+        returnType: void
+      synthetic static get vDivideIntInt @199
+        returnType: double
+      synthetic static set vDivideIntInt @199
+        parameters
+          requiredPositional _vDivideIntInt @199
+            type: double
+        returnType: void
+      synthetic static get vDivideIntDouble @226
+        returnType: double
+      synthetic static set vDivideIntDouble @226
+        parameters
+          requiredPositional _vDivideIntDouble @226
+            type: double
+        returnType: void
+      synthetic static get vDivideDoubleInt @258
+        returnType: double
+      synthetic static set vDivideDoubleInt @258
+        parameters
+          requiredPositional _vDivideDoubleInt @258
+            type: double
+        returnType: void
+      synthetic static get vDivideDoubleDouble @290
+        returnType: double
+      synthetic static set vDivideDoubleDouble @290
+        parameters
+          requiredPositional _vDivideDoubleDouble @290
+            type: double
+        returnType: void
+      synthetic static get vFloorDivide @327
+        returnType: int
+      synthetic static set vFloorDivide @327
+        parameters
+          requiredPositional _vFloorDivide @327
+            type: int
+        returnType: void
 ''');
   }
 
@@ -1259,9 +2831,37 @@
 var vNotEq = a != ((a = 2) == 0);
 ''');
     checkElementText(library, r'''
-int a;
-bool vEq;
-bool vNotEq;
+library
+  definingUnit
+    topLevelVariables
+      static a @4
+        type: int
+      static vEq @15
+        type: bool
+      static vNotEq @46
+        type: bool
+    accessors
+      synthetic static get a @4
+        returnType: int
+      synthetic static set a @4
+        parameters
+          requiredPositional _a @4
+            type: int
+        returnType: void
+      synthetic static get vEq @15
+        returnType: bool
+      synthetic static set vEq @15
+        parameters
+          requiredPositional _vEq @15
+            type: bool
+        returnType: void
+      synthetic static get vNotEq @46
+        returnType: bool
+      synthetic static set vNotEq @46
+        parameters
+          requiredPositional _vNotEq @46
+            type: bool
+        returnType: void
 ''');
   }
 
@@ -1270,7 +2870,19 @@
 var V = (42);
 ''');
     checkElementText(library, r'''
-int V;
+library
+  definingUnit
+    topLevelVariables
+      static V @4
+        type: int
+    accessors
+      synthetic static get V @4
+        returnType: int
+      synthetic static set V @4
+        parameters
+          requiredPositional _V @4
+            type: int
+        returnType: void
 ''');
   }
 
@@ -1284,12 +2896,64 @@
 var vDecDouble = vDouble--;
 ''');
     checkElementText(library, r'''
-int vInt;
-double vDouble;
-int vIncInt;
-int vDecInt;
-double vIncDouble;
-double vDecDouble;
+library
+  definingUnit
+    topLevelVariables
+      static vInt @4
+        type: int
+      static vDouble @18
+        type: double
+      static vIncInt @37
+        type: int
+      static vDecInt @59
+        type: int
+      static vIncDouble @81
+        type: double
+      static vDecDouble @109
+        type: double
+    accessors
+      synthetic static get vInt @4
+        returnType: int
+      synthetic static set vInt @4
+        parameters
+          requiredPositional _vInt @4
+            type: int
+        returnType: void
+      synthetic static get vDouble @18
+        returnType: double
+      synthetic static set vDouble @18
+        parameters
+          requiredPositional _vDouble @18
+            type: double
+        returnType: void
+      synthetic static get vIncInt @37
+        returnType: int
+      synthetic static set vIncInt @37
+        parameters
+          requiredPositional _vIncInt @37
+            type: int
+        returnType: void
+      synthetic static get vDecInt @59
+        returnType: int
+      synthetic static set vDecInt @59
+        parameters
+          requiredPositional _vDecInt @59
+            type: int
+        returnType: void
+      synthetic static get vIncDouble @81
+        returnType: double
+      synthetic static set vIncDouble @81
+        parameters
+          requiredPositional _vIncDouble @81
+            type: double
+        returnType: void
+      synthetic static get vDecDouble @109
+        returnType: double
+      synthetic static set vDecDouble @109
+        parameters
+          requiredPositional _vDecDouble @109
+            type: double
+        returnType: void
 ''');
   }
 
@@ -1303,12 +2967,64 @@
 var vDecDouble = vDouble[0]--;
 ''');
     checkElementText(library, r'''
-List<int> vInt;
-List<double> vDouble;
-int vIncInt;
-int vDecInt;
-double vIncDouble;
-double vDecDouble;
+library
+  definingUnit
+    topLevelVariables
+      static vInt @4
+        type: List<int>
+      static vDouble @20
+        type: List<double>
+      static vIncInt @41
+        type: int
+      static vDecInt @66
+        type: int
+      static vIncDouble @91
+        type: double
+      static vDecDouble @122
+        type: double
+    accessors
+      synthetic static get vInt @4
+        returnType: List<int>
+      synthetic static set vInt @4
+        parameters
+          requiredPositional _vInt @4
+            type: List<int>
+        returnType: void
+      synthetic static get vDouble @20
+        returnType: List<double>
+      synthetic static set vDouble @20
+        parameters
+          requiredPositional _vDouble @20
+            type: List<double>
+        returnType: void
+      synthetic static get vIncInt @41
+        returnType: int
+      synthetic static set vIncInt @41
+        parameters
+          requiredPositional _vIncInt @41
+            type: int
+        returnType: void
+      synthetic static get vDecInt @66
+        returnType: int
+      synthetic static set vDecInt @66
+        parameters
+          requiredPositional _vDecInt @66
+            type: int
+        returnType: void
+      synthetic static get vIncDouble @91
+        returnType: double
+      synthetic static set vIncDouble @91
+        parameters
+          requiredPositional _vIncDouble @91
+            type: double
+        returnType: void
+      synthetic static get vDecDouble @122
+        returnType: double
+      synthetic static set vDecDouble @122
+        parameters
+          requiredPositional _vDecDouble @122
+            type: double
+        returnType: void
 ''');
   }
 
@@ -1322,12 +3038,64 @@
 var vDecInt = --vDouble;
 ''');
     checkElementText(library, r'''
-int vInt;
-double vDouble;
-int vIncInt;
-int vDecInt;
-double vIncDouble;
-double vDecInt;
+library
+  definingUnit
+    topLevelVariables
+      static vInt @4
+        type: int
+      static vDouble @18
+        type: double
+      static vIncInt @37
+        type: int
+      static vDecInt @59
+        type: int
+      static vIncDouble @81
+        type: double
+      static vDecInt @109
+        type: double
+    accessors
+      synthetic static get vInt @4
+        returnType: int
+      synthetic static set vInt @4
+        parameters
+          requiredPositional _vInt @4
+            type: int
+        returnType: void
+      synthetic static get vDouble @18
+        returnType: double
+      synthetic static set vDouble @18
+        parameters
+          requiredPositional _vDouble @18
+            type: double
+        returnType: void
+      synthetic static get vIncInt @37
+        returnType: int
+      synthetic static set vIncInt @37
+        parameters
+          requiredPositional _vIncInt @37
+            type: int
+        returnType: void
+      synthetic static get vDecInt @59
+        returnType: int
+      synthetic static set vDecInt @59
+        parameters
+          requiredPositional _vDecInt @59
+            type: int
+        returnType: void
+      synthetic static get vIncDouble @81
+        returnType: double
+      synthetic static set vIncDouble @81
+        parameters
+          requiredPositional _vIncDouble @81
+            type: double
+        returnType: void
+      synthetic static get vDecInt @109
+        returnType: double
+      synthetic static set vDecInt @109
+        parameters
+          requiredPositional _vDecInt @109
+            type: double
+        returnType: void
 ''');
   }
 
@@ -1359,12 +3127,64 @@
 var vDecInt = --vDouble[0];
 ''');
     checkElementText(library, r'''
-List<int> vInt;
-List<double> vDouble;
-int vIncInt;
-int vDecInt;
-double vIncDouble;
-double vDecInt;
+library
+  definingUnit
+    topLevelVariables
+      static vInt @4
+        type: List<int>
+      static vDouble @20
+        type: List<double>
+      static vIncInt @41
+        type: int
+      static vDecInt @66
+        type: int
+      static vIncDouble @91
+        type: double
+      static vDecInt @122
+        type: double
+    accessors
+      synthetic static get vInt @4
+        returnType: List<int>
+      synthetic static set vInt @4
+        parameters
+          requiredPositional _vInt @4
+            type: List<int>
+        returnType: void
+      synthetic static get vDouble @20
+        returnType: List<double>
+      synthetic static set vDouble @20
+        parameters
+          requiredPositional _vDouble @20
+            type: List<double>
+        returnType: void
+      synthetic static get vIncInt @41
+        returnType: int
+      synthetic static set vIncInt @41
+        parameters
+          requiredPositional _vIncInt @41
+            type: int
+        returnType: void
+      synthetic static get vDecInt @66
+        returnType: int
+      synthetic static set vDecInt @66
+        parameters
+          requiredPositional _vDecInt @66
+            type: int
+        returnType: void
+      synthetic static get vIncDouble @91
+        returnType: double
+      synthetic static set vIncDouble @91
+        parameters
+          requiredPositional _vIncDouble @91
+            type: double
+        returnType: void
+      synthetic static get vDecInt @122
+        returnType: double
+      synthetic static set vDecInt @122
+        parameters
+          requiredPositional _vDecInt @122
+            type: double
+        returnType: void
 ''');
   }
 
@@ -1373,7 +3193,19 @@
 var vNot = !true;
 ''');
     checkElementText(library, r'''
-bool vNot;
+library
+  definingUnit
+    topLevelVariables
+      static vNot @4
+        type: bool
+    accessors
+      synthetic static get vNot @4
+        returnType: bool
+      synthetic static set vNot @4
+        parameters
+          requiredPositional _vNot @4
+            type: bool
+        returnType: void
 ''');
   }
 
@@ -1384,9 +3216,37 @@
 var vComplement = ~1;
 ''');
     checkElementText(library, r'''
-int vNegateInt;
-double vNegateDouble;
-int vComplement;
+library
+  definingUnit
+    topLevelVariables
+      static vNegateInt @4
+        type: int
+      static vNegateDouble @25
+        type: double
+      static vComplement @51
+        type: int
+    accessors
+      synthetic static get vNegateInt @4
+        returnType: int
+      synthetic static set vNegateInt @4
+        parameters
+          requiredPositional _vNegateInt @4
+            type: int
+        returnType: void
+      synthetic static get vNegateDouble @25
+        returnType: double
+      synthetic static set vNegateDouble @25
+        parameters
+          requiredPositional _vNegateDouble @25
+            type: double
+        returnType: void
+      synthetic static get vComplement @51
+        returnType: int
+      synthetic static set vComplement @51
+        parameters
+          requiredPositional _vComplement @51
+            type: int
+        returnType: void
 ''');
   }
 
@@ -1401,13 +3261,43 @@
 final x = C.d.i;
 ''');
     checkElementText(library, r'''
-class C {
-  static D d;
-}
-class D {
-  int i;
-}
-final int x;
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          static d @21
+            type: D
+        constructors
+          synthetic @-1
+        accessors
+          synthetic static get d @21
+            returnType: D
+          synthetic static set d @21
+            parameters
+              requiredPositional _d @21
+                type: D
+            returnType: void
+      class D @32
+        fields
+          i @42
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get i @42
+            returnType: int
+          synthetic set i @42
+            parameters
+              requiredPositional _i @42
+                type: int
+            returnType: void
+    topLevelVariables
+      static final x @53
+        type: int
+    accessors
+      synthetic static get x @53
+        returnType: int
 ''');
   }
 
@@ -1422,13 +3312,43 @@
 var x = C.d.i;
 ''');
     checkElementText(library, r'''
-class C {
-  static D get d {}
-}
-class D {
-  int i;
-}
-int x;
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          synthetic static d @-1
+            type: D
+        constructors
+          synthetic @-1
+        accessors
+          static get d @25
+            returnType: D
+      class D @44
+        fields
+          i @54
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get i @54
+            returnType: int
+          synthetic set i @54
+            parameters
+              requiredPositional _i @54
+                type: int
+            returnType: void
+    topLevelVariables
+      static x @63
+        type: int
+    accessors
+      synthetic static get x @63
+        returnType: int
+      synthetic static set x @63
+        parameters
+          requiredPositional _x @63
+            type: int
+        returnType: void
 ''');
   }
 
@@ -1440,10 +3360,46 @@
 var vGreaterOrEqual = 1 >= 2;
 ''');
     checkElementText(library, r'''
-bool vLess;
-bool vLessOrEqual;
-bool vGreater;
-bool vGreaterOrEqual;
+library
+  definingUnit
+    topLevelVariables
+      static vLess @4
+        type: bool
+      static vLessOrEqual @23
+        type: bool
+      static vGreater @50
+        type: bool
+      static vGreaterOrEqual @72
+        type: bool
+    accessors
+      synthetic static get vLess @4
+        returnType: bool
+      synthetic static set vLess @4
+        parameters
+          requiredPositional _vLess @4
+            type: bool
+        returnType: void
+      synthetic static get vLessOrEqual @23
+        returnType: bool
+      synthetic static set vLessOrEqual @23
+        parameters
+          requiredPositional _vLessOrEqual @23
+            type: bool
+        returnType: void
+      synthetic static get vGreater @50
+        returnType: bool
+      synthetic static set vGreater @50
+        parameters
+          requiredPositional _vGreater @50
+            type: bool
+        returnType: void
+      synthetic static get vGreaterOrEqual @72
+        returnType: bool
+      synthetic static set vGreaterOrEqual @72
+        parameters
+          requiredPositional _vGreaterOrEqual @72
+            type: bool
+        returnType: void
 ''');
   }
 
@@ -1467,12 +3423,34 @@
 }
 ''');
     checkElementText(library, r'''
-abstract class A {
-  int x;
-}
-class B implements A {
-  void set x() {}
-}
+library
+  definingUnit
+    classes
+      abstract class A @15
+        fields
+          x @25
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get x @25
+            returnType: int
+          synthetic set x @25
+            parameters
+              requiredPositional _x @25
+                type: int
+            returnType: void
+      class B @36
+        interfaces
+          A
+        fields
+          synthetic x @-1
+            type: dynamic
+        constructors
+          synthetic @-1
+        accessors
+          set x @59
+            returnType: void
 ''');
   }
 
@@ -1484,10 +3462,29 @@
 }
 ''');
     checkElementText(library, r'''
-class A {
-  int f;
-  A([final int this.f = 'hello']);
-}
+library
+  definingUnit
+    classes
+      class A @6
+        fields
+          f @16
+            type: int
+        constructors
+          @25
+            parameters
+              optionalPositional final this.f @33
+                type: int
+                constantInitializer
+                  SimpleStringLiteral
+                    literal: 'hello' @0
+        accessors
+          synthetic get f @16
+            returnType: int
+          synthetic set f @16
+            parameters
+              requiredPositional _f @16
+                type: int
+            returnType: void
 ''');
   }
 
@@ -1504,23 +3501,70 @@
   set z(_) {}
 }
 ''');
-    checkElementText(
-        library,
-        r'''
-abstract class A {
-  int x;
-  int y;
-  int z;
-}
-class B implements A {
-  int x;
-  synthetic int y;
-  synthetic int z;
-  int get y {}
-  void set z(int _) {}
-}
-''',
-        withSyntheticFields: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      abstract class A @15
+        fields
+          x @25
+            type: int
+          y @34
+            type: int
+          z @43
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get x @25
+            returnType: int
+          synthetic set x @25
+            parameters
+              requiredPositional _x @25
+                type: int
+            returnType: void
+          synthetic get y @34
+            returnType: int
+          synthetic set y @34
+            parameters
+              requiredPositional _y @34
+                type: int
+            returnType: void
+          synthetic get z @43
+            returnType: int
+          synthetic set z @43
+            parameters
+              requiredPositional _z @43
+                type: int
+            returnType: void
+      class B @54
+        interfaces
+          A
+        fields
+          x @77
+            type: int
+          synthetic y @-1
+            type: int
+          synthetic z @-1
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get x @77
+            returnType: int
+          synthetic set x @77
+            parameters
+              requiredPositional _x @77
+                type: int
+            returnType: void
+          get y @86
+            returnType: int
+          set z @103
+            parameters
+              requiredPositional _ @105
+                type: int
+            returnType: void
+''');
   }
 
   test_instanceField_fromField_explicitDynamic() async {
@@ -1533,12 +3577,39 @@
 }
 ''');
     checkElementText(library, r'''
-abstract class A {
-  dynamic x;
-}
-class B implements A {
-  dynamic x;
-}
+library
+  definingUnit
+    classes
+      abstract class A @15
+        fields
+          x @29
+            type: dynamic
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get x @29
+            returnType: dynamic
+          synthetic set x @29
+            parameters
+              requiredPositional _x @29
+                type: dynamic
+            returnType: void
+      class B @40
+        interfaces
+          A
+        fields
+          x @63
+            type: dynamic
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get x @63
+            returnType: dynamic
+          synthetic set x @63
+            parameters
+              requiredPositional _x @63
+                type: dynamic
+            returnType: void
 ''');
   }
 
@@ -1555,23 +3626,76 @@
   set z(_) {}
 }
 ''');
-    checkElementText(
-        library,
-        r'''
-abstract class A<E> {
-  E x;
-  E y;
-  E z;
-}
-class B<T> implements A<T> {
-  T x;
-  synthetic T y;
-  synthetic T z;
-  T get y {}
-  void set z(T _) {}
-}
-''',
-        withSyntheticFields: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      abstract class A @15
+        typeParameters
+          covariant E @17
+            defaultType: dynamic
+        fields
+          x @26
+            type: E
+          y @33
+            type: E
+          z @40
+            type: E
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get x @26
+            returnType: E
+          synthetic set x @26
+            parameters
+              requiredPositional _x @26
+                type: E
+            returnType: void
+          synthetic get y @33
+            returnType: E
+          synthetic set y @33
+            parameters
+              requiredPositional _y @33
+                type: E
+            returnType: void
+          synthetic get z @40
+            returnType: E
+          synthetic set z @40
+            parameters
+              requiredPositional _z @40
+                type: E
+            returnType: void
+      class B @51
+        typeParameters
+          covariant T @53
+            defaultType: dynamic
+        interfaces
+          A<T>
+        fields
+          x @80
+            type: T
+          synthetic y @-1
+            type: T
+          synthetic z @-1
+            type: T
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get x @80
+            returnType: T
+          synthetic set x @80
+            parameters
+              requiredPositional _x @80
+                type: T
+            returnType: void
+          get y @89
+            returnType: T
+          set z @106
+            parameters
+              requiredPositional _ @108
+                type: T
+            returnType: void
+''');
   }
 
   test_instanceField_fromField_implicitDynamic() async {
@@ -1584,12 +3708,39 @@
 }
 ''');
     checkElementText(library, r'''
-abstract class A {
-  dynamic x;
-}
-class B implements A {
-  dynamic x;
-}
+library
+  definingUnit
+    classes
+      abstract class A @15
+        fields
+          x @25
+            type: dynamic
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get x @25
+            returnType: dynamic
+          synthetic set x @25
+            parameters
+              requiredPositional _x @25
+                type: dynamic
+            returnType: void
+      class B @36
+        interfaces
+          A
+        fields
+          x @59
+            type: dynamic
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get x @59
+            returnType: dynamic
+          synthetic set x @59
+            parameters
+              requiredPositional _x @59
+                type: dynamic
+            returnType: void
 ''');
   }
 
@@ -1603,12 +3754,39 @@
 }
 ''');
     checkElementText(library, r'''
-abstract class A {
-  num x;
-}
-class B implements A {
-  num x;
-}
+library
+  definingUnit
+    classes
+      abstract class A @15
+        fields
+          x @25
+            type: num
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get x @25
+            returnType: num
+          synthetic set x @25
+            parameters
+              requiredPositional _x @25
+                type: num
+            returnType: void
+      class B @36
+        interfaces
+          A
+        fields
+          x @59
+            type: num
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get x @59
+            returnType: num
+          synthetic set x @59
+            parameters
+              requiredPositional _x @59
+                type: num
+            returnType: void
 ''');
   }
 
@@ -1626,16 +3804,53 @@
 }
 ''');
     checkElementText(library, r'''
-abstract class A {
-  int get x;
-  int get y;
-  int get z;
-}
-class B implements A {
-  int x;
-  int get y {}
-  void set z(int _) {}
-}
+library
+  definingUnit
+    classes
+      abstract class A @15
+        fields
+          synthetic x @-1
+            type: int
+          synthetic y @-1
+            type: int
+          synthetic z @-1
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          abstract get x @29
+            returnType: int
+          abstract get y @42
+            returnType: int
+          abstract get z @55
+            returnType: int
+      class B @66
+        interfaces
+          A
+        fields
+          x @89
+            type: int
+          synthetic y @-1
+            type: int
+          synthetic z @-1
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get x @89
+            returnType: int
+          synthetic set x @89
+            parameters
+              requiredPositional _x @89
+                type: int
+            returnType: void
+          get y @98
+            returnType: int
+          set z @115
+            parameters
+              requiredPositional _ @117
+                type: int
+            returnType: void
 ''');
   }
 
@@ -1653,16 +3868,59 @@
 }
 ''');
     checkElementText(library, r'''
-abstract class A<E> {
-  E get x;
-  E get y;
-  E get z;
-}
-class B<T> implements A<T> {
-  T x;
-  T get y {}
-  void set z(T _) {}
-}
+library
+  definingUnit
+    classes
+      abstract class A @15
+        typeParameters
+          covariant E @17
+            defaultType: dynamic
+        fields
+          synthetic x @-1
+            type: E
+          synthetic y @-1
+            type: E
+          synthetic z @-1
+            type: E
+        constructors
+          synthetic @-1
+        accessors
+          abstract get x @30
+            returnType: E
+          abstract get y @41
+            returnType: E
+          abstract get z @52
+            returnType: E
+      class B @63
+        typeParameters
+          covariant T @65
+            defaultType: dynamic
+        interfaces
+          A<T>
+        fields
+          x @92
+            type: T
+          synthetic y @-1
+            type: T
+          synthetic z @-1
+            type: T
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get x @92
+            returnType: T
+          synthetic set x @92
+            parameters
+              requiredPositional _x @92
+                type: T
+            returnType: void
+          get y @101
+            returnType: T
+          set z @118
+            parameters
+              requiredPositional _ @120
+                type: T
+            returnType: void
 ''');
   }
 
@@ -1680,15 +3938,39 @@
 ''');
     // TODO(scheglov) test for inference failure error
     checkElementText(library, r'''
-abstract class A {
-  int get x;
-}
-abstract class B {
-  String get x;
-}
-class C implements A, B {
-  dynamic get x {}
-}
+library
+  definingUnit
+    classes
+      abstract class A @15
+        fields
+          synthetic x @-1
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          abstract get x @29
+            returnType: int
+      abstract class B @49
+        fields
+          synthetic x @-1
+            type: String
+        constructors
+          synthetic @-1
+        accessors
+          abstract get x @66
+            returnType: String
+      class C @77
+        interfaces
+          A
+          B
+        fields
+          synthetic x @-1
+            type: dynamic
+        constructors
+          synthetic @-1
+        accessors
+          get x @103
+            returnType: dynamic
 ''');
   }
 
@@ -1706,15 +3988,39 @@
 ''');
     // TODO(scheglov) test for inference failure error
     checkElementText(library, r'''
-abstract class A {
-  int get x;
-}
-abstract class B {
-  dynamic get x;
-}
-class C implements A, B {
-  int get x {}
-}
+library
+  definingUnit
+    classes
+      abstract class A @15
+        fields
+          synthetic x @-1
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          abstract get x @29
+            returnType: int
+      abstract class B @49
+        fields
+          synthetic x @-1
+            type: dynamic
+        constructors
+          synthetic @-1
+        accessors
+          abstract get x @67
+            returnType: dynamic
+      class C @78
+        interfaces
+          A
+          B
+        fields
+          synthetic x @-1
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          get x @104
+            returnType: int
 ''');
   }
 
@@ -1732,15 +4038,45 @@
 ''');
     // TODO(scheglov) test for inference failure error
     checkElementText(library, r'''
-abstract class A<T> {
-  T get x;
-}
-abstract class B<T> {
-  T get x;
-}
-class C implements A<int>, B<String> {
-  dynamic get x {}
-}
+library
+  definingUnit
+    classes
+      abstract class A @15
+        typeParameters
+          covariant T @17
+            defaultType: dynamic
+        fields
+          synthetic x @-1
+            type: T
+        constructors
+          synthetic @-1
+        accessors
+          abstract get x @30
+            returnType: T
+      abstract class B @50
+        typeParameters
+          covariant T @52
+            defaultType: dynamic
+        fields
+          synthetic x @-1
+            type: T
+        constructors
+          synthetic @-1
+        accessors
+          abstract get x @65
+            returnType: T
+      class C @76
+        interfaces
+          A<int>
+          B<String>
+        fields
+          synthetic x @-1
+            type: dynamic
+        constructors
+          synthetic @-1
+        accessors
+          get x @115
+            returnType: dynamic
 ''');
   }
 
@@ -1757,15 +4093,39 @@
 }
 ''');
     checkElementText(library, r'''
-abstract class A {
-  int get x;
-}
-abstract class B {
-  int get x;
-}
-class C implements A, B {
-  int get x {}
-}
+library
+  definingUnit
+    classes
+      abstract class A @15
+        fields
+          synthetic x @-1
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          abstract get x @29
+            returnType: int
+      abstract class B @49
+        fields
+          synthetic x @-1
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          abstract get x @63
+            returnType: int
+      class C @74
+        interfaces
+          A
+          B
+        fields
+          synthetic x @-1
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          get x @100
+            returnType: int
 ''');
   }
 
@@ -1785,18 +4145,63 @@
 }
 ''');
     checkElementText(library, r'''
-abstract class A {
-  int get x;
-  int get y;
-}
-abstract class B {
-  void set x(String _);
-  void set y(String _);
-}
-class C implements A, B {
-  dynamic x/*error: overrideConflictFieldType*/;
-  final int y;
-}
+library
+  definingUnit
+    classes
+      abstract class A @15
+        fields
+          synthetic x @-1
+            type: int
+          synthetic y @-1
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          abstract get x @29
+            returnType: int
+          abstract get y @42
+            returnType: int
+      abstract class B @62
+        fields
+          synthetic x @-1
+            type: String
+          synthetic y @-1
+            type: String
+        constructors
+          synthetic @-1
+        accessors
+          abstract set x @77
+            parameters
+              requiredPositional _ @86
+                type: String
+            returnType: void
+          abstract set y @101
+            parameters
+              requiredPositional _ @110
+                type: String
+            returnType: void
+      class C @122
+        interfaces
+          A
+          B
+        fields
+          x @148
+            typeInferenceError: overrideConflictFieldType
+            type: dynamic
+          final y @159
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get x @148
+            returnType: dynamic
+          synthetic set x @148
+            parameters
+              requiredPositional _x @148
+                type: dynamic
+            returnType: void
+          synthetic get y @159
+            returnType: int
 ''');
   }
 
@@ -1812,23 +4217,44 @@
   get x => null;
 }
 ''');
-    checkElementText(
-        library,
-        r'''
-abstract class A {
-  synthetic int x;
-  int get x;
-}
-abstract class B {
-  synthetic String x;
-  void set x(String _);
-}
-class C implements A, B {
-  synthetic int x;
-  int get x {}
-}
-''',
-        withSyntheticFields: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      abstract class A @15
+        fields
+          synthetic x @-1
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          abstract get x @29
+            returnType: int
+      abstract class B @49
+        fields
+          synthetic x @-1
+            type: String
+        constructors
+          synthetic @-1
+        accessors
+          abstract set x @64
+            parameters
+              requiredPositional _ @73
+                type: String
+            returnType: void
+      class C @85
+        interfaces
+          A
+          B
+        fields
+          synthetic x @-1
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          get x @111
+            returnType: int
+''');
   }
 
   test_instanceField_fromGetterSetter_different_setter() async {
@@ -1844,23 +4270,47 @@
 }
 ''');
     // TODO(scheglov) test for inference failure error
-    checkElementText(
-        library,
-        r'''
-abstract class A {
-  synthetic int x;
-  int get x;
-}
-abstract class B {
-  synthetic String x;
-  void set x(String _);
-}
-class C implements A, B {
-  synthetic String x;
-  void set x(String _);
-}
-''',
-        withSyntheticFields: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      abstract class A @15
+        fields
+          synthetic x @-1
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          abstract get x @29
+            returnType: int
+      abstract class B @49
+        fields
+          synthetic x @-1
+            type: String
+        constructors
+          synthetic @-1
+        accessors
+          abstract set x @64
+            parameters
+              requiredPositional _ @73
+                type: String
+            returnType: void
+      class C @85
+        interfaces
+          A
+          B
+        fields
+          synthetic x @-1
+            type: String
+        constructors
+          synthetic @-1
+        accessors
+          abstract set x @111
+            parameters
+              requiredPositional _ @113
+                type: String
+            returnType: void
+''');
   }
 
   test_instanceField_fromGetterSetter_same_field() async {
@@ -1876,15 +4326,47 @@
 }
 ''');
     checkElementText(library, r'''
-abstract class A {
-  int get x;
-}
-abstract class B {
-  void set x(int _);
-}
-class C implements A, B {
-  int x;
-}
+library
+  definingUnit
+    classes
+      abstract class A @15
+        fields
+          synthetic x @-1
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          abstract get x @29
+            returnType: int
+      abstract class B @49
+        fields
+          synthetic x @-1
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          abstract set x @64
+            parameters
+              requiredPositional _ @70
+                type: int
+            returnType: void
+      class C @82
+        interfaces
+          A
+          B
+        fields
+          x @108
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get x @108
+            returnType: int
+          synthetic set x @108
+            parameters
+              requiredPositional _x @108
+                type: int
+            returnType: void
 ''');
   }
 
@@ -1900,23 +4382,44 @@
   get x => null;
 }
 ''');
-    checkElementText(
-        library,
-        r'''
-abstract class A {
-  synthetic int x;
-  int get x;
-}
-abstract class B {
-  synthetic int x;
-  void set x(int _);
-}
-class C implements A, B {
-  synthetic int x;
-  int get x {}
-}
-''',
-        withSyntheticFields: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      abstract class A @15
+        fields
+          synthetic x @-1
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          abstract get x @29
+            returnType: int
+      abstract class B @49
+        fields
+          synthetic x @-1
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          abstract set x @64
+            parameters
+              requiredPositional _ @70
+                type: int
+            returnType: void
+      class C @82
+        interfaces
+          A
+          B
+        fields
+          synthetic x @-1
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          get x @108
+            returnType: int
+''');
   }
 
   test_instanceField_fromGetterSetter_same_setter() async {
@@ -1931,23 +4434,47 @@
   set x(_);
 }
 ''');
-    checkElementText(
-        library,
-        r'''
-abstract class A {
-  synthetic int x;
-  int get x;
-}
-abstract class B {
-  synthetic int x;
-  void set x(int _);
-}
-class C implements A, B {
-  synthetic int x;
-  void set x(int _);
-}
-''',
-        withSyntheticFields: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      abstract class A @15
+        fields
+          synthetic x @-1
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          abstract get x @29
+            returnType: int
+      abstract class B @49
+        fields
+          synthetic x @-1
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          abstract set x @64
+            parameters
+              requiredPositional _ @70
+                type: int
+            returnType: void
+      class C @82
+        interfaces
+          A
+          B
+        fields
+          synthetic x @-1
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          abstract set x @108
+            parameters
+              requiredPositional _ @110
+                type: int
+            returnType: void
+''');
   }
 
   test_instanceField_fromSetter() async {
@@ -1964,16 +4491,62 @@
 }
 ''');
     checkElementText(library, r'''
-abstract class A {
-  void set x(int _);
-  void set y(int _);
-  void set z(int _);
-}
-class B implements A {
-  int x;
-  int get y {}
-  void set z(int _) {}
-}
+library
+  definingUnit
+    classes
+      abstract class A @15
+        fields
+          synthetic x @-1
+            type: int
+          synthetic y @-1
+            type: int
+          synthetic z @-1
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          abstract set x @30
+            parameters
+              requiredPositional _ @36
+                type: int
+            returnType: void
+          abstract set y @51
+            parameters
+              requiredPositional _ @57
+                type: int
+            returnType: void
+          abstract set z @72
+            parameters
+              requiredPositional _ @78
+                type: int
+            returnType: void
+      class B @90
+        interfaces
+          A
+        fields
+          x @113
+            type: int
+          synthetic y @-1
+            type: int
+          synthetic z @-1
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get x @113
+            returnType: int
+          synthetic set x @113
+            parameters
+              requiredPositional _x @113
+                type: int
+            returnType: void
+          get y @122
+            returnType: int
+          set z @139
+            parameters
+              requiredPositional _ @141
+                type: int
+            returnType: void
 ''');
   }
 
@@ -1990,15 +4563,45 @@
 }
 ''');
     checkElementText(library, r'''
-abstract class A {
-  void set x(int _);
-}
-abstract class B {
-  void set x(String _);
-}
-class C implements A, B {
-  dynamic get x {}
-}
+library
+  definingUnit
+    classes
+      abstract class A @15
+        fields
+          synthetic x @-1
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          abstract set x @30
+            parameters
+              requiredPositional _ @36
+                type: int
+            returnType: void
+      abstract class B @57
+        fields
+          synthetic x @-1
+            type: String
+        constructors
+          synthetic @-1
+        accessors
+          abstract set x @72
+            parameters
+              requiredPositional _ @81
+                type: String
+            returnType: void
+      class C @93
+        interfaces
+          A
+          B
+        fields
+          synthetic x @-1
+            type: dynamic
+        constructors
+          synthetic @-1
+        accessors
+          get x @119
+            returnType: dynamic
 ''');
   }
 
@@ -2015,15 +4618,45 @@
 }
 ''');
     checkElementText(library, r'''
-abstract class A {
-  void set x(int _);
-}
-abstract class B {
-  void set x(int _);
-}
-class C implements A, B {
-  int get x {}
-}
+library
+  definingUnit
+    classes
+      abstract class A @15
+        fields
+          synthetic x @-1
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          abstract set x @30
+            parameters
+              requiredPositional _ @36
+                type: int
+            returnType: void
+      abstract class B @57
+        fields
+          synthetic x @-1
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          abstract set x @72
+            parameters
+              requiredPositional _ @78
+                type: int
+            returnType: void
+      class C @90
+        interfaces
+          A
+          B
+        fields
+          synthetic x @-1
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          get x @116
+            returnType: int
 ''');
   }
 
@@ -2042,15 +4675,59 @@
 }
 ''');
     checkElementText(library, r'''
-typedef F<T> = dynamic Function();
-class A<T> {
-  dynamic Function() get x {}
-  List<dynamic Function()> get y {}
-}
-class B extends A<int> {
-  dynamic Function() get x {}
-  List<dynamic Function()> get y {}
-}
+library
+  definingUnit
+    classes
+      class A @23
+        typeParameters
+          covariant T @25
+            defaultType: dynamic
+        fields
+          synthetic x @-1
+            type: dynamic Function()
+              aliasElement: self::@typeAlias::F
+              aliasArguments
+                T
+          synthetic y @-1
+            type: List<dynamic Function()>
+        constructors
+          synthetic @-1
+        accessors
+          get x @41
+            returnType: dynamic Function()
+              aliasElement: self::@typeAlias::F
+              aliasArguments
+                T
+          get y @69
+            returnType: List<dynamic Function()>
+      class B @89
+        supertype: A<int>
+        fields
+          synthetic x @-1
+            type: dynamic Function()
+              aliasElement: self::@typeAlias::F
+              aliasArguments
+                int
+          synthetic y @-1
+            type: List<dynamic Function()>
+        constructors
+          synthetic @-1
+        accessors
+          get x @114
+            returnType: dynamic Function()
+              aliasElement: self::@typeAlias::F
+              aliasArguments
+                int
+          get y @131
+            returnType: List<dynamic Function()>
+    typeAliases
+      functionTypeAliasBased F @8
+        typeParameters
+          unrelated T @10
+            defaultType: dynamic
+        aliasedType: dynamic Function()
+        aliasedElement: GenericFunctionTypeElement
+          returnType: dynamic
 ''');
   }
 
@@ -2064,20 +4741,41 @@
   int x;
 }
 ''');
-    checkElementText(
-        library,
-        r'''
-abstract class A {
-  num get x;
-  void set x(covariant num _);
-}
-class B implements A {
-  int x;
-  synthetic int get x {}
-  synthetic void set x(covariant int _x) {}
-}
-''',
-        withSyntheticAccessors: true);
+    checkElementText(library, r'''
+library
+  definingUnit
+    classes
+      abstract class A @15
+        fields
+          synthetic x @-1
+            type: num
+        constructors
+          synthetic @-1
+        accessors
+          abstract get x @29
+            returnType: num
+          abstract set x @43
+            parameters
+              requiredPositional covariant _ @59
+                type: num
+            returnType: void
+      class B @71
+        interfaces
+          A
+        fields
+          x @94
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get x @94
+            returnType: int
+          synthetic set x @94
+            parameters
+              requiredPositional covariant _x @94
+                type: int
+            returnType: void
+''');
   }
 
   test_instanceField_inheritsCovariant_fromSetter_setter() async {
@@ -2091,13 +4789,37 @@
 }
 ''');
     checkElementText(library, r'''
-abstract class A {
-  num get x;
-  void set x(covariant num _);
-}
-class B implements A {
-  void set x(covariant int _) {}
-}
+library
+  definingUnit
+    classes
+      abstract class A @15
+        fields
+          synthetic x @-1
+            type: num
+        constructors
+          synthetic @-1
+        accessors
+          abstract get x @29
+            returnType: num
+          abstract set x @43
+            parameters
+              requiredPositional covariant _ @59
+                type: num
+            returnType: void
+      class B @71
+        interfaces
+          A
+        fields
+          synthetic x @-1
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          set x @94
+            parameters
+              requiredPositional covariant _ @100
+                type: int
+            returnType: void
 ''');
   }
 
@@ -2110,11 +4832,41 @@
 }
 ''');
     checkElementText(library, r'''
-class A {
-  int t1;
-  double t2;
-  dynamic t3;
-}
+library
+  definingUnit
+    classes
+      class A @6
+        fields
+          t1 @16
+            type: int
+          t2 @30
+            type: double
+          t3 @46
+            type: dynamic
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get t1 @16
+            returnType: int
+          synthetic set t1 @16
+            parameters
+              requiredPositional _t1 @16
+                type: int
+            returnType: void
+          synthetic get t2 @30
+            returnType: double
+          synthetic set t2 @30
+            parameters
+              requiredPositional _t2 @30
+                type: double
+            returnType: void
+          synthetic get t3 @46
+            returnType: dynamic
+          synthetic set t3 @46
+            parameters
+              requiredPositional _t3 @46
+                type: dynamic
+            returnType: void
 ''');
   }
 
@@ -2130,12 +4882,30 @@
     // It's an error to add a new required parameter, but it is not a
     // top-level type inference error.
     checkElementText(library, r'''
-class A {
-  void m(int a) {}
-}
-class B extends A {
-  void m(int a, dynamic b) {}
-}
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          synthetic @-1
+        methods
+          m @17
+            parameters
+              requiredPositional a @23
+                type: int
+            returnType: void
+      class B @37
+        supertype: A
+        constructors
+          synthetic @-1
+        methods
+          m @58
+            parameters
+              requiredPositional a @60
+                type: int
+              requiredPositional b @63
+                type: dynamic
+            returnType: void
 ''');
   }
 
@@ -2152,15 +4922,40 @@
 }
 ''');
     checkElementText(library, r'''
-class A {
-  void m(int a) {}
-}
-class B {
-  void m(String a) {}
-}
-class C extends A implements B {
-  dynamic m/*error: overrideNoCombinedSuperSignature*/(dynamic a) {}
-}
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          synthetic @-1
+        methods
+          m @17
+            parameters
+              requiredPositional a @23
+                type: int
+            returnType: void
+      class B @37
+        constructors
+          synthetic @-1
+        methods
+          m @48
+            parameters
+              requiredPositional a @57
+                type: String
+            returnType: void
+      class C @71
+        supertype: A
+        interfaces
+          B
+        constructors
+          synthetic @-1
+        methods
+          m @100
+            typeInferenceError: overrideNoCombinedSuperSignature
+            parameters
+              requiredPositional a @102
+                type: dynamic
+            returnType: dynamic
 ''');
   }
 
@@ -2179,15 +4974,40 @@
 }
 ''');
     checkElementText(library, r'''
-abstract class A {
-  int foo(int x);
-}
-abstract class B {
-  double foo(int x);
-}
-abstract class C implements A, B {
-  Never foo/*error: overrideNoCombinedSuperSignature*/(dynamic x);
-}
+library
+  definingUnit
+    classes
+      abstract class A @15
+        constructors
+          synthetic @-1
+        methods
+          abstract foo @25
+            parameters
+              requiredPositional x @33
+                type: int
+            returnType: int
+      abstract class B @55
+        constructors
+          synthetic @-1
+        methods
+          abstract foo @68
+            parameters
+              requiredPositional x @76
+                type: int
+            returnType: double
+      abstract class C @98
+        interfaces
+          A
+          B
+        constructors
+          synthetic @-1
+        methods
+          abstract foo @126
+            typeInferenceError: overrideNoCombinedSuperSignature
+            parameters
+              requiredPositional x @130
+                type: dynamic
+            returnType: Never
 ''');
   }
 
@@ -2207,15 +5027,40 @@
 }
 ''');
     checkElementText(library, r'''
-abstract class A {
-  int* foo(int* x);
-}
-abstract class B {
-  double* foo(int* x);
-}
-abstract class C implements A*, B* {
-  Null* foo/*error: overrideNoCombinedSuperSignature*/(dynamic x);
-}
+library
+  definingUnit
+    classes
+      abstract class A @30
+        constructors
+          synthetic @-1
+        methods
+          abstract foo @40
+            parameters
+              requiredPositional x @48
+                type: int*
+            returnType: int*
+      abstract class B @70
+        constructors
+          synthetic @-1
+        methods
+          abstract foo @83
+            parameters
+              requiredPositional x @91
+                type: int*
+            returnType: double*
+      abstract class C @113
+        interfaces
+          A*
+          B*
+        constructors
+          synthetic @-1
+        methods
+          abstract foo @141
+            typeInferenceError: overrideNoCombinedSuperSignature
+            parameters
+              requiredPositional x @145
+                type: dynamic
+            returnType: Null*
 ''');
   }
 
@@ -2233,15 +5078,31 @@
 ''');
     // TODO(scheglov) test for inference failure error
     checkElementText(library, r'''
-class A {
-  int m() {}
-}
-class B {
-  String m() {}
-}
-class C extends A implements B {
-  dynamic m/*error: overrideNoCombinedSuperSignature*/() {}
-}
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          synthetic @-1
+        methods
+          m @16
+            returnType: int
+      class B @31
+        constructors
+          synthetic @-1
+        methods
+          m @44
+            returnType: String
+      class C @59
+        supertype: A
+        interfaces
+          B
+        constructors
+          synthetic @-1
+        methods
+          m @88
+            typeInferenceError: overrideNoCombinedSuperSignature
+            returnType: dynamic
 ''');
   }
 
@@ -2258,15 +5119,46 @@
 }
 ''');
     checkElementText(library, r'''
-class A<T> {
-  void m(T a) {}
-}
-class B<E> {
-  void m(E a) {}
-}
-class C extends A<int> implements B<double> {
-  dynamic m/*error: overrideNoCombinedSuperSignature*/(dynamic a) {}
-}
+library
+  definingUnit
+    classes
+      class A @6
+        typeParameters
+          covariant T @8
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+        methods
+          m @20
+            parameters
+              requiredPositional a @24
+                type: T
+            returnType: void
+      class B @38
+        typeParameters
+          covariant E @40
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+        methods
+          m @52
+            parameters
+              requiredPositional a @56
+                type: E
+            returnType: void
+      class C @70
+        supertype: A<int>
+        interfaces
+          B<double>
+        constructors
+          synthetic @-1
+        methods
+          m @112
+            typeInferenceError: overrideNoCombinedSuperSignature
+            parameters
+              requiredPositional a @114
+                type: dynamic
+            returnType: dynamic
 ''');
   }
 
@@ -2283,15 +5175,48 @@
 }
 ''');
     checkElementText(library, r'''
-class A<K, V> {
-  V m(K a) {}
-}
-class B<T> {
-  T m(int a) {}
-}
-class C extends A<int, String> implements B<double> {
-  dynamic m/*error: overrideNoCombinedSuperSignature*/(dynamic a) {}
-}
+library
+  definingUnit
+    classes
+      class A @6
+        typeParameters
+          covariant K @8
+            defaultType: dynamic
+          covariant V @11
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+        methods
+          m @20
+            parameters
+              requiredPositional a @24
+                type: K
+            returnType: V
+      class B @38
+        typeParameters
+          covariant T @40
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+        methods
+          m @49
+            parameters
+              requiredPositional a @55
+                type: int
+            returnType: T
+      class C @69
+        supertype: A<int, String>
+        interfaces
+          B<double>
+        constructors
+          synthetic @-1
+        methods
+          m @119
+            typeInferenceError: overrideNoCombinedSuperSignature
+            parameters
+              requiredPositional a @121
+                type: dynamic
+            returnType: dynamic
 ''');
   }
 
@@ -2305,12 +5230,30 @@
 }
 ''');
     checkElementText(library, r'''
-class A {
-  void m(int a) {}
-}
-class B extends A {
-  void m(int a, {dynamic b}) {}
-}
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          synthetic @-1
+        methods
+          m @17
+            parameters
+              requiredPositional a @23
+                type: int
+            returnType: void
+      class B @37
+        supertype: A
+        constructors
+          synthetic @-1
+        methods
+          m @53
+            parameters
+              requiredPositional a @55
+                type: int
+              optionalNamed b @59
+                type: dynamic
+            returnType: void
 ''');
   }
 
@@ -2324,12 +5267,30 @@
 }
 ''');
     checkElementText(library, r'''
-class A {
-  void m(int a) {}
-}
-class B extends A {
-  void m(int a, [dynamic b]) {}
-}
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          synthetic @-1
+        methods
+          m @17
+            parameters
+              requiredPositional a @23
+                type: int
+            returnType: void
+      class B @37
+        supertype: A
+        constructors
+          synthetic @-1
+        methods
+          m @53
+            parameters
+              requiredPositional a @55
+                type: int
+              optionalPositional b @59
+                type: dynamic
+            returnType: void
 ''');
   }
 
@@ -2343,12 +5304,28 @@
 }
 ''');
     checkElementText(library, r'''
-class A {
-  dynamic m(dynamic a) {}
-}
-class B extends A {
-  dynamic m(dynamic a) {}
-}
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          synthetic @-1
+        methods
+          m @12
+            parameters
+              requiredPositional a @14
+                type: dynamic
+            returnType: dynamic
+      class B @28
+        supertype: A
+        constructors
+          synthetic @-1
+        methods
+          m @44
+            parameters
+              requiredPositional a @46
+                type: dynamic
+            returnType: dynamic
 ''');
   }
 
@@ -2362,12 +5339,28 @@
 }
 ''');
     checkElementText(library, r'''
-class A {
-  int foo(String a) {}
-}
-class B extends A {
-  dynamic m(dynamic a) {}
-}
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          synthetic @-1
+        methods
+          foo @16
+            parameters
+              requiredPositional a @27
+                type: String
+            returnType: int
+      class B @47
+        supertype: A
+        constructors
+          synthetic @-1
+        methods
+          m @63
+            parameters
+              requiredPositional a @65
+                type: dynamic
+            returnType: dynamic
 ''');
   }
 
@@ -2381,12 +5374,33 @@
 }
 ''');
     checkElementText(library, r'''
-class A {
-  int m;
-}
-class B extends A {
-  dynamic m(dynamic a) {}
-}
+library
+  definingUnit
+    classes
+      class A @6
+        fields
+          m @16
+            type: int
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get m @16
+            returnType: int
+          synthetic set m @16
+            parameters
+              requiredPositional _m @16
+                type: int
+            returnType: void
+      class B @32
+        supertype: A
+        constructors
+          synthetic @-1
+        methods
+          m @48
+            parameters
+              requiredPositional a @50
+                type: dynamic
+            returnType: dynamic
 ''');
   }
 
@@ -2401,14 +5415,40 @@
 }
 ''');
     checkElementText(library, r'''
-class A<K, V> {
-  V m(K a) {}
-}
-class B<T> extends A<int, T> {
-}
-class C extends B<String> {
-  String m(int a) {}
-}
+library
+  definingUnit
+    classes
+      class A @6
+        typeParameters
+          covariant K @8
+            defaultType: dynamic
+          covariant V @11
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+        methods
+          m @20
+            parameters
+              requiredPositional a @24
+                type: K
+            returnType: V
+      class B @38
+        typeParameters
+          covariant T @40
+            defaultType: dynamic
+        supertype: A<int, T>
+        constructors
+          synthetic @-1
+      class C @70
+        supertype: B<String>
+        constructors
+          synthetic @-1
+        methods
+          m @94
+            parameters
+              requiredPositional a @96
+                type: int
+            returnType: String
 ''');
   }
 
@@ -2425,15 +5465,38 @@
 }
 ''');
     checkElementText(library, r'''
-class A {
-  String m(int a) {}
-}
-class B extends A {
-  String m(int a) {}
-}
-class C extends B {
-  String m(int a) {}
-}
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          synthetic @-1
+        methods
+          m @19
+            parameters
+              requiredPositional a @25
+                type: int
+            returnType: String
+      class B @39
+        supertype: A
+        constructors
+          synthetic @-1
+        methods
+          m @55
+            parameters
+              requiredPositional a @57
+                type: int
+            returnType: String
+      class C @71
+        supertype: B
+        constructors
+          synthetic @-1
+        methods
+          m @87
+            parameters
+              requiredPositional a @89
+                type: int
+            returnType: String
 ''');
   }
 
@@ -2450,15 +5513,39 @@
 }
 ''');
     checkElementText(library, r'''
-class A {
-  String m(int a) {}
-}
-class B implements A {
-  String m(int a) {}
-}
-class C extends B {
-  String m(int a) {}
-}
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          synthetic @-1
+        methods
+          m @19
+            parameters
+              requiredPositional a @25
+                type: int
+            returnType: String
+      class B @39
+        interfaces
+          A
+        constructors
+          synthetic @-1
+        methods
+          m @58
+            parameters
+              requiredPositional a @60
+                type: int
+            returnType: String
+      class C @74
+        supertype: B
+        constructors
+          synthetic @-1
+        methods
+          m @90
+            parameters
+              requiredPositional a @92
+                type: int
+            returnType: String
 ''');
   }
 
@@ -2475,16 +5562,40 @@
 }
 ''');
     checkElementText(library, r'''
-class A {
-  String m(int a) {}
-}
-class B extends Object with A {
-  synthetic B();
-  String m(int a) {}
-}
-class C extends B {
-  String m(int a) {}
-}
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          synthetic @-1
+        methods
+          m @19
+            parameters
+              requiredPositional a @25
+                type: int
+            returnType: String
+      class B @39
+        supertype: Object
+        mixins
+          A
+        constructors
+          synthetic @-1
+        methods
+          m @67
+            parameters
+              requiredPositional a @69
+                type: int
+            returnType: String
+      class C @83
+        supertype: B
+        constructors
+          synthetic @-1
+        methods
+          m @99
+            parameters
+              requiredPositional a @101
+                type: int
+            returnType: String
 ''');
   }
 
@@ -2498,12 +5609,37 @@
 }
 ''');
     checkElementText(library, r'''
-class A<K, V> {
-  V m(K a, double b) {}
-}
-class B extends A<int, String> {
-  String m(int a, double b) {}
-}
+library
+  definingUnit
+    classes
+      class A @6
+        typeParameters
+          covariant K @8
+            defaultType: dynamic
+          covariant V @11
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+        methods
+          m @20
+            parameters
+              requiredPositional a @24
+                type: K
+              requiredPositional b @34
+                type: double
+            returnType: V
+      class B @48
+        supertype: A<int, String>
+        constructors
+          synthetic @-1
+        methods
+          m @77
+            parameters
+              requiredPositional a @79
+                type: int
+              requiredPositional b @82
+                type: double
+            returnType: String
 ''');
   }
 
@@ -2517,12 +5653,28 @@
 }
 ''');
     checkElementText(library, r'''
-class A {
-  String m(int a) {}
-}
-class B extends A {
-  String m(int a) {}
-}
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          synthetic @-1
+        methods
+          m @19
+            parameters
+              requiredPositional a @25
+                type: int
+            returnType: String
+      class B @39
+        supertype: A
+        constructors
+          synthetic @-1
+        methods
+          m @55
+            parameters
+              requiredPositional a @57
+                type: int
+            returnType: String
 ''');
   }
 
@@ -2536,12 +5688,32 @@
 }
 ''');
     checkElementText(library, r'''
-class A {
-  String m(int a, {double b}) {}
-}
-class B extends A {
-  String m(int a, {double b}) {}
-}
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          synthetic @-1
+        methods
+          m @19
+            parameters
+              requiredPositional a @25
+                type: int
+              optionalNamed b @36
+                type: double
+            returnType: String
+      class B @51
+        supertype: A
+        constructors
+          synthetic @-1
+        methods
+          m @67
+            parameters
+              requiredPositional a @69
+                type: int
+              optionalNamed b @73
+                type: double
+            returnType: String
 ''');
   }
 
@@ -2555,12 +5727,32 @@
 }
 ''');
     checkElementText(library, r'''
-class A {
-  String m(int a, [double b]) {}
-}
-class B extends A {
-  String m(int a, [double b]) {}
-}
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          synthetic @-1
+        methods
+          m @19
+            parameters
+              requiredPositional a @25
+                type: int
+              optionalPositional b @36
+                type: double
+            returnType: String
+      class B @51
+        supertype: A
+        constructors
+          synthetic @-1
+        methods
+          m @67
+            parameters
+              requiredPositional a @69
+                type: int
+              optionalPositional b @73
+                type: double
+            returnType: String
 ''');
   }
 
@@ -2575,14 +5767,40 @@
 }
 ''');
     checkElementText(library, r'''
-class A<K, V> {
-  V m(K a) {}
-}
-class B<T> extends A<int, T> {
-}
-class C extends B<String> {
-  String m(int a) {}
-}
+library
+  definingUnit
+    classes
+      class A @6
+        typeParameters
+          covariant K @8
+            defaultType: dynamic
+          covariant V @11
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+        methods
+          m @20
+            parameters
+              requiredPositional a @24
+                type: K
+            returnType: V
+      class B @38
+        typeParameters
+          covariant T @40
+            defaultType: dynamic
+        supertype: A<int, T>
+        constructors
+          synthetic @-1
+      class C @70
+        supertype: B<String>
+        constructors
+          synthetic @-1
+        methods
+          m @94
+            parameters
+              requiredPositional a @96
+                type: int
+            returnType: String
 ''');
   }
 
@@ -2596,12 +5814,34 @@
 }
 ''');
     checkElementText(library, r'''
-abstract class A<K, V> {
-  V m(K a);
-}
-class B implements A<int, String> {
-  String m(int a) {}
-}
+library
+  definingUnit
+    classes
+      abstract class A @15
+        typeParameters
+          covariant K @17
+            defaultType: dynamic
+          covariant V @20
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+        methods
+          abstract m @29
+            parameters
+              requiredPositional a @33
+                type: K
+            returnType: V
+      class B @45
+        interfaces
+          A<int, String>
+        constructors
+          synthetic @-1
+        methods
+          m @77
+            parameters
+              requiredPositional a @79
+                type: int
+            returnType: String
 ''');
   }
 
@@ -2615,12 +5855,29 @@
 }
 ''');
     checkElementText(library, r'''
-abstract class A {
-  String m(int a);
-}
-class B implements A {
-  String m(int a) {}
-}
+library
+  definingUnit
+    classes
+      abstract class A @15
+        constructors
+          synthetic @-1
+        methods
+          abstract m @28
+            parameters
+              requiredPositional a @34
+                type: int
+            returnType: String
+      class B @46
+        interfaces
+          A
+        constructors
+          synthetic @-1
+        methods
+          m @65
+            parameters
+              requiredPositional a @67
+                type: int
+            returnType: String
 ''');
   }
 
@@ -2635,14 +5892,43 @@
 }
 ''');
     checkElementText(library, r'''
-abstract class A<K, V> {
-  V m(K a);
-}
-abstract class B<T1, T2> extends A<T2, T1> {
-}
-class C implements B<int, String> {
-  int m(String a) {}
-}
+library
+  definingUnit
+    classes
+      abstract class A @15
+        typeParameters
+          covariant K @17
+            defaultType: dynamic
+          covariant V @20
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+        methods
+          abstract m @29
+            parameters
+              requiredPositional a @33
+                type: K
+            returnType: V
+      abstract class B @54
+        typeParameters
+          covariant T1 @56
+            defaultType: dynamic
+          covariant T2 @60
+            defaultType: dynamic
+        supertype: A<T2, T1>
+        constructors
+          synthetic @-1
+      class C @91
+        interfaces
+          B<int, String>
+        constructors
+          synthetic @-1
+        methods
+          m @123
+            parameters
+              requiredPositional a @125
+                type: String
+            returnType: int
 ''');
   }
 
@@ -2661,13 +5947,24 @@
 }
 ''');
     checkElementText(library, r'''
-import 'package:test/other.dart';
-class A1 {
-  int _foo() {}
-}
-class A2 extends A1 {
-  int _foo() {}
-}
+library
+  imports
+    package:test/other.dart
+  definingUnit
+    classes
+      class A1 @27
+        constructors
+          synthetic @-1
+        methods
+          _foo @38
+            returnType: int
+      class A2 @59
+        supertype: A1
+        constructors
+          synthetic @-1
+        methods
+          _foo @77
+            returnType: int
 ''');
   }
 
@@ -2681,13 +5978,30 @@
 }
 ''');
     checkElementText(library, r'''
-class A {
-  String m(int a) {}
-}
-class B extends Object with A {
-  synthetic B();
-  String m(int a) {}
-}
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          synthetic @-1
+        methods
+          m @19
+            parameters
+              requiredPositional a @25
+                type: int
+            returnType: String
+      class B @39
+        supertype: Object
+        mixins
+          A
+        constructors
+          synthetic @-1
+        methods
+          m @67
+            parameters
+              requiredPositional a @69
+                type: int
+            returnType: String
 ''');
   }
 
@@ -2704,15 +6018,47 @@
 }
 ''');
     checkElementText(library, r'''
-class A<K, V> {
-  V m(K a) {}
-}
-class B<T> {
-  T m(int a) {}
-}
-class C extends A<int, String> implements B<String> {
-  String m(int a) {}
-}
+library
+  definingUnit
+    classes
+      class A @6
+        typeParameters
+          covariant K @8
+            defaultType: dynamic
+          covariant V @11
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+        methods
+          m @20
+            parameters
+              requiredPositional a @24
+                type: K
+            returnType: V
+      class B @38
+        typeParameters
+          covariant T @40
+            defaultType: dynamic
+        constructors
+          synthetic @-1
+        methods
+          m @49
+            parameters
+              requiredPositional a @55
+                type: int
+            returnType: T
+      class C @69
+        supertype: A<int, String>
+        interfaces
+          B<String>
+        constructors
+          synthetic @-1
+        methods
+          m @119
+            parameters
+              requiredPositional a @121
+                type: int
+            returnType: String
 ''');
   }
 
@@ -2729,15 +6075,39 @@
 }
 ''');
     checkElementText(library, r'''
-class A {
-  String m(int a) {}
-}
-class B {
-  String m(int a) {}
-}
-class C extends A implements B {
-  String m(int a) {}
-}
+library
+  definingUnit
+    classes
+      class A @6
+        constructors
+          synthetic @-1
+        methods
+          m @19
+            parameters
+              requiredPositional a @25
+                type: int
+            returnType: String
+      class B @39
+        constructors
+          synthetic @-1
+        methods
+          m @52
+            parameters
+              requiredPositional a @58
+                type: int
+            returnType: String
+      class C @72
+        supertype: A
+        interfaces
+          B
+        constructors
+          synthetic @-1
+        methods
+          m @101
+            parameters
+              requiredPositional a @103
+                type: int
+            returnType: String
 ''');
   }
 
diff --git a/pkg/analyzer_cli/lib/src/driver.dart b/pkg/analyzer_cli/lib/src/driver.dart
index ad49da2..523b2f2 100644
--- a/pkg/analyzer_cli/lib/src/driver.dart
+++ b/pkg/analyzer_cli/lib/src/driver.dart
@@ -242,7 +242,11 @@
           var content = file.readAsStringSync();
           var lineInfo = LineInfo.fromContent(content);
           var errors = analyzeAnalysisOptions(
-              file.createSource(), content, analysisDriver.sourceFactory);
+            file.createSource(),
+            content,
+            analysisDriver.sourceFactory,
+            analysisDriver.currentSession.analysisContext.contextRoot.root.path,
+          );
           formatter.formatErrors([
             ErrorsResultImpl(analysisDriver.currentSession, path, null,
                 lineInfo, false, errors)
diff --git a/pkg/compiler/lib/src/commandline_options.dart b/pkg/compiler/lib/src/commandline_options.dart
index 7e0a44d..33cc919 100644
--- a/pkg/compiler/lib/src/commandline_options.dart
+++ b/pkg/compiler/lib/src/commandline_options.dart
@@ -69,8 +69,6 @@
   static const String omitImplicitChecks = '--omit-implicit-checks';
   static const String omitAsCasts = '--omit-as-casts';
   static const String laxRuntimeTypeToString = '--lax-runtime-type-to-string';
-  static const String legacyJavaScript = '--legacy-javascript';
-  static const String noLegacyJavaScript = '--no-legacy-javascript';
 
   static const String platformBinaries = '--platform-binaries=.+';
 
@@ -169,6 +167,16 @@
 
   // Experimental flags.
   static const String resolveOnly = '--resolve-only';
+
+  // `--no-shipping` and `--canary` control sets of flags. For simplicity, these
+  // flags live in options.dart.
+  // Shipping features default to on, but can be disabled individually. All
+  // shipping features can be disabled with the the [noShipping] flag.
+  static const String noShipping = '--no-shipping';
+
+  // Canary features default to off, but can still be enabled individually. All
+  // canary features can be enabled with the [canary] flag.
+  static const String canary = '--canary';
 }
 
 class Option {
diff --git a/pkg/compiler/lib/src/dart2js.dart b/pkg/compiler/lib/src/dart2js.dart
index 43f80a5..bdbd352 100644
--- a/pkg/compiler/lib/src/dart2js.dart
+++ b/pkg/compiler/lib/src/dart2js.dart
@@ -13,7 +13,7 @@
 
 import '../compiler_new.dart' as api;
 import 'commandline_options.dart';
-import 'options.dart' show CompilerOptions;
+import 'options.dart' show CompilerOptions, FeatureOptions;
 import 'source_file_provider.dart';
 import 'util/command_line.dart';
 import 'util/util.dart' show stackTraceFilePrefix;
@@ -135,6 +135,7 @@
   Map<String, String> environment = new Map<String, String>();
   ReadStrategy readStrategy = ReadStrategy.fromDart;
   WriteStrategy writeStrategy = WriteStrategy.toJs;
+  FeatureOptions features = FeatureOptions();
 
   void passThrough(String argument) => options.add(argument);
   void ignoreOption(String argument) {}
@@ -564,8 +565,6 @@
     new OptionHandler(Flags.omitImplicitChecks, passThrough),
     new OptionHandler(Flags.omitAsCasts, passThrough),
     new OptionHandler(Flags.laxRuntimeTypeToString, passThrough),
-    new OptionHandler(Flags.legacyJavaScript, passThrough),
-    new OptionHandler(Flags.noLegacyJavaScript, passThrough),
     new OptionHandler(Flags.benchmarkingProduction, passThrough),
     new OptionHandler(Flags.benchmarkingExperiment, passThrough),
     new OptionHandler(Flags.soundNullSafety, setNullSafetyMode),
@@ -605,6 +604,18 @@
     new OptionHandler(Flags.experimentLateInstanceVariables, passThrough),
     new OptionHandler('${Flags.mergeFragmentsThreshold}=.+', passThrough),
 
+    // Wire up feature flags.
+    OptionHandler(Flags.canary, passThrough),
+    OptionHandler(Flags.noShipping, passThrough),
+    for (var feature in features.shipping)
+      OptionHandler('--${feature.flag}', passThrough),
+    for (var feature in features.shipping)
+      OptionHandler('--no-${feature.flag}', passThrough),
+    for (var feature in features.canary)
+      OptionHandler('--${feature.flag}', passThrough),
+    for (var feature in features.canary)
+      OptionHandler('--no-${feature.flag}', passThrough),
+
     // The following three options must come last.
     new OptionHandler('-D.+=.*|--define=.+=.*|--define', addInEnvironment,
         multipleArguments: true),
@@ -974,6 +985,7 @@
 
   diagnosticHandler.autoReadFileUri = true;
   CompilerOptions compilerOptions = CompilerOptions.parse(options,
+      featureOptions: features,
       librariesSpecificationUri: librariesSpecificationUri,
       platformBinaries: platformBinaries,
       onError: (String message) => fail(message),
diff --git a/pkg/compiler/lib/src/js_emitter/startup_emitter/fragment_emitter.dart b/pkg/compiler/lib/src/js_emitter/startup_emitter/fragment_emitter.dart
index bea472a..6590471 100644
--- a/pkg/compiler/lib/src/js_emitter/startup_emitter/fragment_emitter.dart
+++ b/pkg/compiler/lib/src/js_emitter/startup_emitter/fragment_emitter.dart
@@ -1042,7 +1042,7 @@
       // to `inherit(P.Object, null)` in the generated code. See if we can
       // remove that.
 
-      if (_options.legacyJavaScript) {
+      if (_options.features.legacyJavaScript.isEnabled) {
         // IE11 might require us to set 'constructor' but we aren't 100% sure.
         properties
             .add(js.Property(js.string("constructor"), classReference(cls)));
@@ -1870,7 +1870,7 @@
 
     globals.add(js.Property(
         js.string(ARRAY_RTI_PROPERTY),
-        _options.legacyJavaScript
+        _options.features.legacyJavaScript.isEnabled
             ? js.js(
                 r'typeof Symbol == "function" && typeof Symbol() == "symbol"'
                 r'    ? Symbol("$ti")'
diff --git a/pkg/compiler/lib/src/options.dart b/pkg/compiler/lib/src/options.dart
index 1133c6d..e309a00 100644
--- a/pkg/compiler/lib/src/options.dart
+++ b/pkg/compiler/lib/src/options.dart
@@ -15,6 +15,67 @@
   sound,
 }
 
+enum FeatureStatus {
+  shipping,
+  canary,
+}
+
+/// A [FeatureOption] is both a set of flags and an option. By default, creating
+/// a [FeatureOption] will create two flags, [--$flag] and [--no-$flag]. The
+/// default behavior for a [FeatureOption] in the [canary] set is to be
+/// disabled by default unless explicity enabled or [--canary] is passed.
+/// When the [FeatureOption] is moved to [staging], the behavior flips, and by
+/// default it is enabled unless explicitly disabled or [--no-shipping] is
+/// passed. The [isNegativeFlag] bool flips things around so while in [canary]
+/// the [FeatureOption] is enabled unless explicitly disabled, and while in
+/// [staging] it is disabled unless explicitly enabled.
+class FeatureOption {
+  final String flag;
+  final bool isNegativeFlag;
+  bool _state;
+  bool get isEnabled => _state;
+  bool get isDisabled => !isEnabled;
+  void set state(bool value) {
+    assert(_state == null);
+    _state = value;
+  }
+
+  FeatureOption(this.flag, {this.isNegativeFlag = false});
+}
+
+/// A class to simplify management of features which will end up being enabled
+/// by default. New features should be added as properties, and then to the
+/// [canary] list. Features in [canary] default to disabled unless they are
+/// explicitly enabled or unless `--canary` is passed on the commandline. When
+/// a feature is ready to ship, it should be moved to the [shipping] list,
+/// whereupon it will immediately default to enabled but can still be disabled.
+/// Once a feature is shipped, it can be deleted from this class entirely.
+class FeatureOptions {
+  /// Whether to restrict the generated JavaScript to features that work on the
+  /// oldest supported versions of JavaScript. This currently means IE11. If
+  /// `true`, the generated code runs on the legacy JavaScript platform. If
+  /// `false`, the code will fail on the legacy JavaScript platform.
+  FeatureOption legacyJavaScript =
+      FeatureOption('legacy-javascript', isNegativeFlag: true);
+
+  /// [FeatureOption]s which default to enabled.
+  List<FeatureOption> shipping;
+
+  /// [FeatureOption]s which default to disabled.
+  List<FeatureOption> canary;
+
+  // Initialize feature lists.
+  FeatureOptions() {
+    shipping = [];
+    canary = [legacyJavaScript];
+  }
+
+  void parse(List<String> options) {
+    _extractFeatures(options, shipping, FeatureStatus.shipping);
+    _extractFeatures(options, canary, FeatureStatus.canary);
+  }
+}
+
 /// Options used for controlling diagnostic messages.
 abstract class DiagnosticOptions {
   const DiagnosticOptions();
@@ -310,14 +371,6 @@
   /// `Object.runtimeType`.
   bool laxRuntimeTypeToString = false;
 
-  /// Whether to restrict the generated JavaScript to features that work on the
-  /// oldest supported versions of JavaScript. This currently means IE11. If
-  /// `true`, the generated code runs on the legacy JavaScript platform. If
-  /// `false`, the code will fail on the legacy JavaScript platform.
-  bool legacyJavaScript = true; // default value.
-  bool _legacyJavaScript = false;
-  bool _noLegacyJavaScript = false;
-
   /// What should the compiler do with parameter type assertions.
   ///
   /// This is an internal configuration option derived from other flags.
@@ -449,16 +502,21 @@
   /// Verbosity level used for filtering messages during compilation.
   fe.Verbosity verbosity = fe.Verbosity.all;
 
+  FeatureOptions features;
+
   // -------------------------------------------------
   // Options for deprecated features
   // -------------------------------------------------
 
   /// Create an options object by parsing flags from [options].
   static CompilerOptions parse(List<String> options,
-      {Uri librariesSpecificationUri,
+      {FeatureOptions featureOptions,
+      Uri librariesSpecificationUri,
       Uri platformBinaries,
       void Function(String) onError,
       void Function(String) onWarning}) {
+    if (featureOptions == null) featureOptions = FeatureOptions();
+    featureOptions.parse(options);
     Map<fe.ExperimentalFlag, bool> explicitExperimentalFlags =
         _extractExperiments(options, onError: onError, onWarning: onWarning);
 
@@ -466,7 +524,7 @@
     // for compiling user code vs. the sdk. To simplify things, we prebuild the
     // sdk with the correct flags.
     platformBinaries ??= fe.computePlatformBinariesLocation();
-    return new CompilerOptions()
+    return CompilerOptions()
       ..librariesSpecificationUri = librariesSpecificationUri
       ..allowMockCompilation = _hasOption(options, Flags.allowMockCompilation)
       ..benchmarkingProduction =
@@ -533,8 +591,6 @@
       ..omitAsCasts = _hasOption(options, Flags.omitAsCasts)
       ..laxRuntimeTypeToString =
           _hasOption(options, Flags.laxRuntimeTypeToString)
-      .._legacyJavaScript = _hasOption(options, Flags.legacyJavaScript)
-      .._noLegacyJavaScript = _hasOption(options, Flags.noLegacyJavaScript)
       ..testMode = _hasOption(options, Flags.testMode)
       ..trustPrimitives = _hasOption(options, Flags.trustPrimitives)
       ..useContentSecurityPolicy =
@@ -573,7 +629,8 @@
       ..verbosity = fe.Verbosity.parseArgument(
           _extractStringOption(
               options, '${Flags.verbosity}=', fe.Verbosity.defaultValue),
-          onError: onError);
+          onError: onError)
+      ..features = featureOptions;
   }
 
   void validate() {
@@ -594,10 +651,6 @@
         equalMaps(experimentalFlags, fe.defaultExperimentalFlags)) {
       throw new ArgumentError("Missing required ${Flags.platformBinaries}");
     }
-    if (_legacyJavaScript && _noLegacyJavaScript) {
-      throw ArgumentError("'${Flags.legacyJavaScript}' incompatible with "
-          "'${Flags.noLegacyJavaScript}'");
-    }
     if (_soundNullSafety && _noSoundNullSafety) {
       throw ArgumentError("'${Flags.soundNullSafety}' incompatible with "
           "'${Flags.noSoundNullSafety}'");
@@ -624,9 +677,6 @@
       useContentSecurityPolicy = true;
     }
 
-    if (_noLegacyJavaScript) legacyJavaScript = false;
-    if (_legacyJavaScript) legacyJavaScript = true;
-
     if (_soundNullSafety) nullSafetyMode = NullSafetyMode.sound;
     if (_noSoundNullSafety) nullSafetyMode = NullSafetyMode.unsound;
 
@@ -792,4 +842,25 @@
       onError: onError, onWarning: onWarning);
 }
 
+void _extractFeatures(
+    List<String> options, List<FeatureOption> features, FeatureStatus status) {
+  bool hasCanaryFlag = _hasOption(options, Flags.canary);
+  bool hasNoShippingFlag = _hasOption(options, Flags.noShipping);
+  for (var feature in features) {
+    String featureFlag = feature.flag;
+    String enableFeatureFlag = '--${featureFlag}';
+    String disableFeatureFlag = '--no-$featureFlag';
+    bool enableFeature = _hasOption(options, enableFeatureFlag);
+    bool disableFeature = _hasOption(options, disableFeatureFlag);
+    if (enableFeature && disableFeature) {
+      throw ArgumentError("'$enableFeatureFlag' incompatible with "
+          "'$disableFeatureFlag'");
+    }
+    bool globalEnable = hasCanaryFlag ||
+        (status == FeatureStatus.shipping && !hasNoShippingFlag);
+    globalEnable = feature.isNegativeFlag ? !globalEnable : globalEnable;
+    feature.state = (enableFeature || globalEnable) && !disableFeature;
+  }
+}
+
 const String _UNDETERMINED_BUILD_ID = "build number could not be determined";
diff --git a/pkg/compiler/lib/src/ssa/builder_kernel.dart b/pkg/compiler/lib/src/ssa/builder_kernel.dart
index c7bb93e..20a3676 100644
--- a/pkg/compiler/lib/src/ssa/builder_kernel.dart
+++ b/pkg/compiler/lib/src/ssa/builder_kernel.dart
@@ -369,7 +369,7 @@
       case 'LEGACY':
         return options.useLegacySubtyping;
       case 'LEGACY_JAVASCRIPT':
-        return options.legacyJavaScript;
+        return options.features.legacyJavaScript.isEnabled;
       case 'PRINT_LEGACY_STARS':
         return options.printLegacyStars;
       default:
diff --git a/pkg/compiler/test/end_to_end/feature_options_test.dart b/pkg/compiler/test/end_to_end/feature_options_test.dart
new file mode 100644
index 0000000..3481941
--- /dev/null
+++ b/pkg/compiler/test/end_to_end/feature_options_test.dart
@@ -0,0 +1,141 @@
+// Copyright (c) 2021, 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.
+
+// @dart = 2.7
+
+// Test the command line options of dart2js.
+
+import 'package:expect/expect.dart';
+
+import 'package:compiler/src/commandline_options.dart';
+import 'package:compiler/src/options.dart' show FeatureOptions, FeatureOption;
+
+class TestFeatureOptions extends FeatureOptions {
+  FeatureOption sf1 = FeatureOption('sf1');
+  FeatureOption sf2 = FeatureOption('sf2');
+  FeatureOption noSf3 = FeatureOption('sf3', isNegativeFlag: true);
+  FeatureOption noSf4 = FeatureOption('sf4', isNegativeFlag: true);
+  FeatureOption cf1 = FeatureOption('cf1');
+  FeatureOption cf2 = FeatureOption('cf2');
+  FeatureOption noCf3 = FeatureOption('cf3', isNegativeFlag: true);
+  FeatureOption noCf4 = FeatureOption('cf4', isNegativeFlag: true);
+
+  @override
+  List<FeatureOption> shipping;
+
+  @override
+  List<FeatureOption> canary;
+
+  // Initialize feature lists.
+  TestFeatureOptions() {
+    shipping = [sf1, sf2, noSf3, noSf4];
+    canary = [cf1, cf2, noCf3, noCf4];
+  }
+}
+
+TestFeatureOptions test(List<String> flags) {
+  var tfo = TestFeatureOptions();
+  tfo.parse(flags);
+  return tfo;
+}
+
+void testShipping() {
+  var tfo = test([]);
+  Expect.isTrue(tfo.sf1.isEnabled);
+  Expect.isTrue(tfo.sf2.isEnabled);
+  Expect.isTrue(tfo.noSf3.isDisabled);
+  Expect.isTrue(tfo.noSf4.isDisabled);
+  Expect.isTrue(tfo.cf1.isDisabled);
+  Expect.isTrue(tfo.cf2.isDisabled);
+  Expect.isTrue(tfo.noCf3.isEnabled);
+  Expect.isTrue(tfo.noCf4.isEnabled);
+}
+
+void testNoShipping() {
+  var tfo = test([Flags.noShipping]);
+  Expect.isTrue(tfo.sf1.isDisabled);
+  Expect.isTrue(tfo.sf2.isDisabled);
+  Expect.isTrue(tfo.noSf3.isEnabled);
+  Expect.isTrue(tfo.noSf4.isEnabled);
+  Expect.isTrue(tfo.cf1.isDisabled);
+  Expect.isTrue(tfo.cf2.isDisabled);
+  Expect.isTrue(tfo.noCf3.isEnabled);
+  Expect.isTrue(tfo.noCf4.isEnabled);
+}
+
+void testCanary() {
+  var tfo = test([Flags.canary]);
+  Expect.isTrue(tfo.sf1.isEnabled);
+  Expect.isTrue(tfo.sf2.isEnabled);
+  Expect.isTrue(tfo.noSf3.isDisabled);
+  Expect.isTrue(tfo.noSf4.isDisabled);
+  Expect.isTrue(tfo.cf1.isEnabled);
+  Expect.isTrue(tfo.cf2.isEnabled);
+  Expect.isTrue(tfo.noCf3.isDisabled);
+  Expect.isTrue(tfo.noCf4.isDisabled);
+}
+
+void testShippingDisabled() {
+  var tfo = test(['--no-sf2', '--sf3']);
+  Expect.isTrue(tfo.sf1.isEnabled);
+  Expect.isTrue(tfo.sf2.isDisabled);
+  Expect.isTrue(tfo.noSf3.isEnabled);
+  Expect.isTrue(tfo.noSf4.isDisabled);
+  Expect.isTrue(tfo.cf1.isDisabled);
+  Expect.isTrue(tfo.cf2.isDisabled);
+  Expect.isTrue(tfo.noCf3.isEnabled);
+  Expect.isTrue(tfo.noCf4.isEnabled);
+}
+
+void testCanaryDisabled() {
+  var tfo = test([Flags.canary, '--no-sf2', '--sf3', '--no-cf1', '--cf3']);
+  Expect.isTrue(tfo.sf1.isEnabled);
+  Expect.isTrue(tfo.sf2.isDisabled);
+  Expect.isTrue(tfo.noSf3.isEnabled);
+  Expect.isTrue(tfo.noSf4.isDisabled);
+  Expect.isTrue(tfo.cf1.isDisabled);
+  Expect.isTrue(tfo.cf2.isEnabled);
+  Expect.isTrue(tfo.noCf3.isEnabled);
+  Expect.isTrue(tfo.noCf4.isDisabled);
+}
+
+void testNoShippingEnabled() {
+  var tfo = test([Flags.noShipping, '--sf1', '--no-sf3', '--cf2', '--no-cf3']);
+  Expect.isTrue(tfo.sf1.isEnabled);
+  Expect.isTrue(tfo.sf2.isDisabled);
+  Expect.isTrue(tfo.noSf3.isDisabled);
+  Expect.isTrue(tfo.noSf4.isEnabled);
+  Expect.isTrue(tfo.cf1.isDisabled);
+  Expect.isTrue(tfo.cf2.isEnabled);
+  Expect.isTrue(tfo.noCf3.isDisabled);
+  Expect.isTrue(tfo.noCf4.isEnabled);
+}
+
+void testNoCanaryEnabled() {
+  var tfo = test(['--cf1', '--no-cf3']);
+  Expect.isTrue(tfo.sf1.isEnabled);
+  Expect.isTrue(tfo.sf2.isEnabled);
+  Expect.isTrue(tfo.noSf3.isDisabled);
+  Expect.isTrue(tfo.noSf4.isDisabled);
+  Expect.isTrue(tfo.cf1.isEnabled);
+  Expect.isTrue(tfo.cf2.isDisabled);
+  Expect.isTrue(tfo.noCf3.isDisabled);
+  Expect.isTrue(tfo.noCf4.isEnabled);
+}
+
+void testFlagCollision() {
+  Expect.throwsArgumentError(() => test(['--cf1', '--no-cf1']));
+}
+
+void main() {
+  testShipping();
+  testNoShipping();
+  testCanary();
+  testShippingDisabled();
+  testCanaryDisabled();
+  testNoShippingEnabled();
+  testNoCanaryEnabled();
+  testNoShippingEnabled();
+  testFlagCollision();
+}
diff --git a/pkg/dev_compiler/lib/src/compiler/shared_command.dart b/pkg/dev_compiler/lib/src/compiler/shared_command.dart
index c0a9c24..cf67f91 100644
--- a/pkg/dev_compiler/lib/src/compiler/shared_command.dart
+++ b/pkg/dev_compiler/lib/src/compiler/shared_command.dart
@@ -92,13 +92,6 @@
   /// the browser.
   final bool emitDebugMetadata;
 
-  /// Whether to emit the debug symbols
-  ///
-  /// Debugger uses this information about to construct mapping between
-  /// dart and js objecys that otherwise requires expensive communication with
-  /// the browser.
-  final bool emitDebugSymbols;
-
   final Map<String, String> summaryModules;
 
   final List<ModuleFormat> moduleFormats;
@@ -130,7 +123,6 @@
       this.enableAsserts = true,
       this.replCompile = false,
       this.emitDebugMetadata = false,
-      this.emitDebugSymbols = false,
       this.emitFullCompiledKernel = false,
       this.summaryModules = const {},
       this.moduleFormats = const [],
@@ -148,7 +140,6 @@
             enableAsserts: args['enable-asserts'] as bool,
             replCompile: args['repl-compile'] as bool,
             emitDebugMetadata: args['experimental-emit-debug-metadata'] as bool,
-            emitDebugSymbols: args['emit-debug-symbols'] as bool,
             emitFullCompiledKernel:
                 args['experimental-output-compiled-kernel'] as bool,
             summaryModules:
@@ -204,11 +195,6 @@
               'Output a metadata file for debug tools next to the .js output.',
           defaultsTo: false,
           hide: true)
-      ..addFlag('emit-debug-symbols',
-          help: 'Experimental option for compiler development.\n'
-              'Output a symbols file for debug tools next to the .js output.',
-          defaultsTo: false,
-          hide: true)
       ..addFlag('experimental-output-compiled-kernel',
           help: 'Experimental option for compiler development.\n'
               'Output a full kernel file for currently compiled module next to '
diff --git a/pkg/dev_compiler/lib/src/kernel/command.dart b/pkg/dev_compiler/lib/src/kernel/command.dart
index 2bac27d..8ddd4dc 100644
--- a/pkg/dev_compiler/lib/src/kernel/command.dart
+++ b/pkg/dev_compiler/lib/src/kernel/command.dart
@@ -11,7 +11,6 @@
 import 'package:args/args.dart';
 import 'package:build_integration/file_system/multi_root.dart';
 import 'package:cli_util/cli_util.dart' show getSdkPath;
-import 'package:dev_compiler/src/kernel/module_symbols.dart';
 import 'package:front_end/src/api_unstable/ddc.dart' as fe;
 import 'package:kernel/binary/ast_to_binary.dart' as kernel show BinaryPrinter;
 import 'package:kernel/class_hierarchy.dart';
@@ -444,13 +443,11 @@
         buildSourceMap: options.sourceMap,
         inlineSourceMap: options.inlineSourceMap,
         emitDebugMetadata: options.emitDebugMetadata,
-        emitDebugSymbols: options.emitDebugSymbols,
         jsUrl: p.toUri(output).toString(),
         mapUrl: mapUrl,
         fullDillUri: fullDillUri,
         customScheme: options.multiRootScheme,
         multiRootOutputPath: multiRootOutputPath,
-        compiler: compiler,
         component: compiledLibraries);
 
     outFiles.add(file.writeAsString(jsCode.code));
@@ -462,11 +459,6 @@
       outFiles.add(
           File('$output.metadata').writeAsString(json.encode(jsCode.metadata)));
     }
-
-    if (jsCode.symbols != null) {
-      outFiles.add(
-          File('$output.symbols').writeAsString(json.encode(jsCode.symbols)));
-    }
   }
 
   if (recordUsedInputs) {
@@ -643,13 +635,7 @@
   /// see: https://goto.google.com/dart-web-debugger-metadata
   final ModuleMetadata metadata;
 
-  /// Module debug symbols.
-  ///
-  /// The [symbols] is a contract between compiler and the debugger,
-  /// helping the debugger map between dart and JS objects.
-  final ModuleSymbols symbols;
-
-  JSCode(this.code, this.sourceMap, {this.symbols, this.metadata});
+  JSCode(this.code, this.sourceMap, {this.metadata});
 }
 
 /// Converts [moduleTree] to [JSCode], using [format].
@@ -660,14 +646,12 @@
     {bool buildSourceMap = false,
     bool inlineSourceMap = false,
     bool emitDebugMetadata = false,
-    bool emitDebugSymbols = false,
     String jsUrl,
     String mapUrl,
     String fullDillUri,
     String sourceMapBase,
     String customScheme,
     String multiRootOutputPath,
-    ProgramCompiler compiler,
     Component component}) {
   var opts = js_ast.JavaScriptPrintingOptions(
       allowKeywordsInProperties: true, allowSingleLineIfStatements: true);
@@ -682,8 +666,8 @@
   }
 
   var tree = transformModuleFormat(format, moduleTree);
-  var namer = js_ast.TemporaryNamer(tree);
-  tree.accept(js_ast.Printer(opts, printer, localNamer: namer));
+  tree.accept(
+      js_ast.Printer(opts, printer, localNamer: js_ast.TemporaryNamer(tree)));
 
   Map builtMap;
   if (buildSourceMap && sourceMap != null) {
@@ -726,15 +710,7 @@
       ? _emitMetadata(moduleTree, component, mapUrl, jsUrl, fullDillUri)
       : null;
 
-  var debugSymbols =
-      emitDebugSymbols ? _emitSymbols(compiler, component) : null;
-
-  return JSCode(text, builtMap, symbols: debugSymbols, metadata: debugMetadata);
-}
-
-ModuleSymbols _emitSymbols(ProgramCompiler compiler, Component component) {
-  // TODO(annagrin): collect module symbols.
-  return ModuleSymbols();
+  return JSCode(text, builtMap, metadata: debugMetadata);
 }
 
 ModuleMetadata _emitMetadata(js_ast.Program program, Component component,
diff --git a/pkg/dev_compiler/test/expression_compiler/expression_compiler_e2e_suite.dart b/pkg/dev_compiler/test/expression_compiler/expression_compiler_e2e_suite.dart
index 7300029..7f79898 100644
--- a/pkg/dev_compiler/test/expression_compiler/expression_compiler_e2e_suite.dart
+++ b/pkg/dev_compiler/test/expression_compiler/expression_compiler_e2e_suite.dart
@@ -152,10 +152,8 @@
       inlineSourceMap: true,
       buildSourceMap: true,
       emitDebugMetadata: true,
-      emitDebugSymbols: true,
       jsUrl: '$output',
       mapUrl: '$output.map',
-      compiler: kernel2jsCompiler,
       component: component,
     );
     metadata = code.metadata;
diff --git a/pkg/dev_compiler/test/expression_compiler/expression_compiler_worker_test.dart b/pkg/dev_compiler/test/expression_compiler/expression_compiler_worker_test.dart
index 7141bb4..8cda5d8 100644
--- a/pkg/dev_compiler/test/expression_compiler/expression_compiler_worker_test.dart
+++ b/pkg/dev_compiler/test/expression_compiler/expression_compiler_worker_test.dart
@@ -769,7 +769,6 @@
       config.testModule3.jsPath.toFilePath(),
       '--source-map',
       '--experimental-emit-debug-metadata',
-      '--emit-debug-symbols',
       '--experimental-output-compiled-kernel',
       '--dart-sdk-summary',
       config.sdkSummaryPath.path,
@@ -798,7 +797,6 @@
       config.testModule2.jsPath.toFilePath(),
       '--source-map',
       '--experimental-emit-debug-metadata',
-      '--emit-debug-symbols',
       '--experimental-output-compiled-kernel',
       '--dart-sdk-summary',
       config.sdkSummaryPath.path,
@@ -829,7 +827,6 @@
       config.testModule.jsPath.toFilePath(),
       '--source-map',
       '--experimental-emit-debug-metadata',
-      '--emit-debug-symbols',
       '--experimental-output-compiled-kernel',
       '--dart-sdk-summary',
       config.sdkSummaryPath.path,
@@ -862,7 +859,6 @@
       config.mainModule.jsPath.toFilePath(),
       '--source-map',
       '--experimental-emit-debug-metadata',
-      '--emit-debug-symbols',
       '--experimental-output-compiled-kernel',
       '--dart-sdk-summary',
       config.sdkSummaryPath.path,
diff --git a/pkg/frontend_server/lib/frontend_server.dart b/pkg/frontend_server/lib/frontend_server.dart
index 4ba6641..5881625 100644
--- a/pkg/frontend_server/lib/frontend_server.dart
+++ b/pkg/frontend_server/lib/frontend_server.dart
@@ -168,8 +168,6 @@
   ..addFlag('experimental-emit-debug-metadata',
       help: 'Emit module and library metadata for the debugger',
       defaultsTo: false)
-  ..addFlag('emit-debug-symbols',
-      help: 'Emit debug symbols for the debugger', defaultsTo: false)
   ..addOption('dartdevc-module-format',
       help: 'The module format to use on for the dartdevc compiler',
       defaultsTo: 'amd')
@@ -326,8 +324,7 @@
       this.unsafePackageSerialization,
       this.incrementalSerialization: true,
       this.useDebuggerModuleNames: false,
-      this.emitDebugMetadata: false,
-      this.emitDebugSymbols: false}) {
+      this.emitDebugMetadata: false}) {
     _outputStream ??= stdout;
     printerFactory ??= new BinaryPrinterFactory();
   }
@@ -338,7 +335,6 @@
   bool incrementalSerialization;
   bool useDebuggerModuleNames;
   bool emitDebugMetadata;
-  bool emitDebugSymbols;
   bool _printIncrementalDependencies;
 
   CompilerOptions _compilerOptions;
@@ -629,7 +625,6 @@
     final File manifestFile = File('$filename.json');
     final File sourceMapsFile = File('$filename.map');
     final File metadataFile = File('$filename.metadata');
-    final File symbolsFile = File('$filename.symbols');
     if (!sourceFile.parent.existsSync()) {
       sourceFile.parent.createSync(recursive: true);
     }
@@ -637,7 +632,6 @@
         component, strongComponents, fileSystemScheme, packageConfig,
         useDebuggerModuleNames: useDebuggerModuleNames,
         emitDebugMetadata: emitDebugMetadata,
-        emitDebugSymbols: emitDebugSymbols,
         moduleFormat: moduleFormat,
         soundNullSafety: soundNullSafety);
     final sourceFileSink = sourceFile.openWrite();
@@ -645,7 +639,6 @@
     final sourceMapsFileSink = sourceMapsFile.openWrite();
     final metadataFileSink =
         emitDebugMetadata ? metadataFile.openWrite() : null;
-    final symbolsFileSink = emitDebugSymbols ? symbolsFile.openWrite() : null;
     final kernel2JsCompilers = await _bundler.compile(
         results.classHierarchy,
         results.coreTypes,
@@ -653,8 +646,7 @@
         sourceFileSink,
         manifestFileSink,
         sourceMapsFileSink,
-        metadataFileSink,
-        symbolsFileSink);
+        metadataFileSink);
     cachedProgramCompilers.addAll(kernel2JsCompilers);
     await Future.wait([
       sourceFileSink.close(),
@@ -1354,8 +1346,7 @@
       unsafePackageSerialization: options["unsafe-package-serialization"],
       incrementalSerialization: options["incremental-serialization"],
       useDebuggerModuleNames: options['debugger-module-names'],
-      emitDebugMetadata: options['experimental-emit-debug-metadata'],
-      emitDebugSymbols: options['emit-debug-symbols']);
+      emitDebugMetadata: options['experimental-emit-debug-metadata']);
 
   if (options.rest.isNotEmpty) {
     return await compiler.compile(options.rest[0], options,
diff --git a/pkg/frontend_server/lib/src/javascript_bundle.dart b/pkg/frontend_server/lib/src/javascript_bundle.dart
index a989fb1..9829c57 100644
--- a/pkg/frontend_server/lib/src/javascript_bundle.dart
+++ b/pkg/frontend_server/lib/src/javascript_bundle.dart
@@ -27,7 +27,6 @@
       this._fileSystemScheme, this._packageConfig,
       {this.useDebuggerModuleNames = false,
       this.emitDebugMetadata = false,
-      this.emitDebugSymbols = false,
       this.soundNullSafety = false,
       String moduleFormat})
       : _moduleFormat = parseModuleFormat(moduleFormat ?? 'amd') {
@@ -64,7 +63,6 @@
   final PackageConfig _packageConfig;
   final bool useDebuggerModuleNames;
   final bool emitDebugMetadata;
-  final bool emitDebugSymbols;
   final ModuleFormat _moduleFormat;
   final bool soundNullSafety;
 
@@ -76,19 +74,16 @@
 
   /// Compile each component into a single JavaScript module.
   Future<Map<String, ProgramCompiler>> compile(
-    ClassHierarchy classHierarchy,
-    CoreTypes coreTypes,
-    Set<Library> loadedLibraries,
-    IOSink codeSink,
-    IOSink manifestSink,
-    IOSink sourceMapsSink,
-    IOSink metadataSink,
-    IOSink symbolsSink,
-  ) async {
+      ClassHierarchy classHierarchy,
+      CoreTypes coreTypes,
+      Set<Library> loadedLibraries,
+      IOSink codeSink,
+      IOSink manifestSink,
+      IOSink sourceMapsSink,
+      IOSink metadataSink) async {
     var codeOffset = 0;
     var sourceMapOffset = 0;
     var metadataOffset = 0;
-    var symbolsOffset = 0;
     final manifest = <String, Map<String, List<int>>>{};
     final Set<Uri> visited = <Uri>{};
     final Map<String, ProgramCompiler> kernel2JsCompilers = {};
@@ -140,7 +135,6 @@
           sourceMap: true,
           summarizeApi: false,
           emitDebugMetadata: emitDebugMetadata,
-          emitDebugSymbols: emitDebugSymbols,
           moduleName: moduleName,
           soundNullSafety: soundNullSafety,
         ),
@@ -151,6 +145,10 @@
 
       final jsModule = compiler.emitModule(summaryComponent);
 
+      // TODO:(annagrin): create symbol tables and pass to expression compiler
+      // so it can map dart symbols to js symbols
+      // [issue 40273](https://github.com/dart-lang/sdk/issues/40273)
+
       // Save program compiler to reuse for expression evaluation.
       kernel2JsCompilers[moduleName] = compiler;
 
@@ -170,29 +168,22 @@
         inlineSourceMap: true,
         buildSourceMap: true,
         emitDebugMetadata: emitDebugMetadata,
-        emitDebugSymbols: emitDebugSymbols,
         jsUrl: '$moduleUrl.lib.js',
         mapUrl: '$moduleUrl.lib.js.map',
         sourceMapBase: sourceMapBase,
         customScheme: _fileSystemScheme,
-        compiler: compiler,
         component: summaryComponent,
       );
       final codeBytes = utf8.encode(code.code);
       final sourceMapBytes = utf8.encode(json.encode(code.sourceMap));
       final metadataBytes =
           emitDebugMetadata ? utf8.encode(json.encode(code.metadata)) : null;
-      final symbolsBytes =
-          emitDebugSymbols ? utf8.encode(json.encode(code.symbols)) : null;
 
       codeSink.add(codeBytes);
       sourceMapsSink.add(sourceMapBytes);
       if (emitDebugMetadata) {
         metadataSink.add(metadataBytes);
       }
-      if (emitDebugSymbols) {
-        symbolsSink.add(symbolsBytes);
-      }
       final String moduleKey = _moduleImportForSummary[moduleUri];
       manifest[moduleKey] = {
         'code': <int>[codeOffset, codeOffset += codeBytes.length],
@@ -205,11 +196,6 @@
             metadataOffset,
             metadataOffset += metadataBytes.length
           ],
-        if (emitDebugSymbols)
-          'symbols': <int>[
-            symbolsOffset,
-            symbolsOffset += symbolsBytes.length,
-          ],
       };
     }
     manifestSink.add(utf8.encode(json.encode(manifest)));
diff --git a/pkg/frontend_server/test/frontend_server_test.dart b/pkg/frontend_server/test/frontend_server_test.dart
index 8205380..ee69ecb 100644
--- a/pkg/frontend_server/test/frontend_server_test.dart
+++ b/pkg/frontend_server/test/frontend_server_test.dart
@@ -1979,14 +1979,12 @@
       var manifestFile = File('${dillFile.path}.json');
       var sourceMapsFile = File('${dillFile.path}.map');
       var metadataFile = File('${dillFile.path}.metadata');
-      var symbolsFile = File('${dillFile.path}.symbols');
 
       expect(dillFile.existsSync(), false);
       expect(sourceFile.existsSync(), false);
       expect(manifestFile.existsSync(), false);
       expect(sourceMapsFile.existsSync(), false);
       expect(metadataFile.existsSync(), false);
-      expect(symbolsFile.existsSync(), false);
 
       final List<String> args = <String>[
         '--sdk-root=${sdkRoot.toFilePath()}',
@@ -1996,7 +1994,6 @@
         '--target=dartdevc',
         '--packages=${package_config.path}',
         '--experimental-emit-debug-metadata',
-        '--emit-debug-symbols',
       ];
 
       final StreamController<List<int>> streamController =
@@ -2025,7 +2022,6 @@
         expect(manifestFile.existsSync(), equals(true));
         expect(sourceMapsFile.existsSync(), equals(true));
         expect(metadataFile.existsSync(), equals(true));
-        expect(symbolsFile.existsSync(), equals(true));
         expect(result.filename, dillFile.path);
         streamController.add('accept\n'.codeUnits);
         outputParser.expectSources = false;
diff --git a/pkg/frontend_server/test/src/javascript_bundle_test.dart b/pkg/frontend_server/test/src/javascript_bundle_test.dart
index d927f82..898cbcc 100644
--- a/pkg/frontend_server/test/src/javascript_bundle_test.dart
+++ b/pkg/frontend_server/test/src/javascript_bundle_test.dart
@@ -111,19 +111,16 @@
     final codeSink = _MemorySink();
     final sourcemapSink = _MemorySink();
     final metadataSink = _MemorySink();
-    final symbolsSink = _MemorySink();
     final coreTypes = CoreTypes(testComponent);
 
     final compilers = await javaScriptBundler.compile(
-      ClassHierarchy(testComponent, coreTypes),
-      coreTypes,
-      {},
-      codeSink,
-      manifestSink,
-      sourcemapSink,
-      metadataSink,
-      symbolsSink,
-    );
+        ClassHierarchy(testComponent, coreTypes),
+        coreTypes,
+        {},
+        codeSink,
+        manifestSink,
+        sourcemapSink,
+        metadataSink);
 
     final Map manifest = json.decode(utf8.decode(manifestSink.buffer));
     final String code = utf8.decode(codeSink.buffer);
@@ -165,19 +162,10 @@
     final codeSink = _MemorySink();
     final sourcemapSink = _MemorySink();
     final metadataSink = _MemorySink();
-    final symbolsSink = _MemorySink();
     final coreTypes = CoreTypes(testComponent);
 
-    await javaScriptBundler.compile(
-      ClassHierarchy(testComponent, coreTypes),
-      coreTypes,
-      {},
-      codeSink,
-      manifestSink,
-      sourcemapSink,
-      metadataSink,
-      symbolsSink,
-    );
+    await javaScriptBundler.compile(ClassHierarchy(testComponent, coreTypes),
+        coreTypes, {}, codeSink, manifestSink, sourcemapSink, metadataSink);
 
     final Map manifest = json.decode(utf8.decode(manifestSink.buffer));
     final String code = utf8.decode(codeSink.buffer);
@@ -216,19 +204,10 @@
     final codeSink = _MemorySink();
     final sourcemapSink = _MemorySink();
     final metadataSink = _MemorySink();
-    final symbolsSink = _MemorySink();
     final coreTypes = CoreTypes(testComponent);
 
-    await javaScriptBundler.compile(
-      ClassHierarchy(testComponent, coreTypes),
-      coreTypes,
-      {},
-      codeSink,
-      manifestSink,
-      sourcemapSink,
-      metadataSink,
-      symbolsSink,
-    );
+    await javaScriptBundler.compile(ClassHierarchy(testComponent, coreTypes),
+        coreTypes, {}, codeSink, manifestSink, sourcemapSink, metadataSink);
 
     final Map manifest = json.decode(utf8.decode(manifestSink.buffer));
     final String code = utf8.decode(codeSink.buffer);
@@ -277,19 +256,10 @@
     final codeSink = _MemorySink();
     final sourcemapSink = _MemorySink();
     final metadataSink = _MemorySink();
-    final symbolsSink = _MemorySink();
     final coreTypes = CoreTypes(testComponent);
 
-    javaScriptBundler.compile(
-      ClassHierarchy(testComponent, coreTypes),
-      coreTypes,
-      {},
-      codeSink,
-      manifestSink,
-      sourcemapSink,
-      metadataSink,
-      symbolsSink,
-    );
+    javaScriptBundler.compile(ClassHierarchy(testComponent, coreTypes),
+        coreTypes, {}, codeSink, manifestSink, sourcemapSink, metadataSink);
 
     final code = utf8.decode(codeSink.buffer);
     final manifest = json.decode(utf8.decode(manifestSink.buffer));
diff --git a/runtime/vm/compiler/ffi/native_calling_convention_test.cc b/runtime/vm/compiler/ffi/native_calling_convention_test.cc
index e9308b9..e1fdfb0 100644
--- a/runtime/vm/compiler/ffi/native_calling_convention_test.cc
+++ b/runtime/vm/compiler/ffi/native_calling_convention_test.cc
@@ -584,6 +584,37 @@
 #endif
 }
 
+// MacOS arm64 alignment of 12-byte homogenous float structs.
+//
+// http://dartbug.com/46305
+//
+// See the *.expect in ./unit_tests for this behavior.
+UNIT_TEST_CASE_WITH_ZONE(NativeCallingConvention_struct12bytesFloatx6) {
+  const auto& float_type = *new (Z) NativePrimitiveType(kFloat);
+  const auto& int64_type = *new (Z) NativePrimitiveType(kInt64);
+
+  auto& member_types = *new (Z) NativeTypes(Z, 3);
+  member_types.Add(&float_type);
+  member_types.Add(&float_type);
+  member_types.Add(&float_type);
+  const auto& struct_type = NativeStructType::FromNativeTypes(Z, member_types);
+
+#if defined(TARGET_ARCH_ARM64) &&                                              \
+    (defined(TARGET_OS_MACOS) || defined(TARGET_OS_MACOS_IOS))
+  EXPECT_EQ(4, struct_type.AlignmentInBytesStack());
+#endif
+
+  auto& arguments = *new (Z) NativeTypes(Z, 6);
+  arguments.Add(&struct_type);
+  arguments.Add(&struct_type);
+  arguments.Add(&struct_type);
+  arguments.Add(&struct_type);
+  arguments.Add(&struct_type);
+  arguments.Add(&struct_type);
+
+  RunSignatureTest(Z, "struct12bytesFloatx6", arguments, int64_type);
+}
+
 }  // namespace ffi
 }  // namespace compiler
 }  // namespace dart
diff --git a/runtime/vm/compiler/ffi/native_type.cc b/runtime/vm/compiler/ffi/native_type.cc
index b78b206..686816c 100644
--- a/runtime/vm/compiler/ffi/native_type.cc
+++ b/runtime/vm/compiler/ffi/native_type.cc
@@ -174,9 +174,10 @@
   // If this struct is passed on the stack, it should be aligned to the largest
   // alignment of its members when passing those members on the stack.
   intptr_t alignment_stack = kAtLeast1ByteAligned;
-#if defined(TARGET_OS_MACOS_IOS) && defined(TARGET_ARCH_ARM64)
-  // On iOS64 stack values can be less aligned than wordSize, which deviates
-  // from the arm64 ABI.
+#if (defined(TARGET_OS_MACOS_IOS) || defined(TARGET_OS_MACOS)) &&              \
+    defined(TARGET_ARCH_ARM64)
+  // On iOS64 and MacOS arm64 stack values can be less aligned than wordSize,
+  // which deviates from the arm64 ABI.
   ASSERT(CallingConventions::kArgumentStackAlignment == kAlignedToValueSize);
   // Because the arm64 ABI aligns primitives to word size on the stack, every
   // struct will be automatically aligned to word size. iOS64 does not align
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx10/arm64_macos.expect b/runtime/vm/compiler/ffi/unit_tests/floatx10/arm64_macos.expect
index 8f237e3..0a25996 100644
--- a/runtime/vm/compiler/ffi/unit_tests/floatx10/arm64_macos.expect
+++ b/runtime/vm/compiler/ffi/unit_tests/floatx10/arm64_macos.expect
@@ -7,6 +7,6 @@
 v6 float
 v7 float
 S+0 float
-S+8 float
+S+4 float
 =>
 v0 float
diff --git a/runtime/vm/compiler/ffi/unit_tests/int8x10/arm64_macos.expect b/runtime/vm/compiler/ffi/unit_tests/int8x10/arm64_macos.expect
index 04f72e5f..8efadc4 100644
--- a/runtime/vm/compiler/ffi/unit_tests/int8x10/arm64_macos.expect
+++ b/runtime/vm/compiler/ffi/unit_tests/int8x10/arm64_macos.expect
@@ -7,6 +7,6 @@
 r6 int8
 r7 int8
 S+0 int8
-S+8 int8
+S+1 int8
 =>
 r0 int8
diff --git a/runtime/vm/compiler/ffi/unit_tests/struct12bytesFloatx6/arm64_android.expect b/runtime/vm/compiler/ffi/unit_tests/struct12bytesFloatx6/arm64_android.expect
new file mode 100644
index 0000000..e14f6b1
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/struct12bytesFloatx6/arm64_android.expect
@@ -0,0 +1,8 @@
+M(v0 float, v1 float, v2 float) Struct(size: 12)
+M(v3 float, v4 float, v5 float) Struct(size: 12)
+S+0 Struct(size: 12)
+S+16 Struct(size: 12)
+S+32 Struct(size: 12)
+S+48 Struct(size: 12)
+=>
+r0 int64
diff --git a/runtime/vm/compiler/ffi/unit_tests/struct12bytesFloatx6/arm64_ios.expect b/runtime/vm/compiler/ffi/unit_tests/struct12bytesFloatx6/arm64_ios.expect
new file mode 100644
index 0000000..1ea815b
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/struct12bytesFloatx6/arm64_ios.expect
@@ -0,0 +1,8 @@
+M(v0 float, v1 float, v2 float) Struct(size: 12)
+M(v3 float, v4 float, v5 float) Struct(size: 12)
+S+0 Struct(size: 12)
+S+12 Struct(size: 12)
+S+24 Struct(size: 12)
+S+36 Struct(size: 12)
+=>
+r0 int64
diff --git a/runtime/vm/compiler/ffi/unit_tests/struct12bytesFloatx6/arm64_linux.expect b/runtime/vm/compiler/ffi/unit_tests/struct12bytesFloatx6/arm64_linux.expect
new file mode 100644
index 0000000..e14f6b1
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/struct12bytesFloatx6/arm64_linux.expect
@@ -0,0 +1,8 @@
+M(v0 float, v1 float, v2 float) Struct(size: 12)
+M(v3 float, v4 float, v5 float) Struct(size: 12)
+S+0 Struct(size: 12)
+S+16 Struct(size: 12)
+S+32 Struct(size: 12)
+S+48 Struct(size: 12)
+=>
+r0 int64
diff --git a/runtime/vm/compiler/ffi/unit_tests/struct12bytesFloatx6/arm64_macos.expect b/runtime/vm/compiler/ffi/unit_tests/struct12bytesFloatx6/arm64_macos.expect
new file mode 100644
index 0000000..1ea815b
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/struct12bytesFloatx6/arm64_macos.expect
@@ -0,0 +1,8 @@
+M(v0 float, v1 float, v2 float) Struct(size: 12)
+M(v3 float, v4 float, v5 float) Struct(size: 12)
+S+0 Struct(size: 12)
+S+12 Struct(size: 12)
+S+24 Struct(size: 12)
+S+36 Struct(size: 12)
+=>
+r0 int64
diff --git a/runtime/vm/compiler/ffi/unit_tests/struct12bytesFloatx6/arm_android.expect b/runtime/vm/compiler/ffi/unit_tests/struct12bytesFloatx6/arm_android.expect
new file mode 100644
index 0000000..3cd3492
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/struct12bytesFloatx6/arm_android.expect
@@ -0,0 +1,8 @@
+M(r0 int32, r1 int32, r2 int32) Struct(size: 12)
+M(r3 int32, S+0 int32, S+4 int32) Struct(size: 12)
+M(S+8 int32, S+12 int32, S+16 int32) Struct(size: 12)
+M(S+20 int32, S+24 int32, S+28 int32) Struct(size: 12)
+M(S+32 int32, S+36 int32, S+40 int32) Struct(size: 12)
+M(S+44 int32, S+48 int32, S+52 int32) Struct(size: 12)
+=>
+(r0, r1) int64
diff --git a/runtime/vm/compiler/ffi/unit_tests/struct12bytesFloatx6/arm_ios.expect b/runtime/vm/compiler/ffi/unit_tests/struct12bytesFloatx6/arm_ios.expect
new file mode 100644
index 0000000..d5dfa4d
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/struct12bytesFloatx6/arm_ios.expect
@@ -0,0 +1,8 @@
+M(s0 float, s1 float, s2 float) Struct(size: 12)
+M(s3 float, s4 float, s5 float) Struct(size: 12)
+M(s6 float, s7 float, s8 float) Struct(size: 12)
+M(s9 float, s10 float, s11 float) Struct(size: 12)
+M(s12 float, s13 float, s14 float) Struct(size: 12)
+S+0 Struct(size: 12)
+=>
+(r0, r1) int64
diff --git a/runtime/vm/compiler/ffi/unit_tests/struct12bytesFloatx6/arm_linux.expect b/runtime/vm/compiler/ffi/unit_tests/struct12bytesFloatx6/arm_linux.expect
new file mode 100644
index 0000000..d5dfa4d
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/struct12bytesFloatx6/arm_linux.expect
@@ -0,0 +1,8 @@
+M(s0 float, s1 float, s2 float) Struct(size: 12)
+M(s3 float, s4 float, s5 float) Struct(size: 12)
+M(s6 float, s7 float, s8 float) Struct(size: 12)
+M(s9 float, s10 float, s11 float) Struct(size: 12)
+M(s12 float, s13 float, s14 float) Struct(size: 12)
+S+0 Struct(size: 12)
+=>
+(r0, r1) int64
diff --git a/runtime/vm/compiler/ffi/unit_tests/struct12bytesFloatx6/ia32_android.expect b/runtime/vm/compiler/ffi/unit_tests/struct12bytesFloatx6/ia32_android.expect
new file mode 100644
index 0000000..ca9d8e9
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/struct12bytesFloatx6/ia32_android.expect
@@ -0,0 +1,8 @@
+S+0 Struct(size: 12)
+S+12 Struct(size: 12)
+S+24 Struct(size: 12)
+S+36 Struct(size: 12)
+S+48 Struct(size: 12)
+S+60 Struct(size: 12)
+=>
+(eax, edx) int64
diff --git a/runtime/vm/compiler/ffi/unit_tests/struct12bytesFloatx6/ia32_linux.expect b/runtime/vm/compiler/ffi/unit_tests/struct12bytesFloatx6/ia32_linux.expect
new file mode 100644
index 0000000..ca9d8e9
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/struct12bytesFloatx6/ia32_linux.expect
@@ -0,0 +1,8 @@
+S+0 Struct(size: 12)
+S+12 Struct(size: 12)
+S+24 Struct(size: 12)
+S+36 Struct(size: 12)
+S+48 Struct(size: 12)
+S+60 Struct(size: 12)
+=>
+(eax, edx) int64
diff --git a/runtime/vm/compiler/ffi/unit_tests/struct12bytesFloatx6/ia32_win.expect b/runtime/vm/compiler/ffi/unit_tests/struct12bytesFloatx6/ia32_win.expect
new file mode 100644
index 0000000..ca9d8e9
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/struct12bytesFloatx6/ia32_win.expect
@@ -0,0 +1,8 @@
+S+0 Struct(size: 12)
+S+12 Struct(size: 12)
+S+24 Struct(size: 12)
+S+36 Struct(size: 12)
+S+48 Struct(size: 12)
+S+60 Struct(size: 12)
+=>
+(eax, edx) int64
diff --git a/runtime/vm/compiler/ffi/unit_tests/struct12bytesFloatx6/x64_ios.expect b/runtime/vm/compiler/ffi/unit_tests/struct12bytesFloatx6/x64_ios.expect
new file mode 100644
index 0000000..c4a4cc2
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/struct12bytesFloatx6/x64_ios.expect
@@ -0,0 +1,8 @@
+M(xmm0 double, xmm1 double) Struct(size: 12)
+M(xmm2 double, xmm3 double) Struct(size: 12)
+M(xmm4 double, xmm5 double) Struct(size: 12)
+M(xmm6 double, xmm7 double) Struct(size: 12)
+S+0 Struct(size: 12)
+S+16 Struct(size: 12)
+=>
+rax int64
diff --git a/runtime/vm/compiler/ffi/unit_tests/struct12bytesFloatx6/x64_linux.expect b/runtime/vm/compiler/ffi/unit_tests/struct12bytesFloatx6/x64_linux.expect
new file mode 100644
index 0000000..c4a4cc2
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/struct12bytesFloatx6/x64_linux.expect
@@ -0,0 +1,8 @@
+M(xmm0 double, xmm1 double) Struct(size: 12)
+M(xmm2 double, xmm3 double) Struct(size: 12)
+M(xmm4 double, xmm5 double) Struct(size: 12)
+M(xmm6 double, xmm7 double) Struct(size: 12)
+S+0 Struct(size: 12)
+S+16 Struct(size: 12)
+=>
+rax int64
diff --git a/runtime/vm/compiler/ffi/unit_tests/struct12bytesFloatx6/x64_macos.expect b/runtime/vm/compiler/ffi/unit_tests/struct12bytesFloatx6/x64_macos.expect
new file mode 100644
index 0000000..c4a4cc2
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/struct12bytesFloatx6/x64_macos.expect
@@ -0,0 +1,8 @@
+M(xmm0 double, xmm1 double) Struct(size: 12)
+M(xmm2 double, xmm3 double) Struct(size: 12)
+M(xmm4 double, xmm5 double) Struct(size: 12)
+M(xmm6 double, xmm7 double) Struct(size: 12)
+S+0 Struct(size: 12)
+S+16 Struct(size: 12)
+=>
+rax int64
diff --git a/runtime/vm/compiler/ffi/unit_tests/struct12bytesFloatx6/x64_win.expect b/runtime/vm/compiler/ffi/unit_tests/struct12bytesFloatx6/x64_win.expect
new file mode 100644
index 0000000..06b823f
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/struct12bytesFloatx6/x64_win.expect
@@ -0,0 +1,8 @@
+P(rcx int64) Struct(size: 12)
+P(rdx int64) Struct(size: 12)
+P(r8 int64) Struct(size: 12)
+P(r9 int64) Struct(size: 12)
+P(S+0 int64) Struct(size: 12)
+P(S+8 int64) Struct(size: 12)
+=>
+rax int64
diff --git a/runtime/vm/compiler/ffi/unit_tests/struct16bytesHomogenousx10/arm64_macos.expect b/runtime/vm/compiler/ffi/unit_tests/struct16bytesHomogenousx10/arm64_macos.expect
index 123cea6..da95987 100644
--- a/runtime/vm/compiler/ffi/unit_tests/struct16bytesHomogenousx10/arm64_macos.expect
+++ b/runtime/vm/compiler/ffi/unit_tests/struct16bytesHomogenousx10/arm64_macos.expect
@@ -10,6 +10,6 @@
 S+112 Struct(size: 16)
 S+128 float
 r0 int8
-S+136 Struct(size: 16)
+S+132 Struct(size: 16)
 =>
 M(v0 float, v1 float, v2 float, v3 float) Struct(size: 16)
diff --git a/runtime/vm/compiler/ffi/unit_tests/struct_floatarray/arm64_macos.expect b/runtime/vm/compiler/ffi/unit_tests/struct_floatarray/arm64_macos.expect
index 728e016..21f9c56 100644
--- a/runtime/vm/compiler/ffi/unit_tests/struct_floatarray/arm64_macos.expect
+++ b/runtime/vm/compiler/ffi/unit_tests/struct_floatarray/arm64_macos.expect
@@ -1,3 +1,3 @@
-Struct(size: 16, field alignment: 4, stack alignment: 8, members: {
-  0: Array(element type: Struct(size: 8, field alignment: 4, stack alignment: 8, members: {0: Array(element type: float, length: 2)}), length: 2)
+Struct(size: 16, field alignment: 4, stack alignment: 4, members: {
+  0: Array(element type: Struct(size: 8, field alignment: 4, stack alignment: 4, members: {0: Array(element type: float, length: 2)}), length: 2)
 })
diff --git a/runtime/vm/compiler/ffi/unit_tests/struct_floatx4/arm64_macos.expect b/runtime/vm/compiler/ffi/unit_tests/struct_floatx4/arm64_macos.expect
index c065867..a753409 100644
--- a/runtime/vm/compiler/ffi/unit_tests/struct_floatx4/arm64_macos.expect
+++ b/runtime/vm/compiler/ffi/unit_tests/struct_floatx4/arm64_macos.expect
@@ -1,4 +1,4 @@
-Struct(size: 16, field alignment: 4, stack alignment: 8, members: {
+Struct(size: 16, field alignment: 4, stack alignment: 4, members: {
   0: float,
   4: float,
   8: float,
diff --git a/runtime/vm/constants_arm64.h b/runtime/vm/constants_arm64.h
index 28cbf1d..9b93a3a 100644
--- a/runtime/vm/constants_arm64.h
+++ b/runtime/vm/constants_arm64.h
@@ -142,7 +142,7 @@
 const Register CALLEE_SAVED_TEMP = R19;
 const Register CALLEE_SAVED_TEMP2 = R20;
 const Register HEAP_BITS = R28;  // write_barrier_mask << 32 | heap_base >> 32
-const Register NULL_REG = R22;  // Caches NullObject() value.
+const Register NULL_REG = R22;   // Caches NullObject() value.
 
 // ABI for catch-clause entry point.
 const Register kExceptionObjectReg = R0;
@@ -433,7 +433,7 @@
       kAlignedToWordSize;
 
   // How stack arguments are aligned.
-#if defined(TARGET_OS_MACOS_IOS)
+#if defined(TARGET_OS_MACOS_IOS) || defined(TARGET_OS_MACOS)
   // > Function arguments may consume slots on the stack that are not multiples
   // > of 8 bytes.
   // https://developer.apple.com/documentation/xcode/writing_arm64_code_for_apple_platforms
diff --git a/runtime/vm/elf.cc b/runtime/vm/elf.cc
index 7f17df5..ab90490 100644
--- a/runtime/vm/elf.cc
+++ b/runtime/vm/elf.cc
@@ -14,6 +14,8 @@
 
 namespace dart {
 
+#if defined(DART_PRECOMPILER)
+
 // A wrapper around BaseWriteStream that provides methods useful for
 // writing ELF files (e.g., using ELF definitions of data sizes).
 class ElfWriteStream : public ValueObject {
@@ -1574,4 +1576,6 @@
   }
 }
 
+#endif  // DART_PRECOMPILER
+
 }  // namespace dart
diff --git a/runtime/vm/elf.h b/runtime/vm/elf.h
index fb27dc2..9c7cbf5 100644
--- a/runtime/vm/elf.h
+++ b/runtime/vm/elf.h
@@ -13,6 +13,8 @@
 
 namespace dart {
 
+#if defined(DART_PRECOMPILER)
+
 class Dwarf;
 class ElfWriteStream;
 class Section;
@@ -149,6 +151,8 @@
   intptr_t program_table_file_size_ = -1;
 };
 
+#endif  // DART_PRECOMPILER
+
 }  // namespace dart
 
 #endif  // RUNTIME_VM_ELF_H_
diff --git a/runtime/vm/image_snapshot.h b/runtime/vm/image_snapshot.h
index 42f96e9..df09407 100644
--- a/runtime/vm/image_snapshot.h
+++ b/runtime/vm/image_snapshot.h
@@ -27,6 +27,7 @@
 // Forward declarations.
 class Code;
 class Dwarf;
+class Elf;
 class Instructions;
 class Object;
 
@@ -240,9 +241,13 @@
   // Text sections contain objects (even in bare instructions mode) wrapped
   // in an Image object, and for now we also align them to the same page
   // size assumed by Elf objects.
+  static constexpr intptr_t kTextAlignment = 16 * KB;
+#if defined(DART_PRECOMPILER)
+  static_assert(kTextAlignment == Elf::kPageSize,
+                "Page alignment must be consistent with max object alignment");
   static_assert(Elf::kPageSize >= kMaxObjectAlignment,
                 "Page alignment must be consistent with max object alignment");
-  static constexpr intptr_t kTextAlignment = Elf::kPageSize;
+#endif
 
   void ResetOffsets() {
     next_data_offset_ = Image::kHeaderSize;
diff --git a/runtime/vm/isolate.cc b/runtime/vm/isolate.cc
index bb3fea0..183dabc 100644
--- a/runtime/vm/isolate.cc
+++ b/runtime/vm/isolate.cc
@@ -50,7 +50,6 @@
 #include "vm/thread_interrupter.h"
 #include "vm/thread_registry.h"
 #include "vm/timeline.h"
-#include "vm/timeline_analysis.h"
 #include "vm/visitor.h"
 
 #if !defined(DART_PRECOMPILED_RUNTIME)
@@ -61,7 +60,6 @@
 namespace dart {
 
 DECLARE_FLAG(bool, print_metrics);
-DECLARE_FLAG(bool, timing);
 DECLARE_FLAG(bool, trace_service);
 DECLARE_FLAG(bool, warn_on_pause_with_no_debugger);
 
@@ -2416,19 +2414,6 @@
   // Fail fast if anybody tries to post any more messages to this isolate.
   delete message_handler();
   set_message_handler(nullptr);
-#if defined(SUPPORT_TIMELINE)
-  // Before analyzing the isolate's timeline blocks- reclaim all cached
-  // blocks.
-  Timeline::ReclaimCachedBlocksFromThreads();
-#endif
-
-// Dump all timing data for the isolate.
-#if defined(SUPPORT_TIMELINE) && !defined(PRODUCT)
-  if (FLAG_timing) {
-    TimelinePauseTrace tpt;
-    tpt.Print();
-  }
-#endif  // !PRODUCT
 
 #if !defined(PRODUCT)
   if (FLAG_dump_megamorphic_stats) {
diff --git a/runtime/vm/timeline.cc b/runtime/vm/timeline.cc
index 5e18589..74d2ef4 100644
--- a/runtime/vm/timeline.cc
+++ b/runtime/vm/timeline.cc
@@ -32,14 +32,6 @@
     false,
     "Record the timeline to the platform's tracing service if there is one");
 DEFINE_FLAG(bool, trace_timeline, false, "Trace timeline backend");
-DEFINE_FLAG(bool,
-            trace_timeline_analysis,
-            false,
-            "Trace timeline analysis backend");
-DEFINE_FLAG(bool,
-            timing,
-            false,
-            "Dump isolate timing information from timeline.");
 DEFINE_FLAG(charp,
             timeline_dir,
             NULL,
@@ -102,7 +94,7 @@
 static TimelineEventRecorder* CreateTimelineRecorder() {
   // Some flags require that we use the endless recorder.
   const bool use_endless_recorder =
-      (FLAG_timeline_dir != NULL) || FLAG_timing || FLAG_complete_timeline;
+      (FLAG_timeline_dir != NULL) || FLAG_complete_timeline;
 
   const bool use_startup_recorder = FLAG_startup_timeline;
   const bool use_systrace_recorder = FLAG_systrace_timeline;
@@ -190,7 +182,7 @@
 
 // Returns true if |streams| contains |stream| or "all". Not case sensitive.
 static bool HasStream(MallocGrowableArray<char*>* streams, const char* stream) {
-  if ((FLAG_timeline_dir != NULL) || FLAG_timing || FLAG_complete_timeline ||
+  if ((FLAG_timeline_dir != NULL) || FLAG_complete_timeline ||
       FLAG_startup_timeline) {
     return true;
   }
diff --git a/runtime/vm/timeline_analysis.cc b/runtime/vm/timeline_analysis.cc
deleted file mode 100644
index 10e9c47..0000000
--- a/runtime/vm/timeline_analysis.cc
+++ /dev/null
@@ -1,577 +0,0 @@
-// Copyright (c) 2015, 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.
-
-#include "vm/timeline_analysis.h"
-
-#include "vm/flags.h"
-#include "vm/isolate.h"
-#include "vm/log.h"
-#include "vm/os_thread.h"
-
-namespace dart {
-
-#ifndef PRODUCT
-
-DECLARE_FLAG(bool, trace_timeline_analysis);
-DECLARE_FLAG(bool, timing);
-
-TimelineAnalysisThread::TimelineAnalysisThread(ThreadId id) : id_(id) {}
-
-TimelineAnalysisThread::~TimelineAnalysisThread() {}
-
-void TimelineAnalysisThread::AddBlock(TimelineEventBlock* block) {
-  blocks_.Add(block);
-}
-
-static int CompareBlocksLowerTimeBound(TimelineEventBlock* const* a,
-                                       TimelineEventBlock* const* b) {
-  ASSERT(a != NULL);
-  ASSERT(*a != NULL);
-  ASSERT(b != NULL);
-  ASSERT(*b != NULL);
-  return (*a)->LowerTimeBound() - (*b)->LowerTimeBound();
-}
-
-void TimelineAnalysisThread::Finalize() {
-  blocks_.Sort(CompareBlocksLowerTimeBound);
-  if (FLAG_trace_timeline_analysis) {
-    THR_Print("Thread %" Pd " has %" Pd " blocks\n",
-              OSThread::ThreadIdToIntPtr(id_), blocks_.length());
-  }
-}
-
-TimelineAnalysisThreadEventIterator::TimelineAnalysisThreadEventIterator(
-    TimelineAnalysisThread* thread) {
-  Reset(thread);
-}
-
-TimelineAnalysisThreadEventIterator::~TimelineAnalysisThreadEventIterator() {
-  Reset(NULL);
-}
-
-void TimelineAnalysisThreadEventIterator::Reset(
-    TimelineAnalysisThread* thread) {
-  current_ = NULL;
-  thread_ = thread;
-  block_cursor_ = 0;
-  event_cursor_ = 0;
-  if (thread_ == NULL) {
-    return;
-  }
-  if (thread_->NumBlocks() == 0) {
-    return;
-  }
-  TimelineEventBlock* block = thread_->At(block_cursor_);
-  ASSERT(!block->IsEmpty());
-  current_ = block->At(event_cursor_++);
-}
-
-bool TimelineAnalysisThreadEventIterator::HasNext() const {
-  return current_ != NULL;
-}
-
-TimelineEvent* TimelineAnalysisThreadEventIterator::Next() {
-  ASSERT(current_ != NULL);
-  TimelineEvent* r = current_;
-  current_ = NULL;
-
-  TimelineEventBlock* block = thread_->At(block_cursor_);
-  if (event_cursor_ == block->length()) {
-    // Reached the end of this block, move to the next.
-    block_cursor_++;
-    if (block_cursor_ == thread_->NumBlocks()) {
-      // Exhausted our supply of blocks.
-      return r;
-    }
-    // Grab next block.
-    block = thread_->At(block_cursor_);
-    event_cursor_ = 0;
-    ASSERT(!block->IsEmpty());
-  }
-  current_ = block->At(event_cursor_++);
-  return r;
-}
-
-TimelineAnalysis::TimelineAnalysis(Zone* zone,
-                                   Isolate* isolate,
-                                   TimelineEventRecorder* recorder)
-    : zone_(zone),
-      isolate_(isolate),
-      recorder_(recorder),
-      has_error_(false),
-      error_msg_(NULL) {
-  ASSERT(zone_ != NULL);
-  ASSERT(isolate_ != NULL);
-  ASSERT(recorder_ != NULL);
-}
-
-TimelineAnalysis::~TimelineAnalysis() {}
-
-void TimelineAnalysis::BuildThreads() {
-  DiscoverThreads();
-  FinalizeThreads();
-}
-
-TimelineAnalysisThread* TimelineAnalysis::GetThread(ThreadId tid) {
-  // Linear lookup because we expect N (# of threads in an isolate) to be small.
-  for (intptr_t i = 0; i < threads_.length(); i++) {
-    TimelineAnalysisThread* thread = threads_.At(i);
-    ASSERT(thread != NULL);
-    if (thread->id() == tid) {
-      return thread;
-    }
-  }
-  return NULL;
-}
-
-TimelineAnalysisThread* TimelineAnalysis::GetOrAddThread(ThreadId tid) {
-  TimelineAnalysisThread* thread = GetThread(tid);
-  if (thread != NULL) {
-    return thread;
-  }
-  // New thread.
-  thread = new TimelineAnalysisThread(tid);
-  threads_.Add(thread);
-  return thread;
-}
-
-void TimelineAnalysis::DiscoverThreads() {
-  TimelineEventBlockIterator it(recorder_);
-  while (it.HasNext()) {
-    TimelineEventBlock* block = it.Next();
-    ASSERT(block != NULL);
-    if (block->IsEmpty()) {
-      // Skip empty blocks.
-      continue;
-    }
-    if (!block->CheckBlock()) {
-      if (FLAG_trace_timeline_analysis) {
-        THR_Print("DiscoverThreads block %" Pd
-                  " "
-                  "violates invariants.\n",
-                  block->block_index());
-      }
-      SetError("Block %" Pd
-               " violates invariants. See "
-               "TimelineEventBlock::CheckBlock",
-               block->block_index());
-      return;
-    }
-    TimelineAnalysisThread* thread = GetOrAddThread(block->thread_id());
-    ASSERT(thread != NULL);
-    thread->AddBlock(block);
-  }
-}
-
-void TimelineAnalysis::FinalizeThreads() {
-  for (intptr_t i = 0; i < threads_.length(); i++) {
-    TimelineAnalysisThread* thread = threads_.At(i);
-    ASSERT(thread != NULL);
-    thread->Finalize();
-  }
-}
-
-void TimelineAnalysis::SetError(const char* format, ...) {
-  ASSERT(!has_error_);
-  ASSERT(error_msg_ == NULL);
-  has_error_ = true;
-  va_list args;
-  va_start(args, format);
-  error_msg_ = zone_->VPrint(format, args);
-  ASSERT(error_msg_ != NULL);
-  if (FLAG_trace_timeline_analysis) {
-    OS::PrintErr("TimelineAnalysis error = %s\n", error_msg_);
-  }
-}
-
-TimelineLabelPauseInfo::TimelineLabelPauseInfo(const char* name)
-    : name_(name),
-      inclusive_micros_(0),
-      exclusive_micros_(0),
-      max_inclusive_micros_(0),
-      max_exclusive_micros_(0) {
-  ASSERT(name_ != NULL);
-}
-
-void TimelineLabelPauseInfo::OnPush(int64_t micros, bool already_on_stack) {
-  UpdateInclusiveMicros(micros, already_on_stack);
-}
-
-void TimelineLabelPauseInfo::OnPop(int64_t exclusive_micros) {
-  UpdateExclusiveMicros(exclusive_micros);
-}
-
-void TimelineLabelPauseInfo::OnBeginPop(int64_t inclusive_micros,
-                                        int64_t exclusive_micros,
-                                        bool already_on_stack) {
-  UpdateInclusiveMicros(inclusive_micros, already_on_stack);
-  UpdateExclusiveMicros(exclusive_micros);
-}
-
-void TimelineLabelPauseInfo::UpdateInclusiveMicros(int64_t inclusive_micros,
-                                                   bool already_on_stack) {
-  if (!already_on_stack) {
-    // Only adjust inclusive counts if we aren't already on the stack.
-    add_inclusive_micros(inclusive_micros);
-    if (inclusive_micros > max_inclusive_micros_) {
-      max_inclusive_micros_ = inclusive_micros;
-    }
-  }
-}
-
-void TimelineLabelPauseInfo::UpdateExclusiveMicros(int64_t exclusive_micros) {
-  add_exclusive_micros(exclusive_micros);
-  if (exclusive_micros > max_exclusive_micros_) {
-    max_exclusive_micros_ = exclusive_micros;
-  }
-}
-
-void TimelineLabelPauseInfo::Aggregate(
-    const TimelineLabelPauseInfo* thread_pause_info) {
-  ASSERT(thread_pause_info != NULL);
-  inclusive_micros_ += thread_pause_info->inclusive_micros_;
-  exclusive_micros_ += thread_pause_info->exclusive_micros_;
-  if (max_inclusive_micros_ < thread_pause_info->max_inclusive_micros_) {
-    max_inclusive_micros_ = thread_pause_info->max_inclusive_micros_;
-  }
-  if (max_exclusive_micros_ < thread_pause_info->max_exclusive_micros_) {
-    max_exclusive_micros_ = thread_pause_info->max_exclusive_micros_;
-  }
-}
-
-TimelinePauses::TimelinePauses(Zone* zone,
-                               Isolate* isolate,
-                               TimelineEventRecorder* recorder)
-    : TimelineAnalysis(zone, isolate, recorder) {}
-
-void TimelinePauses::Setup() {
-  BuildThreads();
-}
-
-void TimelinePauses::CalculatePauseTimesForThread(ThreadId tid) {
-  if (has_error()) {
-    return;
-  }
-  TimelineAnalysisThread* thread = GetThread(tid);
-  if (thread == NULL) {
-    SetError("Thread %" Pd " does not exist.", OSThread::ThreadIdToIntPtr(tid));
-    return;
-  }
-  ProcessThread(thread);
-}
-
-TimelineLabelPauseInfo* TimelinePauses::GetLabelPauseInfo(
-    const char* name) const {
-  ASSERT(name != NULL);
-  // Linear lookup because we expect N (# of labels in an isolate) to be small.
-  for (intptr_t i = 0; i < labels_.length(); i++) {
-    TimelineLabelPauseInfo* label = labels_.At(i);
-    if (strcmp(label->name(), name) == 0) {
-      return label;
-    }
-  }
-  return NULL;
-}
-
-int64_t TimelinePauses::InclusiveTime(const char* name) const {
-  TimelineLabelPauseInfo* pause_info = GetLabelPauseInfo(name);
-  ASSERT(pause_info != NULL);
-  return pause_info->inclusive_micros();
-}
-
-int64_t TimelinePauses::ExclusiveTime(const char* name) const {
-  TimelineLabelPauseInfo* pause_info = GetLabelPauseInfo(name);
-  ASSERT(pause_info != NULL);
-  return pause_info->exclusive_micros();
-}
-
-int64_t TimelinePauses::MaxInclusiveTime(const char* name) const {
-  TimelineLabelPauseInfo* pause_info = GetLabelPauseInfo(name);
-  ASSERT(pause_info != NULL);
-  return pause_info->max_inclusive_micros();
-}
-
-int64_t TimelinePauses::MaxExclusiveTime(const char* name) const {
-  TimelineLabelPauseInfo* pause_info = GetLabelPauseInfo(name);
-  ASSERT(pause_info != NULL);
-  return pause_info->max_exclusive_micros();
-}
-
-void TimelinePauses::ProcessThread(TimelineAnalysisThread* thread) {
-  ASSERT(thread != NULL);
-  stack_.Clear();
-  labels_.Clear();
-
-  TimelineAnalysisThreadEventIterator it(thread);
-  if (FLAG_trace_timeline_analysis) {
-    THR_Print(">>> TimelinePauses::ProcessThread %" Pd "\n",
-              OSThread::ThreadIdToIntPtr(thread->id()));
-  }
-  intptr_t event_count = 0;
-  while (!has_error() && it.HasNext()) {
-    TimelineEvent* event = it.Next();
-    if (event->isolate_id() != isolate_->main_port()) {
-      // Skip events that do not belong to the isolate.
-      continue;
-    }
-    if (event->IsFinishedDuration()) {
-      int64_t start = event->TimeOrigin();
-      PopFinishedDurations(start);
-      if (!CheckStack(event)) {
-        SetError("Duration check fail.");
-        return;
-      }
-      event_count++;
-      Push(event);
-    } else if (event->IsBeginOrEnd()) {
-      event_count++;
-      if (event->IsBegin()) {
-        PopFinishedDurations(event->TimeOrigin());
-        Push(event);
-      } else {
-        ASSERT(event->IsEnd());
-        PopFinishedDurations(event->TimeOrigin());
-        PopBegin(event->label(), event->TimeOrigin());
-      }
-    } else {
-      // Skip other event kinds.
-    }
-  }
-  // Pop remaining duration stack.
-  PopFinishedDurations(kMaxInt64);
-  if (FLAG_trace_timeline_analysis) {
-    THR_Print("<<< TimelinePauses::ProcessThread %" Pd " had %" Pd " events\n",
-              OSThread::ThreadIdToIntPtr(thread->id()), event_count);
-  }
-}
-
-// Verify that |event| is contained within all parent events on the stack.
-bool TimelinePauses::CheckStack(TimelineEvent* event) {
-  ASSERT(event != NULL);
-  for (intptr_t i = 0; i < stack_.length(); i++) {
-    const StackItem& slot = stack_.At(i);
-    if (slot.event->IsDuration()) {
-      if (!slot.event->DurationContains(event)) {
-        return false;
-      }
-    } else {
-      ASSERT(slot.event->IsBegin());
-      if (slot.event->TimeOrigin() > event->TimeOrigin()) {
-        return false;
-      }
-    }
-  }
-  return true;
-}
-
-void TimelinePauses::PopFinishedDurations(int64_t start) {
-  while (stack_.length() > 0) {
-    const StackItem& top = stack_.Last();
-    if (top.event->IsDuration() && top.event->DurationFinishedBefore(start)) {
-      top.pause_info->OnPop(top.exclusive_micros);
-      // Top of stack completes before |start|.
-      stack_.RemoveLast();
-      if (FLAG_trace_timeline_analysis) {
-        THR_Print("Popping %s (%" Pd64 " <= %" Pd64 ")\n", top.event->label(),
-                  top.event->TimeEnd(), start);
-      }
-    } else {
-      return;
-    }
-  }
-}
-
-void TimelinePauses::PopBegin(const char* label, int64_t end) {
-  if (stack_.length() == 0) {
-    SetError("PopBegin(%s, ...) called with empty stack.", label);
-    return;
-  }
-  ASSERT(stack_.length() > 0);
-  const StackItem& top = stack_.Last();
-  const char* top_label = top.event->label();
-  const bool top_is_begin = top.event->IsBegin();
-  const int64_t start = top.event->TimeOrigin();
-  if (start > end) {
-    SetError("Bad time stamps for PopBegin(%s, ...) %" Pd64 " > %" Pd64 "",
-             label, start, end);
-    return;
-  }
-  const int64_t duration = end - start;
-  // Sanity checks.
-  if (strcmp(top_label, label) != 0) {
-    SetError("PopBegin(%s, ...) called with %s at the top of stack", label,
-             top.event->label());
-    return;
-  }
-  if (!top_is_begin) {
-    SetError("kEnd event not paired with kBegin event for label %s", label);
-    return;
-  }
-  // Pop this event.
-  // Add duration to exclusive micros.
-  if (FLAG_trace_timeline_analysis) {
-    THR_Print("Popping %s (%" Pd64 ")\n", top.event->label(), duration);
-  }
-  const int64_t exclusive_micros = top.exclusive_micros + duration;
-  stack_.RemoveLast();
-  top.pause_info->OnBeginPop(duration, exclusive_micros,
-                             IsLabelOnStack(top_label));
-  if (StackDepth() > 0) {
-    StackItem& top = GetStackTop();
-    // |top| is under the popped |event|'s shadow, adjust the exclusive micros.
-    top.exclusive_micros -= duration;
-  }
-}
-
-void TimelinePauses::Push(TimelineEvent* event) {
-  TimelineLabelPauseInfo* pause_info = GetOrAddLabelPauseInfo(event->label());
-  ASSERT(pause_info != NULL);
-  // |pause_info| will be running for |event->TimeDuration()|.
-  if (FLAG_trace_timeline_analysis) {
-    THR_Print("Pushing %s %" Pd64 " us\n", pause_info->name(),
-              event->TimeDuration());
-  }
-  if (event->IsDuration()) {
-    pause_info->OnPush(event->TimeDuration(), IsLabelOnStack(event->label()));
-    if (StackDepth() > 0) {
-      StackItem& top = GetStackTop();
-      // |top| is under |event|'s shadow, adjust the exclusive micros.
-      top.exclusive_micros -= event->TimeDuration();
-    }
-    // Push onto the stack.
-    StackItem item;
-    item.event = event;
-    item.pause_info = pause_info;
-    item.exclusive_micros = event->TimeDuration();
-    stack_.Add(item);
-  } else {
-    ASSERT(event->IsBegin());
-    pause_info->OnPush(0, IsLabelOnStack(event->label()));
-    // Push onto the stack.
-    StackItem item;
-    item.event = event;
-    item.pause_info = pause_info;
-    item.exclusive_micros = 0;
-    stack_.Add(item);
-  }
-}
-
-bool TimelinePauses::IsLabelOnStack(const char* label) const {
-  ASSERT(label != NULL);
-  for (intptr_t i = 0; i < stack_.length(); i++) {
-    const StackItem& slot = stack_.At(i);
-    if (strcmp(slot.event->label(), label) == 0) {
-      return true;
-    }
-  }
-  return false;
-}
-
-intptr_t TimelinePauses::StackDepth() const {
-  return stack_.length();
-}
-
-TimelinePauses::StackItem& TimelinePauses::GetStackTop() {
-  ASSERT(stack_.length() > 0);
-  return stack_.Last();
-}
-
-TimelineLabelPauseInfo* TimelinePauses::GetOrAddLabelPauseInfo(
-    const char* name) {
-  ASSERT(name != NULL);
-  TimelineLabelPauseInfo* pause_info = GetLabelPauseInfo(name);
-  if (pause_info != NULL) {
-    return pause_info;
-  }
-  // New label.
-  pause_info = new TimelineLabelPauseInfo(name);
-  labels_.Add(pause_info);
-  return pause_info;
-}
-
-TimelinePauseTrace::TimelinePauseTrace() {}
-
-TimelinePauseTrace::~TimelinePauseTrace() {}
-
-void TimelinePauseTrace::Print() {
-  Thread* thread = Thread::Current();
-  ASSERT(thread != NULL);
-  Isolate* isolate = thread->isolate();
-  ASSERT(isolate != NULL);
-  Zone* zone = thread->zone();
-  ASSERT(zone != NULL);
-  TimelineEventRecorder* recorder = Timeline::recorder();
-  ASSERT(recorder != NULL);
-  TimelinePauses pauses(zone, isolate, recorder);
-  pauses.Setup();
-
-  THR_Print("Timing for isolate (%" Pd64 ") '%s' (from %" Pd " threads)\n",
-            static_cast<int64_t>(isolate->main_port()), isolate->name(),
-            pauses.NumThreads());
-  THR_Print("\n");
-  for (intptr_t t_idx = 0; t_idx < pauses.NumThreads(); t_idx++) {
-    TimelineAnalysisThread* tat = pauses.At(t_idx);
-    ASSERT(tat != NULL);
-    pauses.CalculatePauseTimesForThread(tat->id());
-    THR_Print("Thread %" Pd " (%" Pd "):\n", t_idx,
-              OSThread::ThreadIdToIntPtr(tat->id()));
-    for (intptr_t j = 0; j < pauses.NumPauseInfos(); j++) {
-      const TimelineLabelPauseInfo* pause_info = pauses.PauseInfoAt(j);
-      ASSERT(pause_info != NULL);
-      Aggregate(pause_info);
-      PrintPauseInfo(pause_info);
-    }
-    THR_Print("\n");
-  }
-  THR_Print("Totals:\n");
-  for (intptr_t i = 0; i < isolate_labels_.length(); i++) {
-    TimelineLabelPauseInfo* pause_info = isolate_labels_.At(i);
-    ASSERT(pause_info != NULL);
-    PrintPauseInfo(pause_info);
-  }
-  THR_Print("\n");
-}
-
-TimelineLabelPauseInfo* TimelinePauseTrace::GetOrAddLabelPauseInfo(
-    const char* name) {
-  ASSERT(name != NULL);
-  // Linear lookup because we expect N (# of labels in an isolate) to be small.
-  for (intptr_t i = 0; i < isolate_labels_.length(); i++) {
-    TimelineLabelPauseInfo* label = isolate_labels_.At(i);
-    if (strcmp(label->name(), name) == 0) {
-      return label;
-    }
-  }
-  // New label.
-  TimelineLabelPauseInfo* pause_info = new TimelineLabelPauseInfo(name);
-  isolate_labels_.Add(pause_info);
-  return pause_info;
-}
-
-void TimelinePauseTrace::Aggregate(
-    const TimelineLabelPauseInfo* thread_pause_info) {
-  ASSERT(thread_pause_info != NULL);
-  TimelineLabelPauseInfo* isolate_pause_info =
-      GetOrAddLabelPauseInfo(thread_pause_info->name());
-  ASSERT(isolate_pause_info != NULL);
-  isolate_pause_info->Aggregate(thread_pause_info);
-}
-
-void TimelinePauseTrace::PrintPauseInfo(
-    const TimelineLabelPauseInfo* pause_info) {
-  ASSERT(pause_info != NULL);
-  THR_Print("%s : ", pause_info->name());
-  THR_Print("%.3f ms total on stack; ",
-            MicrosecondsToMilliseconds(pause_info->inclusive_micros()));
-  THR_Print("%.3f ms total executing; ",
-            MicrosecondsToMilliseconds(pause_info->exclusive_micros()));
-  THR_Print("%.3f ms max on stack; ",
-            MicrosecondsToMilliseconds(pause_info->max_inclusive_micros()));
-  THR_Print("%.3f ms max executing.\n",
-            MicrosecondsToMilliseconds(pause_info->max_exclusive_micros()));
-}
-
-#endif  // !PRODUCT
-
-}  // namespace dart
diff --git a/runtime/vm/timeline_analysis.h b/runtime/vm/timeline_analysis.h
deleted file mode 100644
index bb27436..0000000
--- a/runtime/vm/timeline_analysis.h
+++ /dev/null
@@ -1,206 +0,0 @@
-// Copyright (c) 2015, 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.
-
-#ifndef RUNTIME_VM_TIMELINE_ANALYSIS_H_
-#define RUNTIME_VM_TIMELINE_ANALYSIS_H_
-
-#include "vm/growable_array.h"
-#include "vm/timeline.h"
-
-namespace dart {
-
-class TimelineAnalysisThread : public ZoneAllocated {
- public:
-  explicit TimelineAnalysisThread(ThreadId id);
-  ~TimelineAnalysisThread();
-
-  ThreadId id() const { return id_; }
-
-  intptr_t NumBlocks() const { return blocks_.length(); }
-
-  TimelineEventBlock* At(intptr_t i) const { return blocks_.At(i); }
-
- private:
-  void AddBlock(TimelineEventBlock* block);
-  void Finalize();
-
-  const ThreadId id_;
-  ZoneGrowableArray<TimelineEventBlock*> blocks_;
-
-  friend class TimelineAnalysis;
-};
-
-class TimelineAnalysisThreadEventIterator : public ValueObject {
- public:
-  explicit TimelineAnalysisThreadEventIterator(TimelineAnalysisThread* thread);
-  ~TimelineAnalysisThreadEventIterator();
-
-  void Reset(TimelineAnalysisThread* thread);
-
-  bool HasNext() const;
-
-  TimelineEvent* Next();
-
- private:
-  TimelineAnalysisThread* thread_;
-  TimelineEvent* current_;
-  intptr_t block_cursor_;
-  intptr_t event_cursor_;
-};
-
-// Base of all timeline analysis classes. Base functionality:
-// - discovery of all thread ids in a recording.
-// - collecting all ThreadEventBlocks by thread id.
-class TimelineAnalysis : public ValueObject {
- public:
-  TimelineAnalysis(Zone* zone,
-                   Isolate* isolate,
-                   TimelineEventRecorder* recorder);
-  ~TimelineAnalysis();
-
-  void BuildThreads();
-
-  intptr_t NumThreads() const { return threads_.length(); }
-
-  TimelineAnalysisThread* At(intptr_t i) const { return threads_[i]; }
-
-  TimelineAnalysisThread* GetThread(ThreadId tid);
-
-  bool has_error() const { return has_error_; }
-
-  const char* error_msg() const { return error_msg_; }
-
- protected:
-  TimelineAnalysisThread* GetOrAddThread(ThreadId tid);
-
-  void DiscoverThreads();
-  void FinalizeThreads();
-
-  void SetError(const char* format, ...) PRINTF_ATTRIBUTE(2, 3);
-
-  Zone* zone_;
-  Isolate* isolate_;
-  TimelineEventRecorder* recorder_;
-  bool has_error_;
-  const char* error_msg_;
-
-  ZoneGrowableArray<TimelineAnalysisThread*> threads_;
-};
-
-class TimelineLabelPauseInfo : public ZoneAllocated {
- public:
-  explicit TimelineLabelPauseInfo(const char* name);
-
-  const char* name() const { return name_; }
-
-  int64_t inclusive_micros() const { return inclusive_micros_; }
-
-  int64_t exclusive_micros() const { return exclusive_micros_; }
-
-  int64_t max_inclusive_micros() const { return max_inclusive_micros_; }
-
-  int64_t max_exclusive_micros() const { return max_exclusive_micros_; }
-
- private:
-  // Adjusts |inclusive_micros_| and |exclusive_micros_| by |micros|.
-  // Also, may adjust, max_inclusive_micros_.
-  void OnPush(int64_t micros, bool already_on_stack);
-
-  // Adjusts |exclusive_micros_| by |exclusive_micros|.
-  // Also, may adjust |max_exclusive_micros_|.
-  void OnPop(int64_t exclusive_micros);
-
-  // Adjusts |inclusive_micros_| and |exclusive_micros_| by |micros|.
-  // Also, may adjust, |max_inclusive_micros_|.
-  void OnBeginPop(int64_t inclusive_micros,
-                  int64_t exclusive_micros,
-                  bool already_on_stack);
-
-  void UpdateInclusiveMicros(int64_t inclusive_micros, bool already_on_stack);
-  void UpdateExclusiveMicros(int64_t exclusive_micros);
-
-  // Adjust inclusive micros.
-  void add_inclusive_micros(int64_t delta_micros) {
-    inclusive_micros_ += delta_micros;
-    ASSERT(inclusive_micros_ >= 0);
-  }
-
-  // Adjust exclusive micros.
-  void add_exclusive_micros(int64_t delta_micros) {
-    exclusive_micros_ += delta_micros;
-    ASSERT(exclusive_micros_ >= 0);
-  }
-
-  void Aggregate(const TimelineLabelPauseInfo* thread_pause_info);
-
-  const char* name_;
-  int64_t inclusive_micros_;
-  int64_t exclusive_micros_;
-  int64_t max_inclusive_micros_;
-  int64_t max_exclusive_micros_;
-
-  friend class TimelinePauses;
-  friend class TimelinePauseTrace;
-};
-
-class TimelinePauses : public TimelineAnalysis {
- public:
-  TimelinePauses(Zone* zone, Isolate* isolate, TimelineEventRecorder* recorder);
-
-  void Setup();
-
-  void CalculatePauseTimesForThread(ThreadId tid);
-
-  TimelineLabelPauseInfo* GetLabelPauseInfo(const char* name) const;
-
-  int64_t InclusiveTime(const char* name) const;
-  int64_t ExclusiveTime(const char* name) const;
-  int64_t MaxInclusiveTime(const char* name) const;
-  int64_t MaxExclusiveTime(const char* name) const;
-
-  intptr_t NumPauseInfos() const { return labels_.length(); }
-
-  const TimelineLabelPauseInfo* PauseInfoAt(intptr_t i) const {
-    return labels_.At(i);
-  }
-
- private:
-  struct StackItem {
-    TimelineEvent* event;
-    TimelineLabelPauseInfo* pause_info;
-    int64_t exclusive_micros;
-  };
-
-  void ProcessThread(TimelineAnalysisThread* thread);
-  bool CheckStack(TimelineEvent* event);
-  void PopFinishedDurations(int64_t start);
-  void PopBegin(const char* label, int64_t end);
-  void Push(TimelineEvent* event);
-  bool IsLabelOnStack(const char* label) const;
-  intptr_t StackDepth() const;
-  StackItem& GetStackTop();
-  TimelineLabelPauseInfo* GetOrAddLabelPauseInfo(const char* name);
-
-  ZoneGrowableArray<StackItem> stack_;
-  ZoneGrowableArray<TimelineLabelPauseInfo*> labels_;
-};
-
-class TimelinePauseTrace : public ValueObject {
- public:
-  TimelinePauseTrace();
-  ~TimelinePauseTrace();
-
-  void Print();
-
- private:
-  TimelineLabelPauseInfo* GetOrAddLabelPauseInfo(const char* name);
-  void Aggregate(const TimelineLabelPauseInfo* thread_pause_info);
-  void PrintPauseInfo(const TimelineLabelPauseInfo* pause_info);
-
-  ZoneGrowableArray<TimelineLabelPauseInfo*> isolate_labels_;
-};
-
-}  // namespace dart
-
-#endif  // RUNTIME_VM_TIMELINE_ANALYSIS_H_
diff --git a/runtime/vm/timeline_test.cc b/runtime/vm/timeline_test.cc
index ba04a0b..f171921 100644
--- a/runtime/vm/timeline_test.cc
+++ b/runtime/vm/timeline_test.cc
@@ -10,7 +10,6 @@
 #include "vm/dart_api_state.h"
 #include "vm/globals.h"
 #include "vm/timeline.h"
-#include "vm/timeline_analysis.h"
 #include "vm/unit_test.h"
 
 namespace dart {
@@ -341,127 +340,6 @@
   EXPECT_EQ(1, override.recorder()->CountFor(TimelineEvent::kAsyncEnd));
 }
 
-static bool LabelMatch(TimelineEvent* event, const char* label) {
-  ASSERT(event != NULL);
-  return strcmp(event->label(), label) == 0;
-}
-
-TEST_CASE(TimelineAnalysis_ThreadBlockCount) {
-  TimelineRecorderOverride<TimelineEventEndlessRecorder> override;
-  ASSERT(Timeline::recorder() != NULL);
-  // Blocks owned by thread "1".
-  TimelineEventBlock* block_1_0 = Timeline::recorder()->GetNewBlock();
-  TimelineTestHelper::SetBlockThread(block_1_0, 1);
-  TimelineEventBlock* block_1_1 = Timeline::recorder()->GetNewBlock();
-  TimelineTestHelper::SetBlockThread(block_1_1, 1);
-  TimelineEventBlock* block_1_2 = Timeline::recorder()->GetNewBlock();
-  TimelineTestHelper::SetBlockThread(block_1_2, 1);
-  // Blocks owned by thread "2".
-  TimelineEventBlock* block_2_0 = Timeline::recorder()->GetNewBlock();
-  TimelineTestHelper::SetBlockThread(block_2_0, 2);
-  // Blocks owned by thread "3".
-  TimelineEventBlock* block_3_0 = Timeline::recorder()->GetNewBlock();
-  TimelineTestHelper::SetBlockThread(block_3_0, 3);
-  USE(block_3_0);
-
-  // Add events to each block for thread 1.
-  TimelineTestHelper::FakeThreadEvent(block_1_2, 1, "B1");
-  TimelineTestHelper::FakeThreadEvent(block_1_2, 1, "B2");
-  TimelineTestHelper::FakeThreadEvent(block_1_2, 1, "B3");
-  // Sleep to ensure timestamps differ.
-  OS::Sleep(32);
-  TimelineTestHelper::FakeThreadEvent(block_1_0, 1, "A1");
-  OS::Sleep(32);
-  TimelineTestHelper::FakeThreadEvent(block_1_1, 1, "C1");
-  TimelineTestHelper::FakeThreadEvent(block_1_1, 1, "C2");
-  OS::Sleep(32);
-
-  // Add events to each block for thread 2.
-  TimelineTestHelper::FakeThreadEvent(block_2_0, 2, "A");
-  TimelineTestHelper::FakeThreadEvent(block_2_0, 2, "B");
-  TimelineTestHelper::FakeThreadEvent(block_2_0, 2, "C");
-  TimelineTestHelper::FakeThreadEvent(block_2_0, 2, "D");
-  TimelineTestHelper::FakeThreadEvent(block_2_0, 2, "E");
-  TimelineTestHelper::FakeThreadEvent(block_2_0, 2, "F");
-
-  Zone* zone = thread->zone();
-  Isolate* isolate = thread->isolate();
-
-  // Discover threads in Timeline::recorder().
-  TimelineAnalysis ta(zone, isolate, Timeline::recorder());
-  ta.BuildThreads();
-  EXPECT(!ta.has_error());
-  // block_3_0 is never used by a thread, so we only have two threads.
-  EXPECT_EQ(2, ta.NumThreads());
-
-  // Extract both threads.
-  TimelineAnalysisThread* thread_1 =
-      ta.GetThread(OSThread::ThreadIdFromIntPtr(1));
-  TimelineAnalysisThread* thread_2 =
-      ta.GetThread(OSThread::ThreadIdFromIntPtr(2));
-  EXPECT_EQ(OSThread::ThreadIdFromIntPtr(1), thread_1->id());
-  EXPECT_EQ(OSThread::ThreadIdFromIntPtr(2), thread_2->id());
-
-  // Thread "1" should have three blocks.
-  EXPECT_EQ(3, thread_1->NumBlocks());
-
-  // Verify that blocks for thread "1" are sorted based on start time.
-  EXPECT_EQ(thread_1->At(0), block_1_2);
-  EXPECT_EQ(thread_1->At(1), block_1_0);
-  EXPECT_EQ(thread_1->At(2), block_1_1);
-
-  // Verify that block_1_2 has three events.
-  EXPECT_EQ(3, block_1_2->length());
-
-  // Verify that block_1_0 has one events.
-  EXPECT_EQ(1, block_1_0->length());
-
-  // Verify that block_1_1 has two events.
-  EXPECT_EQ(2, block_1_1->length());
-
-  // Thread '2" should have one block.'
-  EXPECT_EQ(1, thread_2->NumBlocks());
-  EXPECT_EQ(thread_2->At(0), block_2_0);
-  // Verify that block_2_0 has six events.
-  EXPECT_EQ(6, block_2_0->length());
-
-  {
-    TimelineAnalysisThreadEventIterator it(thread_1);
-    // Six events spread across three blocks.
-    EXPECT(it.HasNext());
-    EXPECT(LabelMatch(it.Next(), "B1"));
-    EXPECT(it.HasNext());
-    EXPECT(LabelMatch(it.Next(), "B2"));
-    EXPECT(it.HasNext());
-    EXPECT(LabelMatch(it.Next(), "B3"));
-    EXPECT(it.HasNext());
-    EXPECT(LabelMatch(it.Next(), "A1"));
-    EXPECT(it.HasNext());
-    EXPECT(LabelMatch(it.Next(), "C1"));
-    EXPECT(it.HasNext());
-    EXPECT(LabelMatch(it.Next(), "C2"));
-    EXPECT(!it.HasNext());
-  }
-
-  {
-    TimelineAnalysisThreadEventIterator it(thread_2);
-    // Six events spread across three blocks.
-    EXPECT(it.HasNext());
-    EXPECT(LabelMatch(it.Next(), "A"));
-    EXPECT(it.HasNext());
-    EXPECT(LabelMatch(it.Next(), "B"));
-    EXPECT(it.HasNext());
-    EXPECT(LabelMatch(it.Next(), "C"));
-    EXPECT(it.HasNext());
-    EXPECT(LabelMatch(it.Next(), "D"));
-    EXPECT(it.HasNext());
-    EXPECT(LabelMatch(it.Next(), "E"));
-    EXPECT(it.HasNext());
-    EXPECT(LabelMatch(it.Next(), "F"));
-    EXPECT(!it.HasNext());
-  }
-}
-
 TEST_CASE(TimelineRingRecorderJSONOrder) {
   TimelineStream stream("testStream", "testStream", true);
 
@@ -497,426 +375,6 @@
   EXPECT(alpha < beta);
 }
 
-TEST_CASE(TimelinePauses_Basic) {
-  Zone* zone = thread->zone();
-  Isolate* isolate = thread->isolate();
-  OSThread* os_thread = thread->os_thread();
-  ASSERT(os_thread != NULL);
-  ThreadId tid = os_thread->trace_id();
-
-  {
-    TimelineRecorderOverride<TimelineEventEndlessRecorder> override;
-    // Test case.
-    TimelineTestHelper::FakeDuration(Timeline::recorder(), "a", 0, 10);
-    {
-      TimelinePauses pauses(zone, isolate, Timeline::recorder());
-      pauses.Setup();
-      pauses.CalculatePauseTimesForThread(tid);
-      EXPECT(!pauses.has_error());
-      EXPECT_EQ(10, pauses.InclusiveTime("a"));
-      EXPECT_EQ(10, pauses.ExclusiveTime("a"));
-      EXPECT_EQ(10, pauses.MaxInclusiveTime("a"));
-      EXPECT_EQ(10, pauses.MaxExclusiveTime("a"));
-    }
-  }
-
-  {
-    TimelineRecorderOverride<TimelineEventEndlessRecorder> override;
-
-    // Test case.
-    TimelineTestHelper::FakeDuration(Timeline::recorder(), "a", 0, 10);
-    TimelineTestHelper::FakeDuration(Timeline::recorder(), "b", 0, 10);
-    {
-      TimelinePauses pauses(zone, isolate, Timeline::recorder());
-      pauses.Setup();
-      pauses.CalculatePauseTimesForThread(tid);
-      EXPECT(!pauses.has_error());
-      EXPECT_EQ(10, pauses.InclusiveTime("a"));
-      EXPECT_EQ(0, pauses.ExclusiveTime("a"));
-      EXPECT_EQ(10, pauses.MaxInclusiveTime("a"));
-      EXPECT_EQ(0, pauses.MaxExclusiveTime("a"));
-      EXPECT_EQ(10, pauses.InclusiveTime("b"));
-      EXPECT_EQ(10, pauses.ExclusiveTime("b"));
-      EXPECT_EQ(10, pauses.MaxInclusiveTime("b"));
-      EXPECT_EQ(10, pauses.MaxExclusiveTime("b"));
-    }
-  }
-
-  {
-    TimelineRecorderOverride<TimelineEventEndlessRecorder> override;
-
-    // Test case.
-    TimelineTestHelper::FakeDuration(Timeline::recorder(), "a", 0, 10);
-    TimelineTestHelper::FakeDuration(Timeline::recorder(), "b", 1, 8);
-    {
-      TimelinePauses pauses(zone, isolate, Timeline::recorder());
-      pauses.Setup();
-      pauses.CalculatePauseTimesForThread(tid);
-      EXPECT(!pauses.has_error());
-      EXPECT_EQ(10, pauses.InclusiveTime("a"));
-      EXPECT_EQ(3, pauses.ExclusiveTime("a"));
-      EXPECT_EQ(10, pauses.MaxInclusiveTime("a"));
-      EXPECT_EQ(3, pauses.MaxExclusiveTime("a"));
-      EXPECT_EQ(7, pauses.InclusiveTime("b"));
-      EXPECT_EQ(7, pauses.ExclusiveTime("b"));
-      EXPECT_EQ(7, pauses.MaxInclusiveTime("b"));
-      EXPECT_EQ(7, pauses.MaxExclusiveTime("b"));
-    }
-  }
-
-  {
-    TimelineRecorderOverride<TimelineEventEndlessRecorder> override;
-
-    // Test case.
-    TimelineTestHelper::FakeDuration(Timeline::recorder(), "a", 0, 10);
-    TimelineTestHelper::FakeDuration(Timeline::recorder(), "b", 0, 1);
-    TimelineTestHelper::FakeDuration(Timeline::recorder(), "b", 1, 2);
-    TimelineTestHelper::FakeDuration(Timeline::recorder(), "b", 2, 3);
-    TimelineTestHelper::FakeDuration(Timeline::recorder(), "b", 3, 4);
-    TimelineTestHelper::FakeDuration(Timeline::recorder(), "b", 4, 5);
-    TimelineTestHelper::FakeDuration(Timeline::recorder(), "b", 5, 6);
-    TimelineTestHelper::FakeDuration(Timeline::recorder(), "b", 6, 7);
-    TimelineTestHelper::FakeDuration(Timeline::recorder(), "b", 7, 8);
-    TimelineTestHelper::FakeDuration(Timeline::recorder(), "b", 8, 9);
-    TimelineTestHelper::FakeDuration(Timeline::recorder(), "b", 9, 10);
-    {
-      TimelinePauses pauses(zone, isolate, Timeline::recorder());
-      pauses.Setup();
-      pauses.CalculatePauseTimesForThread(tid);
-      EXPECT(!pauses.has_error());
-      EXPECT_EQ(10, pauses.InclusiveTime("a"));
-      EXPECT_EQ(0, pauses.ExclusiveTime("a"));
-      EXPECT_EQ(10, pauses.MaxInclusiveTime("a"));
-      EXPECT_EQ(0, pauses.MaxExclusiveTime("a"));
-      EXPECT_EQ(10, pauses.InclusiveTime("b"));
-      EXPECT_EQ(10, pauses.ExclusiveTime("b"));
-      EXPECT_EQ(1, pauses.MaxInclusiveTime("b"));
-      EXPECT_EQ(1, pauses.MaxExclusiveTime("b"));
-    }
-  }
-
-  {
-    TimelineRecorderOverride<TimelineEventEndlessRecorder> override;
-
-    // Test case.
-    TimelineTestHelper::FakeDuration(Timeline::recorder(), "a", 0, 10);
-    TimelineTestHelper::FakeDuration(Timeline::recorder(), "b", 0, 5);
-    TimelineTestHelper::FakeDuration(Timeline::recorder(), "c", 1, 4);
-    TimelineTestHelper::FakeDuration(Timeline::recorder(), "d", 5, 10);
-
-    {
-      TimelinePauses pauses(zone, isolate, Timeline::recorder());
-      pauses.Setup();
-      pauses.CalculatePauseTimesForThread(tid);
-      EXPECT(!pauses.has_error());
-      EXPECT_EQ(10, pauses.InclusiveTime("a"));
-      EXPECT_EQ(0, pauses.ExclusiveTime("a"));
-      EXPECT_EQ(10, pauses.MaxInclusiveTime("a"));
-      EXPECT_EQ(0, pauses.MaxExclusiveTime("a"));
-      EXPECT_EQ(5, pauses.InclusiveTime("b"));
-      EXPECT_EQ(2, pauses.ExclusiveTime("b"));
-      EXPECT_EQ(5, pauses.MaxInclusiveTime("b"));
-      EXPECT_EQ(2, pauses.MaxExclusiveTime("b"));
-      EXPECT_EQ(3, pauses.InclusiveTime("c"));
-      EXPECT_EQ(3, pauses.ExclusiveTime("c"));
-      EXPECT_EQ(3, pauses.MaxInclusiveTime("c"));
-      EXPECT_EQ(3, pauses.MaxExclusiveTime("c"));
-      EXPECT_EQ(5, pauses.InclusiveTime("d"));
-      EXPECT_EQ(5, pauses.ExclusiveTime("d"));
-      EXPECT_EQ(5, pauses.MaxInclusiveTime("d"));
-      EXPECT_EQ(5, pauses.MaxExclusiveTime("d"));
-    }
-  }
-
-  {
-    TimelineRecorderOverride<TimelineEventEndlessRecorder> override;
-
-    // Test case.
-    TimelineTestHelper::FakeDuration(Timeline::recorder(), "a", 0, 10);
-    TimelineTestHelper::FakeDuration(Timeline::recorder(), "b", 1, 9);
-    TimelineTestHelper::FakeDuration(Timeline::recorder(), "c", 2, 8);
-    TimelineTestHelper::FakeDuration(Timeline::recorder(), "d", 3, 7);
-    TimelineTestHelper::FakeDuration(Timeline::recorder(), "e", 4, 6);
-
-    {
-      TimelinePauses pauses(zone, isolate, Timeline::recorder());
-      pauses.Setup();
-      pauses.CalculatePauseTimesForThread(tid);
-      EXPECT(!pauses.has_error());
-      EXPECT_EQ(10, pauses.InclusiveTime("a"));
-      EXPECT_EQ(2, pauses.ExclusiveTime("a"));
-      EXPECT_EQ(10, pauses.MaxInclusiveTime("a"));
-      EXPECT_EQ(2, pauses.MaxExclusiveTime("a"));
-      EXPECT_EQ(8, pauses.InclusiveTime("b"));
-      EXPECT_EQ(2, pauses.ExclusiveTime("b"));
-      EXPECT_EQ(8, pauses.MaxInclusiveTime("b"));
-      EXPECT_EQ(2, pauses.MaxExclusiveTime("b"));
-      EXPECT_EQ(6, pauses.InclusiveTime("c"));
-      EXPECT_EQ(2, pauses.ExclusiveTime("c"));
-      EXPECT_EQ(6, pauses.MaxInclusiveTime("c"));
-      EXPECT_EQ(2, pauses.MaxExclusiveTime("c"));
-      EXPECT_EQ(4, pauses.InclusiveTime("d"));
-      EXPECT_EQ(2, pauses.ExclusiveTime("d"));
-      EXPECT_EQ(4, pauses.MaxInclusiveTime("d"));
-      EXPECT_EQ(2, pauses.MaxExclusiveTime("d"));
-      EXPECT_EQ(2, pauses.InclusiveTime("e"));
-      EXPECT_EQ(2, pauses.ExclusiveTime("e"));
-      EXPECT_EQ(2, pauses.MaxInclusiveTime("e"));
-      EXPECT_EQ(2, pauses.MaxExclusiveTime("e"));
-    }
-  }
-
-  {
-    TimelineRecorderOverride<TimelineEventEndlessRecorder> override;
-
-    // Test case.
-    TimelineTestHelper::FakeDuration(Timeline::recorder(), "a", 0, 10);
-    TimelineTestHelper::FakeDuration(Timeline::recorder(), "a", 1, 9);
-
-    {
-      TimelinePauses pauses(zone, isolate, Timeline::recorder());
-      pauses.Setup();
-      pauses.CalculatePauseTimesForThread(tid);
-      EXPECT(!pauses.has_error());
-      EXPECT_EQ(10, pauses.InclusiveTime("a"));
-      EXPECT_EQ(10, pauses.ExclusiveTime("a"));
-      EXPECT_EQ(10, pauses.MaxInclusiveTime("a"));
-      EXPECT_EQ(8, pauses.MaxExclusiveTime("a"));
-    }
-  }
-}
-
-TEST_CASE(TimelinePauses_BeginEnd) {
-  Zone* zone = thread->zone();
-  Isolate* isolate = thread->isolate();
-  OSThread* os_thread = thread->os_thread();
-  ASSERT(os_thread != NULL);
-  ThreadId tid = os_thread->trace_id();
-
-  {
-    TimelineRecorderOverride<TimelineEventEndlessRecorder> override;
-
-    // Test case.
-    TimelineTestHelper::FakeBegin(Timeline::recorder(), "a", 0);
-    TimelineTestHelper::FakeEnd(Timeline::recorder(), "a", 10);
-
-    {
-      TimelinePauses pauses(zone, isolate, Timeline::recorder());
-      pauses.Setup();
-      pauses.CalculatePauseTimesForThread(tid);
-      EXPECT(!pauses.has_error());
-      EXPECT_EQ(10, pauses.InclusiveTime("a"));
-      EXPECT_EQ(10, pauses.ExclusiveTime("a"));
-      EXPECT_EQ(10, pauses.MaxInclusiveTime("a"));
-      EXPECT_EQ(10, pauses.MaxExclusiveTime("a"));
-    }
-  }
-
-  {
-    TimelineRecorderOverride<TimelineEventEndlessRecorder> override;
-
-    // Test case.
-    TimelineTestHelper::FakeBegin(Timeline::recorder(), "a", 0);
-    TimelineTestHelper::FakeBegin(Timeline::recorder(), "b", 0);
-    TimelineTestHelper::FakeEnd(Timeline::recorder(), "b", 10);
-    TimelineTestHelper::FakeEnd(Timeline::recorder(), "a", 10);
-
-    {
-      TimelinePauses pauses(zone, isolate, Timeline::recorder());
-      pauses.Setup();
-      pauses.CalculatePauseTimesForThread(tid);
-      EXPECT(!pauses.has_error());
-      EXPECT_EQ(10, pauses.InclusiveTime("a"));
-      EXPECT_EQ(0, pauses.ExclusiveTime("a"));
-      EXPECT_EQ(10, pauses.MaxInclusiveTime("a"));
-      EXPECT_EQ(0, pauses.MaxExclusiveTime("a"));
-      EXPECT_EQ(10, pauses.InclusiveTime("b"));
-      EXPECT_EQ(10, pauses.ExclusiveTime("b"));
-      EXPECT_EQ(10, pauses.MaxInclusiveTime("b"));
-      EXPECT_EQ(10, pauses.MaxExclusiveTime("b"));
-    }
-  }
-
-  {
-    TimelineRecorderOverride<TimelineEventEndlessRecorder> override;
-
-    // Test case.
-    TimelineTestHelper::FakeBegin(Timeline::recorder(), "a", 0);
-    TimelineTestHelper::FakeBegin(Timeline::recorder(), "b", 1);
-    TimelineTestHelper::FakeEnd(Timeline::recorder(), "b", 8);
-    TimelineTestHelper::FakeEnd(Timeline::recorder(), "a", 10);
-
-    {
-      TimelinePauses pauses(zone, isolate, Timeline::recorder());
-      pauses.Setup();
-      pauses.CalculatePauseTimesForThread(tid);
-      EXPECT(!pauses.has_error());
-      EXPECT_EQ(10, pauses.InclusiveTime("a"));
-      EXPECT_EQ(3, pauses.ExclusiveTime("a"));
-      EXPECT_EQ(10, pauses.MaxInclusiveTime("a"));
-      EXPECT_EQ(3, pauses.MaxExclusiveTime("a"));
-      EXPECT_EQ(7, pauses.InclusiveTime("b"));
-      EXPECT_EQ(7, pauses.ExclusiveTime("b"));
-      EXPECT_EQ(7, pauses.MaxInclusiveTime("b"));
-      EXPECT_EQ(7, pauses.MaxExclusiveTime("b"));
-    }
-  }
-
-  {
-    TimelineRecorderOverride<TimelineEventEndlessRecorder> override;
-
-    // Test case.
-    TimelineTestHelper::FakeBegin(Timeline::recorder(), "a", 0);
-    TimelineTestHelper::FakeDuration(Timeline::recorder(), "b", 0, 1);
-    TimelineTestHelper::FakeDuration(Timeline::recorder(), "b", 1, 2);
-    TimelineTestHelper::FakeDuration(Timeline::recorder(), "b", 2, 3);
-    TimelineTestHelper::FakeBegin(Timeline::recorder(), "b", 3);
-    TimelineTestHelper::FakeEnd(Timeline::recorder(), "b", 4);
-    TimelineTestHelper::FakeDuration(Timeline::recorder(), "b", 4, 5);
-    TimelineTestHelper::FakeDuration(Timeline::recorder(), "b", 5, 6);
-    TimelineTestHelper::FakeDuration(Timeline::recorder(), "b", 6, 7);
-    TimelineTestHelper::FakeBegin(Timeline::recorder(), "b", 7);
-    TimelineTestHelper::FakeEnd(Timeline::recorder(), "b", 8);
-    TimelineTestHelper::FakeBegin(Timeline::recorder(), "b", 8);
-    TimelineTestHelper::FakeEnd(Timeline::recorder(), "b", 9);
-    TimelineTestHelper::FakeDuration(Timeline::recorder(), "b", 9, 10);
-    TimelineTestHelper::FakeEnd(Timeline::recorder(), "a", 10);
-
-    {
-      TimelinePauses pauses(zone, isolate, Timeline::recorder());
-      pauses.Setup();
-      pauses.CalculatePauseTimesForThread(tid);
-      EXPECT(!pauses.has_error());
-      EXPECT_EQ(10, pauses.InclusiveTime("a"));
-      EXPECT_EQ(0, pauses.ExclusiveTime("a"));
-      EXPECT_EQ(10, pauses.MaxInclusiveTime("a"));
-      EXPECT_EQ(0, pauses.MaxExclusiveTime("a"));
-      EXPECT_EQ(10, pauses.InclusiveTime("b"));
-      EXPECT_EQ(10, pauses.ExclusiveTime("b"));
-      EXPECT_EQ(1, pauses.MaxInclusiveTime("b"));
-      EXPECT_EQ(1, pauses.MaxExclusiveTime("b"));
-    }
-  }
-
-  {
-    TimelineRecorderOverride<TimelineEventEndlessRecorder> override;
-
-    // Test case.
-    TimelineTestHelper::FakeBegin(Timeline::recorder(), "a", 0);
-    TimelineTestHelper::FakeBegin(Timeline::recorder(), "b", 0);
-    TimelineTestHelper::FakeBegin(Timeline::recorder(), "c", 1);
-    TimelineTestHelper::FakeEnd(Timeline::recorder(), "c", 4);
-    TimelineTestHelper::FakeEnd(Timeline::recorder(), "b", 5);
-    TimelineTestHelper::FakeBegin(Timeline::recorder(), "d", 5);
-    TimelineTestHelper::FakeEnd(Timeline::recorder(), "d", 10);
-    TimelineTestHelper::FakeEnd(Timeline::recorder(), "a", 10);
-
-    {
-      TimelinePauses pauses(zone, isolate, Timeline::recorder());
-      pauses.Setup();
-      pauses.CalculatePauseTimesForThread(tid);
-      EXPECT(!pauses.has_error());
-      EXPECT_EQ(10, pauses.InclusiveTime("a"));
-      EXPECT_EQ(0, pauses.ExclusiveTime("a"));
-      EXPECT_EQ(10, pauses.MaxInclusiveTime("a"));
-      EXPECT_EQ(0, pauses.MaxExclusiveTime("a"));
-      EXPECT_EQ(5, pauses.InclusiveTime("b"));
-      EXPECT_EQ(2, pauses.ExclusiveTime("b"));
-      EXPECT_EQ(5, pauses.MaxInclusiveTime("b"));
-      EXPECT_EQ(2, pauses.MaxExclusiveTime("b"));
-      EXPECT_EQ(3, pauses.InclusiveTime("c"));
-      EXPECT_EQ(3, pauses.ExclusiveTime("c"));
-      EXPECT_EQ(3, pauses.MaxInclusiveTime("c"));
-      EXPECT_EQ(3, pauses.MaxExclusiveTime("c"));
-      EXPECT_EQ(5, pauses.InclusiveTime("d"));
-      EXPECT_EQ(5, pauses.ExclusiveTime("d"));
-      EXPECT_EQ(5, pauses.MaxInclusiveTime("d"));
-      EXPECT_EQ(5, pauses.MaxExclusiveTime("d"));
-    }
-  }
-
-  {
-    TimelineRecorderOverride<TimelineEventEndlessRecorder> override;
-
-    // Test case.
-    TimelineTestHelper::FakeBegin(Timeline::recorder(), "a", 0);
-    TimelineTestHelper::FakeBegin(Timeline::recorder(), "b", 1);
-    TimelineTestHelper::FakeBegin(Timeline::recorder(), "c", 2);
-    TimelineTestHelper::FakeBegin(Timeline::recorder(), "d", 3);
-    TimelineTestHelper::FakeBegin(Timeline::recorder(), "e", 4);
-    TimelineTestHelper::FakeEnd(Timeline::recorder(), "e", 6);
-    TimelineTestHelper::FakeEnd(Timeline::recorder(), "d", 7);
-    TimelineTestHelper::FakeEnd(Timeline::recorder(), "c", 8);
-    TimelineTestHelper::FakeEnd(Timeline::recorder(), "b", 9);
-    TimelineTestHelper::FakeEnd(Timeline::recorder(), "a", 10);
-
-    {
-      TimelinePauses pauses(zone, isolate, Timeline::recorder());
-      pauses.Setup();
-      pauses.CalculatePauseTimesForThread(tid);
-      EXPECT(!pauses.has_error());
-      EXPECT_EQ(10, pauses.InclusiveTime("a"));
-      EXPECT_EQ(2, pauses.ExclusiveTime("a"));
-      EXPECT_EQ(10, pauses.MaxInclusiveTime("a"));
-      EXPECT_EQ(2, pauses.MaxExclusiveTime("a"));
-      EXPECT_EQ(8, pauses.InclusiveTime("b"));
-      EXPECT_EQ(2, pauses.ExclusiveTime("b"));
-      EXPECT_EQ(8, pauses.MaxInclusiveTime("b"));
-      EXPECT_EQ(2, pauses.MaxExclusiveTime("b"));
-      EXPECT_EQ(6, pauses.InclusiveTime("c"));
-      EXPECT_EQ(2, pauses.ExclusiveTime("c"));
-      EXPECT_EQ(6, pauses.MaxInclusiveTime("c"));
-      EXPECT_EQ(2, pauses.MaxExclusiveTime("c"));
-      EXPECT_EQ(4, pauses.InclusiveTime("d"));
-      EXPECT_EQ(2, pauses.ExclusiveTime("d"));
-      EXPECT_EQ(4, pauses.MaxInclusiveTime("d"));
-      EXPECT_EQ(2, pauses.MaxExclusiveTime("d"));
-      EXPECT_EQ(2, pauses.InclusiveTime("e"));
-      EXPECT_EQ(2, pauses.ExclusiveTime("e"));
-      EXPECT_EQ(2, pauses.MaxInclusiveTime("e"));
-      EXPECT_EQ(2, pauses.MaxExclusiveTime("e"));
-    }
-  }
-
-  {
-    TimelineRecorderOverride<TimelineEventEndlessRecorder> override;
-
-    // Test case.
-    TimelineTestHelper::FakeBegin(Timeline::recorder(), "a", 0);
-    TimelineTestHelper::FakeBegin(Timeline::recorder(), "a", 1);
-    TimelineTestHelper::FakeEnd(Timeline::recorder(), "a", 9);
-    TimelineTestHelper::FakeEnd(Timeline::recorder(), "a", 10);
-
-    {
-      TimelinePauses pauses(zone, isolate, Timeline::recorder());
-      pauses.Setup();
-      pauses.CalculatePauseTimesForThread(tid);
-      EXPECT(!pauses.has_error());
-      EXPECT_EQ(10, pauses.InclusiveTime("a"));
-      EXPECT_EQ(10, pauses.ExclusiveTime("a"));
-      EXPECT_EQ(10, pauses.MaxInclusiveTime("a"));
-      EXPECT_EQ(8, pauses.MaxExclusiveTime("a"));
-    }
-  }
-
-  {
-    TimelineRecorderOverride<TimelineEventEndlessRecorder> override;
-
-    // Test case.
-    TimelineTestHelper::FakeBegin(Timeline::recorder(), "a", 0);
-    TimelineTestHelper::FakeBegin(Timeline::recorder(), "b", 1);
-    // Pop "a" without popping "b" first.
-    TimelineTestHelper::FakeEnd(Timeline::recorder(), "a", 10);
-
-    {
-      TimelinePauses pauses(zone, isolate, Timeline::recorder());
-      pauses.Setup();
-      pauses.CalculatePauseTimesForThread(tid);
-      EXPECT(pauses.has_error());
-    }
-  }
-}
-
 #endif  // !PRODUCT
 
 }  // namespace dart
diff --git a/runtime/vm/vm_sources.gni b/runtime/vm/vm_sources.gni
index a2ed92d..2d68f1e 100644
--- a/runtime/vm/vm_sources.gni
+++ b/runtime/vm/vm_sources.gni
@@ -328,8 +328,6 @@
   "thread_state.h",
   "timeline.cc",
   "timeline.h",
-  "timeline_analysis.cc",
-  "timeline_analysis.h",
   "timeline_android.cc",
   "timeline_fuchsia.cc",
   "timeline_linux.cc",
diff --git a/tests/corelib/corelib.status b/tests/corelib/corelib.status
index d649a5d..97150c2 100644
--- a/tests/corelib/corelib.status
+++ b/tests/corelib/corelib.status
@@ -5,9 +5,17 @@
 [ $compiler == dartdevk ]
 regexp/lookbehind_test/01: Skip # Flaky in uncatchable way.  Issue 36280
 
+[ $compiler == dartkp ]
+bigint_parse_radix_test: Slow, Pass # --no_intrinsify
+bigint_test/03: SkipSlow # --no_intrinsify
+bigint_test/15: SkipSlow # --no_intrinsify
+
 [ $mode == debug ]
 regexp/pcre_test: Slow, Pass # Issue 22008
 
+[ $system == android ]
+throw_half_surrogate_pair_test/*: Skip # Issue http://dartbug.com/42094
+
 [ $arch == x64 && $system == windows ]
 stopwatch_test: Skip # Flaky test due to expected performance behaviour.
 
@@ -30,6 +38,9 @@
 [ $compiler == none && !$checked && ($runtime == dart_precompiled || $runtime == vm) ]
 *: SkipByDesign
 
+[ $runtime != dart_precompiled && $runtime != vm ]
+reg_exp_receive_port_test: SkipByDesign # uses SendPort/ReceivePort
+
 [ $runtime != none && ($compiler == dart2js || $compiler == dartdevc || $compiler == dartdevk) ]
 int_parse_with_limited_ints_test: SkipByDesign # Requires fixed-size int64 support.
 integer_arith_vm_test: SkipByDesign # Is a VM optimization test that requires int64 support.
@@ -47,22 +58,11 @@
 uri_parse_test: Slow, Pass
 uri_test: Slow, Pass
 
-[ $compiler == dartkp ]
-bigint_parse_radix_test: Slow, Pass # --no_intrinsify
-bigint_test/03: SkipSlow # --no_intrinsify
-bigint_test/15: SkipSlow # --no_intrinsify
-
 [ $runtime == dart_precompiled || $runtime == vm ]
 regexp/global_test: Skip # Issue 21709
 regexp/pcre_test: Slow, Pass
 
-[ $runtime != vm ]
-reg_exp_receive_port_test : Skip # uses SendPort/ReceivePort
-
 [ $hot_reload || $hot_reload_rollback ]
 bigint_parse_radix_test: Skip # Issue 31659. Issue 34361.
 bigint_test: Skip # Issue 31659
 integer_parsed_mul_div_vm_test: Slow, Pass # Slow
-
-[ $system == android ]
-throw_half_surrogate_pair_test/* : Skip # Issue http://dartbug.com/42094
diff --git a/tests/corelib_2/corelib_2.status b/tests/corelib_2/corelib_2.status
index 5353258..726b58f 100644
--- a/tests/corelib_2/corelib_2.status
+++ b/tests/corelib_2/corelib_2.status
@@ -16,9 +16,6 @@
 [ $runtime != none ]
 string_runes_test: Skip # See breaking change #40674
 
-[ $runtime != vm ]
-reg_exp_receive_port_test: Skip # uses SendPort/ReceivePort
-
 [ $system == android ]
 throw_half_surrogate_pair_test/*: Skip # Issue http://dartbug.com/42094
 
@@ -44,6 +41,9 @@
 [ $compiler == none && !$checked && ($runtime == dart_precompiled || $runtime == vm) ]
 *: SkipByDesign
 
+[ $runtime != dart_precompiled && $runtime != vm ]
+reg_exp_receive_port_test: SkipByDesign # uses SendPort/ReceivePort
+
 [ $runtime != none && ($compiler == dart2js || $compiler == dartdevc || $compiler == dartdevk) ]
 int_parse_with_limited_ints_test: SkipByDesign # Requires fixed-size int64 support.
 integer_arith_vm_test: SkipByDesign # Is a VM optimization test that requires int64 support.
diff --git a/tools/VERSION b/tools/VERSION
index 8d43d02..711c5dd 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 14
 PATCH 0
-PRERELEASE 193
+PRERELEASE 194
 PRERELEASE_PATCH 0
\ No newline at end of file
diff --git a/tools/bots/test_matrix.json b/tools/bots/test_matrix.json
index d310455..9f22437 100644
--- a/tools/bots/test_matrix.json
+++ b/tools/bots/test_matrix.json
@@ -533,7 +533,7 @@
       "options": {
         "use-sdk": true,
         "dart2js-options": [
-          "--no-legacy-javascript"
+          "--canary"
         ]
       }
     },
@@ -687,7 +687,7 @@
         "builder-tag": "dart2js_modern",
         "use-sdk": true,
         "dart2js-options": [
-          "--no-legacy-javascript"
+          "--canary"
         ]
       }
     },
@@ -2612,7 +2612,7 @@
           ]
         },
         {
-          "name": "dart2js --no-legacy-javascript smoke tests",
+          "name": "dart2js --canary smoke tests",
           "arguments": [
             "-ndart2js-modern-linux-d8",
             "--dart2js-batch",
